# 로그인 / 로그아웃

{% hint style="warning" %}
mkt\_login / mkt\_logout 이벤트는 SDK가 기기와 사용자 사이의 관계를 판단하는데 사용됩니다.&#x20;

로그인 이벤트를 일으킨 사용자는 자동으로 해당 이벤트를 일으킨 기기와 연결되고, 로그아웃을 일으킨 경우 사용자는 해당 기기와의 연결이 해제됩니다.&#x20;

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

사용자가 로그인했음을 SDK에 알립니다. 사용자 식별자(user id)를 전달하여 이후 이벤트와 데이터를 사용자와 연결합니다. 이벤트 이름은 자동으로 mkt\_login, mkt\_logout으로 설정되어 수집 서버에 전달됩니다.

{% tabs %}
{% tab title="JavaScript" %}

```javascript
mtap.login(user.id); // "USER_ID_1234"
...
mtap.logout();
```

아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

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

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

{% tab title="Android - Kotlin" %}

```kotlin
Marketap.login(user.id); // "USER_ID_1234"
...
Marketap.logout()
```

아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다.

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

{% endtab %}

{% tab title="Android - Java" %}

```java
Marketap.login(user.id); // "USER_ID_1234"
...
Marketap.logout();
```

아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다.

```java
Marketap.login(
    "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("is_first_login", false);
    }}
);
```

{% endtab %}

{% tab title="IOS - Swift" %}

```swift
Marketap.login(userId: user.id) // "USER_ID_1234"
...
Marketap.logout()
```

아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

```swift
Marketap.login(
  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: [
    // 이벤트 속성
    "is_first_login": false
  ]
)
```

{% endtab %}

{% tab title="Flutter - Dart" %}

```swift
Marketap.login(userId: user.id); // "USER_ID_1234"
...
Marketap.logout();
```

아래와 같이 유저 정보와 이벤트 프로퍼티를 함께 전달할 수 있습니다 .

```swift
Marketap.login(
  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: {
    // 이벤트 속성
    "is_first_login": false
  }
);
```

{% endtab %}
{% endtabs %}

## Best Practice

#### 유저와 기기간의 관계에 대한 이해

Login이벤트는 단순히 이벤트를 넘어서, 해당 기기에서 일어난 이벤트들이 해당 유저에게 귀속되도록 하는 중요한 기능을 담고 있습니다. 반드시 관련 문서를 읽고, login과 logout을 적절한 시점에 호출하는지 점검해야 합니다.

{% content-ref url="../../user-profile/device" %}
[device](https://docs.marketap.io/t3ZS4WXNMj0HK27EtIMV/developer/taxonomy/sdk/user-profile/device)
{% endcontent-ref %}
