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

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

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

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

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

   try {
       await Adapty().activate(
           configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
             ..withCustomerUserId(YOUR_CUSTOMER_USER_ID)
       );
   } catch (e) {
       // handle the error
   }

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

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

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

try {
  await Adapty().identify(customerUserId);
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}

リクエストパラメータ:

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

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

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

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

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

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

try {
  await Adapty().logout();
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle unknown error
}

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

appAccountToken を設定ã™ã‚‹ï¼ˆiOS)

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

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

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

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

// During configuration:
try {
   await Adapty().activate(
       configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
         ..withCustomerUserId(YOUR_CUSTOMER_USER_ID, iosAppAccountToken: "YOUR_APP_ACCOUNT_TOKEN")
   );
} catch (e) {
   // handle the error
}
// Or when identifying users
try {
    await Adapty().identify(customerUserId, iosAppAccountToken: "YOUR_APP_ACCOUNT_TOKEN");
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
}

難読化ã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆ ID を設定ã™ã‚‹ï¼ˆAndroid)

Google Play ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ—ライãƒã‚·ãƒ¼ã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’強化ã™ã‚‹ãŸã‚ã«ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¹ã‚±ãƒ¼ã‚¹ã§é›£èª­åŒ–ã•れãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆ ID ãŒå¿…è¦ã§ã™ã€‚ã“れら㮠ID ã«ã‚ˆã‚Šã€Google Play ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報を匿åã«ä¿ã¡ãªãŒã‚‰è³¼å…¥ã‚’識別ã§ãã¾ã™ã€‚ã“れã¯ä¸æ­£é˜²æ­¢ã‚„分æžã«ãŠã„ã¦ç‰¹ã«é‡è¦ã§ã™ã€‚

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

// During configuration:
try {
   await Adapty().activate(
       configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
         ..withCustomerUserId(YOUR_CUSTOMER_USER_ID, androidObfuscatedAccountId: "OBFUSCATED_ACCOUNT_ID")
   );
} catch (e) {
   // handle the error
}
// Or when identifying users
try {
    await Adapty().identify(customerUserId, androidObfuscatedAccountId: "OBFUSCATED_ACCOUNT_ID");
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
}

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

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()完了後ã«ã‚¢ã‚¯ã‚»ã‚¹ãŒæ¬ è½ã—ã¦ã„ã‚‹å ´åˆã®ãƒ‡ãƒãƒƒã‚°ãªã©ã€å¼·åˆ¶çš„ã«æ–°ã—ã„レシートãƒã‚§ãƒƒã‚¯ã‚’行ã†å ´åˆã«ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。

ÿÿÿÿ