로그인/로그아웃

SDK를 사용하려면 사용자 로그인이 필요합니다. 앱의 로그인 플로우에 맞춰 SDK 로그인도 함께 처리합니다.

로그인

기본 로그인

Android:

val user = AdchainSdkUser(
    userId = "user123",     // 필수: 앱의 사용자 ID
    gender = Gender.MALE,    // 선택
    birthYear = 1990        // 선택
)

AdchainSdk.login(
    user = user,
    listener = object : AdchainSdkLoginListener {
        override fun onSuccess() {
            // 로그인 성공
        }

        override fun onFailure(error: AdchainError) {
            // 로그인 실패
            Log.e("AdChain", "로그인 실패: ${error.message}")
        }
    }
)

iOS:

let user = AdchainSdkUser(
    userId: "user123",
    gender: .male,
    birthYear: 1990
)

AdchainSdk.shared.login(
    adchainSdkUser: user,
    listener: LoginListener()
)

React Native:

await AdchainSdk.login({
  userId: 'user123',
  gender: 'MALE',
  birthYear: 1990,
});

userId는 뭘 써야 하나요?

앱에서 사용자를 식별하는 ID를 그대로 쓰시면 됩니다. 이메일, 전화번호, UUID, 숫자 ID 뭐든 상관없습니다. 단, 다음 조건을 지켜주세요:

  • 고유해야 함: 같은 사용자는 항상 같은 ID

  • 변하지 않음: 사용자가 앱을 삭제하고 다시 설치해도 같은 ID

  • 개인정보 아님: 가능하면 이메일이나 전화번호보다는 해시된 ID가 좋습니다

성별과 출생연도는 왜 필요한가요?

선택사항이지만, 제공하면 광고 타겟팅 정확도가 향상되어 매출에 도움이 됩니다. 예를 들어:

  • 20대 남성에게는 게임 광고

  • 30대 여성에게는 쇼핑 광고

다음과 같이 적합한 광고를 표시할 수 있습니다. 사용자에게는 관심 있는 광고가 표시되고, 광고주에게는 높은 전환율을 제공합니다.

없어도 작동은 합니다. 다만 매출이 20-30% 정도 낮을 수 있습니다.

성별 옵션

// Android
Gender.MALE
Gender.FEMALE
Gender.OTHER
Gender.UNKNOWN

// iOS
.male
.female
.other
.unknown

// React Native
'MALE'
'FEMALE'
'OTHER'
'UNKNOWN'

로그인 상태 확인

로그인 됐는지 확인:

Android:

if (AdchainSdk.isLoggedIn) {
    // 로그인됨
    val currentUser = AdchainSdk.getCurrentUser()
    println("현재 사용자: ${currentUser?.userId}")
} else {
    // 로그인 안 됨
}

iOS:

if AdchainSdk.shared.isLoggedIn {
    let currentUser = AdchainSdk.shared.getCurrentUser()
    print("현재 사용자: \(currentUser?.userId ?? "")")
} else {
    // 로그인 안 됨
}

React Native:

const isLoggedIn = await AdchainSdk.isLoggedIn();
if (isLoggedIn) {
  const user = await AdchainSdk.getCurrentUser();
  console.log('현재 사용자:', user.userId);
}

로그아웃

사용자가 앱에서 로그아웃할 때 SDK 로그아웃도 같이 해야 합니다:

Android:

AdchainSdk.logout()

iOS:

AdchainSdk.shared.logout()

React Native:

await AdchainSdk.logout();

로그아웃하면 SDK가 가지고 있던 사용자 데이터가 모두 지워집니다. 다시 오퍼월을 쓰려면 로그인을 새로 해야 합니다.

자동 로그인

앱을 다시 실행했을 때 자동으로 로그인되게 하려면:

// Android
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        // SDK 초기화
        AdchainSdk.initialize(...)

        // 저장된 사용자 정보가 있으면 자동 로그인
        val savedUserId = SharedPreferencesHelper.getUserId()  // 앱의 저장소에서
        if (savedUserId != null) {
            val user = AdchainSdkUser(userId = savedUserId, ...)
            AdchainSdk.login(user, ...)
        }
    }
}

마찬가지로 iOS나 React Native에서도 앱 시작 시 저장된 사용자 정보로 자동 로그인할 수 있습니다.

사용자 정보 업데이트

사용자 정보가 변경되면(예: 프로필에서 성별 변경) 다시 로그인합니다. SDK가 자동으로 업데이트합니다:

// 사용자가 프로필 수정했을 때
val updatedUser = AdchainSdkUser(
    userId = currentUserId,
    gender = Gender.FEMALE,  // 변경됨
    birthYear = currentBirthYear
)

AdchainSdk.login(updatedUser, ...)  // 다시 로그인

여러 사용자 지원

한 기기에서 여러 사용자가 번갈아가며 쓸 수 있는 앱이라면:

// A 사용자 로그아웃
AdchainSdk.logout()

// B 사용자 로그인
val userB = AdchainSdkUser(userId = "userB", ...)
AdchainSdk.login(userB, ...)

이렇게 하면 각 사용자의 데이터가 섞이지 않습니다.

문제 해결

로그인이 계속 실패해요

  1. SDK 초기화 확인

    if (!AdchainSdk.isInitialized()) {
        // 초기화를 먼저 해야 합니다
    }
  2. 인터넷 연결 확인

    로그인할 때 애드체인 서버와 통신합니다.

  3. appKey/appSecret 확인

    초기화할 때 넣은 값이 맞는지 확인하세요.

  4. 에러 메시지 확인

    override fun onFailure(error: AdchainError) {
        Log.e("AdChain", "에러 코드: ${error.code}, 메시지: ${error.message}")
    }

로그인은 되는데 오퍼월이 안 열려요

로그인 콜백이 온 다음에 오퍼월을 열어야 합니다:

AdchainSdk.login(user, object : AdchainSdkLoginListener {
    override fun onSuccess() {
        // 여기서 오퍼월을 열어야 함
        AdchainSdk.openOfferwall(...)
    }
    ...
})

다음 단계

Last updated