ÿÿ Adapty ã§ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è­˜åˆ¥ | Adapty ドキュメント

Kotlin Multiplatform SDK ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’識別ã™ã‚‹

Adapty ã¯ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã—ã¦å†…部プロファイル ID を作æˆã—ã¾ã™ã€‚ãŸã ã—ã€ç‹¬è‡ªã®èªè¨¼ã‚·ã‚¹ãƒ†ãƒ ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ç‹¬è‡ªã® Customer User ID を設定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Profiles セクション㧠Customer User ID ã«ã‚ˆã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’検索ã—ãŸã‚Šã€ã™ã¹ã¦ã®ã‚¤ãƒ³ãƒ†ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«é€ä¿¡ã•れるサーãƒãƒ¼ã‚µã‚¤ãƒ‰ API ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

設定時㫠Customer User ID を設定ã™ã‚‹

設定時ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ ID ãŒã‚ã‚‹å ´åˆã¯ã€.activate() メソッド㮠customerUserId パラメータã¨ã—ã¦æ¸¡ã™ã ã‘ã§ã™ï¼š


Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId("YOUR_USER_ID")
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
    }
}

Adapty SDK ãŒãƒ¢ãƒã‚¤ãƒ«ã‚¢ãƒ—リã«ã©ã®ã‚ˆã†ã«çµ±åˆã•れã¦ã„ã‚‹ã‹ã€å®Ÿéš›ã®ä¾‹ã‚’見ã¦ã¿ã¾ã›ã‚“ã‹ï¼Ÿãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®è¡¨ç¤ºã€è³¼å…¥å‡¦ç†ã€ãã®ä»–ã®åŸºæœ¬æ©Ÿèƒ½ã‚’å«ã‚€å®Œå…¨ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を実演ã—ã¦ã„るサンプルアプリをã”覧ãã ã•ã„。

設定後㫠Customer User ID を設定ã™ã‚‹

SDK ã®è¨­å®šæ™‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ ID ãŒãªã„å ´åˆã¯ã€å¾Œã‹ã‚‰ .identify() メソッドを使ã£ã¦ã„ã¤ã§ã‚‚設定ã§ãã¾ã™ã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒæœ€ã‚‚よã使ã‚れるã®ã¯ã€ç™»éŒ²å¾Œã‚„ログイン後ã«åŒ¿åユーザーã‹ã‚‰èªè¨¼æ¸ˆã¿ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸åˆ‡ã‚Šæ›¿ã‚るタイミングã§ã™ã€‚


Adapty.identify("YOUR_USER_ID").onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

リクエストパラメータ:

  • Customer User ID(必須): 文字列ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è­˜åˆ¥å­ã€‚

é‡è¦ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã®å†é€ä¿¡

ユーザーãŒå†åº¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å ´åˆãªã©ã€Adapty ã®ã‚µãƒ¼ãƒãƒ¼ã«ã™ã§ã«ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æƒ…å ±ãŒå­˜åœ¨ã—ã¦ã„ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ˆã†ãªå ´åˆã€Adapty SDK ã¯è‡ªå‹•çš„ã«æ–°ã—ã„ユーザーã¨ã—ã¦å‹•作を切り替ãˆã¾ã™ã€‚カスタム属性やサードパーティãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‹ã‚‰ã®ã‚¢ãƒˆãƒªãƒ“ューションãªã©ã€åŒ¿åユーザーã«å¯¾ã—ã¦ãƒ‡ãƒ¼ã‚¿ã‚’渡ã—ã¦ã„ãŸå ´åˆã¯ã€è­˜åˆ¥ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã—ã¦ãã®ãƒ‡ãƒ¼ã‚¿ã‚’å†é€ä¿¡ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

ã¾ãŸã€æ–°ã—ã„ユーザーã®ãƒ‡ãƒ¼ã‚¿ãŒç•°ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’識別ã—ãŸå¾Œã¯ã™ã¹ã¦ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã¨ãƒ—ロダクトをå†å–å¾—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«ã‚‚注æ„ã—ã¦ãã ã•ã„。

ログアウトã¨ãƒ­ã‚°ã‚¤ãƒ³

.logout() メソッドを呼ã³å‡ºã™ã“ã¨ã§ã€ã„ã¤ã§ã‚‚ユーザーをログアウトã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼š


Adapty.logout().onSuccess {
    // successful logout
}.onError { error ->
    // handle the error
}

ãã®å¾Œã€.identify() メソッドを使ã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ログインã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

appAccountToken を割り当ã¦ã‚‹ï¼ˆiOS)

iosAppAccountToken ã¯ã€App Store ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’内部ユーザー ID ã«ç´ä»˜ã‘ã‚‹ãŸã‚ã® UUID ã§ã™ã€‚ StoreKit ã¯ã™ã¹ã¦ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’関連付ã‘ã‚‹ãŸã‚ã€ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã§ App Store ã®ãƒ‡ãƒ¼ã‚¿ã‚’ユーザーã¨ç…§åˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

ユーザーã”ã¨ã«å®‰å®šã—㟠UUID を生æˆã—ã€åŒã˜ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«å¯¾ã—ã¦ãƒ‡ãƒã‚¤ã‚¹ã‚’ã¾ãŸã„ã§å†åˆ©ç”¨ã—ã¦ãã ã•ã„。 ã“れã«ã‚ˆã‚Šã€è³¼å…¥ã‚„ App Store ã®é€šçŸ¥ãŒæ­£ã—ãç´ä»˜ã‘られãŸã¾ã¾ã«ãªã‚Šã¾ã™ã€‚

トークンã¯ã€SDK ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³æ™‚ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®è­˜åˆ¥æ™‚ã® 2 ã¤ã®æ–¹æ³•ã§è¨­å®šã§ãã¾ã™ã€‚

iosAppAccountToken ã¯å¿…ãš customerUserId ã¨ä¸€ç·’ã«æ¸¡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ トークンã®ã¿ã‚’渡ã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«å«ã¾ã‚Œã¾ã›ã‚“。


// During configuration:
Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId(
            id = "YOUR_USER_ID",
            iosAppAccountToken = "YOUR_IOS_APP_ACCOUNT_TOKEN"
        )
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
}

// Or when identifying users
Adapty.identify(
    customerUserId = "YOUR_USER_ID",
    iosAppAccountToken = "YOUR_IOS_APP_ACCOUNT_TOKEN"
).onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

難読化アカウント ID を設定ã™ã‚‹ï¼ˆAndroid)

Google Play ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ライãƒã‚·ãƒ¼ã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’強化ã™ã‚‹ãŸã‚ã«ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§é›£èª­åŒ–アカウント ID ãŒå¿…è¦ã§ã™ã€‚ã“れら㮠ID ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を匿åã«ä¿ã¡ãªãŒã‚‰ Google Play ãŒè³¼å…¥ã‚’識別ã™ã‚‹ã®ã«å½¹ç«‹ã¡ã€ä¸æ­£é˜²æ­¢ã‚„アナリティクスã«ãŠã„ã¦ç‰¹ã«é‡è¦ã§ã™ã€‚

ã‚¢ãƒ—ãƒªãŒæ©Ÿå¯†æ€§ã®é«˜ã„ユーザーデータを扱ã£ã¦ã„ã‚‹å ´åˆã‚„ã€ç‰¹å®šã®ãƒ—ライãƒã‚·ãƒ¼è¦åˆ¶ã¸ã®æº–æ‹ ãŒæ±‚ã‚られる場åˆã«ã€ã“れら㮠ID を設定ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。難読化 ID ã«ã‚ˆã‚Šã€Google Play ã¯å®Ÿéš›ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è­˜åˆ¥å­ã‚’公開ã›ãšã«è³¼å…¥ã‚’追跡ã§ãã¾ã™ã€‚

androidObfuscatedAccountId ã¯å¿…ãš customerUserId ã¨ä¸€ç·’ã«æ¸¡ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ 難読化アカウント ID ã®ã¿ã‚’渡ã—ãŸå ´åˆã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«å«ã¾ã‚Œã¾ã›ã‚“。


// During configuration:
Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId(
            id = "YOUR_USER_ID",
            androidObfuscatedAccountId = "YOUR_OBFUSCATED_ACCOUNT_ID"
        )
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
}

// Or when identifying users
Adapty.identify(
    customerÿÿUserId = "YOUR_USER_ID",
    androidObfuscatedAccountId = "YOUR_OBFUSCATED_ACCOUNT_ID"
).onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

デãƒã‚¤ã‚¹ã‚’ã¾ãŸã„ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’検出ã™ã‚‹

SDKãŒæœ‰åŠ¹åŒ–ã•れるã¨ã€StoreKit(iOS)ã¾ãŸã¯Google Play Billing(Android)ã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ—¢å­˜ã®ã‚¨ãƒ³ã‚¿ã‚¤ãƒˆãƒ«ãƒ¡ãƒ³ãƒˆã‚’自動的ã«èª­ã¿å–りã€Adaptyãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¨åŒæœŸã—ã¾ã™ã€‚有効ãªã‚µãƒ–スクリプションã¯ã€ã‚¢ãƒ—リãŒrestorePurchasesを呼ã³å‡ºã™ã“ã¨ãªãã€Adaptyプロファイルã«è¡¨ç¤ºã•れã¾ã™ã€‚

自動ã§ã¯è¡Œã‚れãªã„ã®ã¯ã€æ–°ã—ã„デãƒã‚¤ã‚¹ã®ãƒ—ロファイルãŒå…ƒã®ãƒ‡ãƒã‚¤ã‚¹ã¨åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã®èªè­˜ã§ã™ã€‚Adaptyã¯Customer User IDã§ãƒ—ロファイルを照åˆã™ã‚‹ãŸã‚ã€åŒä¸€æ€§ã®ç¶™ç¶šæ€§ã¯CUIDã¨ã—ã¦ä½•を使用ã™ã‚‹ã‹ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚

デãƒã‚¤ã‚¹é–“ã§AdaptyãŒæ¤œå‡ºã§ãã‚‹ã“ã¨

ã‚ãªãŸã®è¨­å®šAdaptyãŒæ¤œå‡ºã™ã‚‹ã“ã¨å¿…è¦ãªå¯¾å¿œ
Customer User ID = device_id(アプリã®ãƒ­ã‚°ã‚¤ãƒ³ãªã—)新ã—ã„デãƒã‚¤ã‚¹ã¯ç•°ãªã‚‹CUIDã‚’å–å¾—ã™ã‚‹ãŸã‚ã€ç•°ãªã‚‹ãƒ—ロファイルãŒä½œæˆã•れã¾ã™ã€‚サブスクリプションã¯Access level updatedイベントを通ã˜ã¦æ–°ã—ã„プロファイルã«åŒæœŸã•れã¾ã™ãŒã€subscription_startedã¯ç™ºç«ã—ã¾ã›ã‚“。新ã—ã„プロファイルã¯å…ƒã®è³¼å…¥ã®ç¶™æ‰¿è€…ã¨ã—ã¦æ‰±ã‚れã¾ã™ã€‚subscription_startedã«åŸºã¥ãアナリティクスã¯ã€ãƒªã‚¿ãƒ¼ãƒ‹ãƒ³ã‚°ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’カウントä¸è¶³ã—ã¾ã™ã€‚ãƒªã‚¿ãƒ¼ãƒ‹ãƒ³ã‚°ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ—¢å­˜ã®ãƒ—ロファイルをデãƒã‚¤ã‚¹é–“ã§ç…§åˆã§ãるよã†ã€å®‰å®šã—ãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆIDã‚’Customer User IDã¨ã—ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„。
Customer User ID = 安定ã—ãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆID(ã™ã¹ã¦ã®ãƒ‡ãƒã‚¤ã‚¹ã§ãƒ­ã‚°ã‚¤ãƒ³ï¼‰SDKã¯activate()ã§ã‚µãƒ–ã‚¹ã‚¯ãƒªãƒ—ã‚·ãƒ§ãƒ³ã‚’è‡ªå‹•åŒæœŸã—ã€identify()ãŒCUIDã§æ—¢å­˜ã®ãƒ—ロファイルを照åˆã—ã¾ã™ã€‚追加ã®è¨­å®šã¯ä¸è¦ã§ã™ã€‚IDã¨ã‚µãƒ–スクリプションã®ä¸¡æ–¹ãŒè‡ªå‹•çš„ã«è§£æ±ºã•れã¾ã™ã€‚
Apple Family Sharing ã®ç¶™æ‰¿è€…ファミリーメンãƒãƒ¼ã¯Access level updatedイベントã®ã¿ã‚’通ã˜ã¦ã‚µãƒ–スクリプションをå—ã‘å–りã¾ã™ã€‚subscription_startedã¯ç™ºç«ã—ã¾ã›ã‚“。Access level updatedをリッスンã—ã¦ãã ã•ã„。完全ãªã‚¤ãƒ™ãƒ³ãƒˆãƒžãƒˆãƒªã‚¯ã‚¹ã¯Apple Family Sharingã‚’å‚ç…§ã—ã¦ãã ã•ã„。
åŒã˜Apple/Googleアカウントã€ç•°ãªã‚‹ã‚¢ãƒ—リ内ユーザー最åˆã«è³¼å…¥ã‚’記録ã—ãŸãƒ—ロファイルãŒè¦ªã«ãªã‚Šã¾ã™ã€‚ãã®å¾Œã®ãƒ—ロファイルã¯ç¶™æ‰¿è€…ãƒã‚§ãƒ¼ãƒ³ã‚’通ã˜ã¦ã‚µãƒ–スクリプションを確èªã—ã€Access level updatedイベントãŒ1回発生ã—ã¾ã™ã€‚ログインを必須ã«ã—ã€ã‚ãªãŸã®ãƒ¢ãƒ‡ãƒ«ã«åˆã£ãŸå…±æœ‰ãƒ¢ãƒ¼ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„。

æ–°ã—ã„デãƒã‚¤ã‚¹ã§ã®è³¼å…¥ã®å¾©å…ƒ

ペイウォールã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ“作ã§ãる「購入を復元ã€ãƒœã‚¿ãƒ³ã‚’設置ã—ã¦ãã ã•ã„。Apple App Review(ガイドライン3.1.1)ã§å¿…é ˆã¨ã•れã¦ãŠã‚Šã€è‡ªå‹•åŒæœŸãŒã‚¨ãƒƒã‚¸ã‚±ãƒ¼ã‚¹ã‚’見逃ã—ãŸå ´åˆã®ãƒ•ォールãƒãƒƒã‚¯ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚ã“ã®ãƒœã‚¿ãƒ³ã¯SDKã®restorePurchasesを呼ã³å‡ºã™å¿…è¦ãŒã‚りã¾ã™ã€‚

åˆå›žèµ·å‹•時ã«ãƒ—ログラムã§restorePurchasesを呼ã³å‡ºã™ã“ã¨ã¯ã€é€šå¸¸ã®ä½¿ç”¨ã§ã¯å¿…è¦ã‚りã¾ã›ã‚“。SDKã¯ã™ã§ã«activate()ã§åŒç­‰ã®å‡¦ç†ã‚’実行ã—ã¦ã„ã¾ã™ã€‚プログラムã«ã‚ˆã‚‹å‘¼ã³å‡ºã—ã¯ã€activate()完了後ã«ã‚¢ã‚¯ã‚»ã‚¹ãŒæ¬ è½ã—ã¦ã„ã‚‹å ´åˆã®ãƒ‡ãƒãƒƒã‚°ãªã©ã€å¼·åˆ¶çš„ã«æ–°ã—ã„レシートãƒã‚§ãƒƒã‚¯ã‚’行ã†å ´åˆã«ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。

ÿÿÿÿ