ÿÿ ユーザーã®è­˜åˆ¥ | Capacitor SDK | Adapty ドキュメント

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

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

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

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


try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
      customerUserId: 'YOUR_USER_ID'
    }
  });
} catch (error) {
  console.error('Failed to activate Adapty:', error);
}

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

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


try {
  await adapty.identify({ customerUserId: 'YOUR_USER_ID' });
  console.log('User identified successfully');
} catch (error) {
  console.error('Failed to identify user:', error);
}

リクエストパラメーター:

パラメーター必須/ä»»æ„説明
customerUserId必須文字列ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è­˜åˆ¥å­ã€‚

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

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

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

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

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


try {
  await adapty.logout();
  console.log('User logged out successfully');
} catch (error) {
  console.error('Failed to logout user:', error);
}

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

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

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

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

トークンã¯2ã¤ã®æ–¹æ³•ã§è¨­å®šã§ãã¾ã™ã€‚SDKã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ã‚·ãƒ§ãƒ³æ™‚ã€ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’識別ã™ã‚‹éš›ã§ã™ã€‚

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

// During configuration:
await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
        customerUserId: 'YOUR_USER_ID',
        ios: { appAccountToken: "YOUR_APP_ACCOUNT_TOKEN" },
    }
});
// Or when identifying users
await adapty.identify({
    customerUserId: 'YOUR_USER_ID',
    params: {
        ios: { appAccountToken: 'YOUR_APP_ACCOUNT_TOKEN' },
    }
});

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

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

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

// During configuration:
await adapty.activate({
  apiKey: 'YOUR_PUBLIC_SDK_KEY',
  params: {
    android: { obfuscatedAccountId: 'YOUR_OBFUSCATED_ACCOUNT_ID' },
  }
});
// Or when identifying users
await adapty.identify({
    customerUserId: 'YOUR_USER_ID',
    params: {
        android: { obfuscatedAccountId: 'YOUR_OBFUSCATED_ACCOUNT_ID' },
    }
});

デãƒã‚¤ã‚¹ã‚’ã¾ãŸã„ã ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¤œå‡º

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

ÿÿÿÿ