# 회원가입

{% hint style="warning" %}
mkt\_signup 시에는, 회원가입하는 user\_id를 명시해주어야 합니다. 이어서 이 유저를 계속 로그인 상태로 유지할지, 아니면 직접 로그인 시킬지에 따라 `persistUesr` 옵션을 설정해주어야 합니다.

이 로그인상태는 고객의 기기로 푸시메세지를 보낼때 **고객의 보유 여부 기준**이 됩니다. ([관련 문서](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/sdk/user-profile/device))
{% endhint %}

사용자가 회원가입했음을 SDK에 알립니다. 사용자 식별자(user id)를 전달하여 이후 이벤트와 데이터를 사용자와 연결합니다. 만약, 회원가입 이후 자동로그인의 흐름을 사용하지 않는 경우, `persistUser` 옵션을 `false`로 명시해주어야 합니다. 제공되지 않는 경우 기본값은 `true`입니다. 이벤트 이름은 자동으로 mkt\_signup으로 설정되어 수집 서버에 전달됩니다.

{% tabs %}
{% tab title="JavaScript" %}
아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

```javascript
mtap.signup(user.id, // "USER_ID_1234"
  {
    // 유저 속성
    mkt_name: user.name, // 'John Doe',
    mkt_email: user.email, // 'john@example.com',
    mkt_gender: user.gender // 'Male',
  }, 
  {
    // 이벤트 속성
    retain_from_adv: false
  },
  false // persistUser 옵션
);
```

{% hint style="danger" %}
유저 프로퍼티와 이벤트 프로퍼티의 순서가 바뀌지 않도록 주의하세요.
{% endhint %}
{% endtab %}

{% tab title="Android - Kotlin" %}
아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다.

```kotlin
Marketap.signup(
    userId = "USER_ID_1234",
    userProperties = mapOf(
        "mkt_name" to "John Doe",
        "mkt_email" to "john@example.com",
        "mkt_gender" to "Male"
    ),
    eventProperties = mapOf(
        "retain_from_adv" to false
    ),
    persistUser = false
)
```

{% hint style="danger" %}
유저 프로퍼티와 이벤트 프로퍼티의 순서가 바뀌지 않도록 주의하세요.
{% endhint %}
{% endtab %}

{% tab title="Android - Java" %}
아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다.

```java
Marketap.signup(
    "USER_ID_1234",
    new HashMap<String, Object>() {{
        put("mkt_name", "John Doe");
        put("mkt_email", "john@example.com");
        put("mkt_gender", "Male");
    }},
    new HashMap<String, Object>() {{
        put("retain_from_adv", false);
    }},
    false // persistUser option
);
```

{% hint style="danger" %}
유저 프로퍼티와 이벤트 프로퍼티의 순서가 바뀌지 않도록 주의하세요.
{% endhint %}
{% endtab %}

{% tab title="IOS - Swift" %}
아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

```swift
Marketap.signup(
  userId: user.id, // "USER_ID_1234"
  userProperties: [
    // 유저 속성
    "mkt_name": user.name // 'John Doe',
    "mkt_email": user.email // 'john@example.com',
    "mkt_gender": user.gender // 'Male',
  ], 
  eventProperties: [
    // 이벤트 속성
    "retain_from_adv": false
  ],
  persistUser: false
)
```

{% hint style="danger" %}
유저 프로퍼티와 이벤트 프로퍼티의 순서가 바뀌지 않도록 주의하세요.
{% endhint %}
{% endtab %}

{% tab title="Flutter - Dart" %}
아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

```swift
Marketap.signup(
  userId: user.id, // "USER_ID_1234"
  userProperties: {
    // 유저 속성
    "mkt_name": user.name // 'John Doe',
    "mkt_email": user.email // 'john@example.com',
    "mkt_gender": user.gender // 'Male',
  }, 
  eventProperties: {
    // 이벤트 속성
    "retain_from_adv": false
  },
  persistUser: false
);
```

{% hint style="danger" %}
유저 프로퍼티와 이벤트 프로퍼티의 순서가 바뀌지 않도록 주의하세요.
{% endhint %}
{% endtab %}
{% endtabs %}

## Best Practice

플랫폼의 회원가입 시나리오에 따라 연동 방식이 달라집니다.

#### 1. 회원가입 이후 유저가 명시적으로 로그인을 해야 하는 경우

회원가입 이벤트에서는 반드시 `user_id`가 필요합니다. 다만 이후 발생하는 이벤트는 다시 익명 유저 이벤트로 기록되어야 합니다. 이를 위해 `persistUser` 값을 `false`로 설정하면, SDK가 해당 이벤트를 `user_id`와 함께 기록한 뒤 자동으로 익명 상태로 복귀하도록 동작합니다.

```dart
Marketap.signup(
  userId: user.id, // "USER_ID_1234"
  userProperties: {
    // 유저 속성
    "mkt_name": user.name // 'John Doe',
    "mkt_email": user.email // 'john@example.com',
    "mkt_gender": user.gender // 'Male',
  }, 
  eventProperties: {
    // 이벤트 속성
    "retain_from_adv": false
  },
  persistUser: false
);
```

#### 2. 회원가입 이후 유저가 가입된 데이터로 자동으로 로그인되는 경우

이 경우에는 `persistUser` 값을 별도로 설정하지 않거나 `true`로 지정해야 합니다. 이렇게 하면 SDK가 해당 이벤트 이후에도 로그인 이벤트처럼 동일한 유저와 계속 연결된 상태를 유지합니다.

```dart
Marketap.signup(
  userId: user.id, // "USER_ID_1234"
  userProperties: {
    // 유저 속성
    "mkt_name": user.name // 'John Doe',
    "mkt_email": user.email // 'john@example.com',
    "mkt_gender": user.gender // 'Male',
  }, 
  eventProperties: {
    // 이벤트 속성
    "retain_from_adv": false
  },
  persistUser: true // null인 경우도 true로 간주 (default)
);
```
