ÿÿ Adapty Android SDK v4.0 ã¸ã®ç§»è¡Œ | Adapty ドキュメント

Adapty Android SDK ã‚’ v. 4.0 ã«ç§»è¡Œã™ã‚‹

Adapty Android SDK 4.0 ã§ã¯ãƒ•ローãŒå°Žå…¥ã•れã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ« API ã®åç§°ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚æ–°ã—ã„ API ã¯ã€æ–°ã—ã„ Flow Builder ã¨æ—¢å­˜ã® Paywall Builder ã®ä¸¡æ–¹ã§å‹•作ã—ã¾ã™ã€‚Adapty ダッシュボードå´ã§ã®è¨­å®šå¤‰æ›´ã¯ä¸è¦ã§ã™ã€‚

クイックリファレンス

v3v4
Adapty.getPaywall(placementId, locale)Adapty.getFlow(placementId)
Adapty.getPaywallForDefaultAudience(placementId, locale)Adapty.getFlowForDefaultAudience(placementId)
AdaptyUI.getViewConfiguration(paywall)AdaptyUI.getFlowConfiguration(flow, locale)
AdaptyUI.LocalizedViewConfigurationAdaptyUI.FlowConfiguration
Adapty.getPaywallProducts(paywall)Adapty.getPaywallProducts(flow)
Adapty.logShowPaywall(paywall)Adapty.logShowFlow(flow)
AdaptyPaywallAdaptyFlow
AdaptyUI.getPaywallView(...)AdaptyUI.getFlowView(...)
AdaptyPaywallViewAdaptyFlowView
AdaptyPaywallScreen (Compose)AdaptyFlowScreen
showPaywall(...)showFlow(...)
AdaptyPaywallInsetsAdaptyFlowInsets
AdaptyUiEventListenerAdaptyFlowEventListener
AdaptyUiDefaultEventListenerAdaptyFlowDefaultEventListener
onPaywallShown / onPaywallClosedonFlowShown / onFlowClosed
onRenderingErroronError
Adapty.updateAttribution(attribution, source) (source: String)Adapty.updateAttribution(attribution, source) (source: AdaptyAttributionSource)
Adapty.setIntegrationIdentifier(key, value)Adapty.setIntegrationIdentifier(AdaptyIntegrationIdentifier)
AdaptyPaywallProduct ã¯ãã®åå‰ã‚’ä¿æŒã—ã¾ã™ã€‚プロダクトã¯å¼•ãç¶šãフローã«å±žã—ã¦ãŠã‚Šã€getPaywallProducts 㯠AdaptyFlow ã‚’å—ã‘å–るよã†ã«ãªã‚Šã¾ã™ã€‚ãã®ä»–ã® AdaptyFlowEventListener メソッド(onProductSelectedã€onPurchaseStartedã€onPurchaseFinishedã€onPurchaseFailureã€onRestoreSuccessã€onRestoreFailureã€onActionPerformedã€onAwaitingPurchaseParamsã€onLoadingProductsFailure ãªã©ï¼‰ã¯ã€åå‰ã¨ã‚·ã‚°ãƒãƒãƒ£ã‚’変更ã—ã¾ã›ã‚“。

インストール

adapty-bom ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ 4.0.0(以é™ï¼‰ã«è¨­å®šã—ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚’åŒæœŸã—ã¦ãã ã•ã„。BOM ãŒå¯¾å¿œã™ã‚‹ android-sdk 㨠android-ui ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’自動ã§è§£æ±ºã—ã¾ã™ã€‚ä¾å­˜é–¢ä¿‚ã®å®£è¨€æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€Adapty SDK ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

削除ãŠã‚ˆã³éžæŽ¨å¥¨ã®API

  • Adapty.makePurchase(activity, product, subscriptionUpdateParams, isOfferPersonalized, callback) — 削除ã•れã¾ã—ãŸã€‚ã“ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ­ãƒ¼ãƒ‰ã¯v3ã§éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚り㫠AdaptyPurchaseParameters を使ã£ã¦åŒã˜ã‚ªãƒ—ションを渡ã—ã¦ãã ã•ã„:
- Adapty.makePurchase(activity, product, subscriptionUpdateParams, isOfferPersonalized) { result -> /* ... */ }
+ val params = AdaptyPurchaseParameters.Builder()
+     .withSubscriptionUpdateParams(subscriptionUpdateParams)
+     .withOfferPersonalized(isOfferPersonalized)
+     .build()
+ Adapty.makePurchase(activity, product, params) { result -> /* ... */ }
  • オンボーディングã¯éžæŽ¨å¥¨ã§ã™ã€‚ AdaptyUI.getOnboardingView ãŠã‚ˆã³ AdaptyUI.getOnboardingConfiguration 㯠4.0 ã§ @Deprecated ã¨ã—ã¦ãƒžãƒ¼ã‚¯ã•れã¦ã„ã¾ã™ — オンボーディングを フロービルダー ã§ä½œæˆã—ãŸãƒ•ローã«ç§»è¡Œã—ã¦ãã ã•ã„。

フローã®å–å¾—

getPaywall + getViewConfiguration → getFlow + getFlowConfiguration

フェッãƒã®æˆ»ã‚Šå€¤ã®åž‹ãŒ AdaptyPaywall ã‹ã‚‰ AdaptyFlow ã«å¤‰ã‚りã€è¨­å®šãƒ­ãƒ¼ãƒ€ãƒ¼ã®åå‰ãŒ AdaptyUI.getViewConfiguration ã‹ã‚‰ AdaptyUI.getFlowConfiguration ã«å¤‰æ›´ã•れã¾ã™ï¼ˆæˆ»ã‚Šå€¤ã‚‚ AdaptyUI.LocalizedViewConfiguration ã®ä»£ã‚り㫠AdaptyUI.FlowConfiguration ã‚’è¿”ã—ã¾ã™ï¼‰ã€‚locale パラメータã¯ãƒ•ェッãƒå‘¼ã³å‡ºã—ã‹ã‚‰ getFlowConfiguration ã«ç§»å‹•ã—ã¾ã™ï¼š

- Adapty.getPaywall("YOUR_PLACEMENT_ID", locale = "en") { result ->
+ Adapty.getFlow("YOUR_PLACEMENT_ID") { result ->
      if (result is AdaptyResult.Success) {
-         val paywall = result.value
-         if (!paywall.hasViewConfiguration) return@getPaywall
-         AdaptyUI.getViewConfiguration(paywall) { configResult ->
+         val flow = result.value
+         if (!flow.hasViewConfiguration) return@getFlow
+         AdaptyUI.getFlowConfiguration(flow, locale = "en") { configResult ->
              if (configResult is AdaptyResult.Success) {
                  val flowConfiguration = configResult.value
              }
          }
      }
  }

getPaywallProducts(paywall) → getPaywallProducts(flow)

getPaywallProducts ã¯ã€Adapty.getFlow ãŒè¿”ã™ AdaptyFlow ã‚’å—ã‘å–るよã†ã«ãªã‚Šã¾ã—ãŸï¼š

- Adapty.getPaywallProducts(paywall) { result -> /* products */ }
+ Adapty.getPaywallProducts(flow) { result -> /* products */ }

フローã®ãƒ“ュー数トラッキング

logShowPaywall → logShowFlow

logShowPaywall 㯠logShowFlow ã«åå‰ãŒå¤‰æ›´ã•れã€AdaptyPaywall ã®ä»£ã‚り㫠AdaptyFlow ã‚’å—ã‘å–るよã†ã«ãªã‚Šã¾ã—ãŸã€‚イベントã¯å¼•ãç¶šãåŒã˜ãƒãƒªã‚¢ã‚·ãƒ§ãƒ³ã«å¯¾ã—ã¦è¨˜éŒ²ã•れるãŸã‚ã€æ—¢å­˜ã®ãƒ•ã‚¡ãƒãƒ«ã‚„ A/B ãƒ†ã‚¹ãƒˆã®æŒ‡æ¨™ã¯ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã‚’変更ã›ãšã«ãã®ã¾ã¾æ©Ÿèƒ½ã—ã¾ã™ã€‚

- Adapty.logShowPaywall(paywall)
+ Adapty.logShowFlow(flow)

v3 ã¨åŒæ§˜ã«ã€ãƒ•ロービルダーやペイウォールビルダーã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れãŸãƒ•ローやペイウォールを表示ã™ã‚‹éš›ã¯ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã™å¿…è¦ã¯ã‚りã¾ã›ã‚“。Adapty ãŒãれらã®ãƒ“ューを自動的ã«è¿½è·¡ã—ã¾ã™ã€‚

フローã®è¡¨ç¤º

getPaywallView / AdaptyPaywallView → getFlowView / AdaptyFlowView

ファクトリーメソッドã¨ãƒ“ュータイプをリãƒãƒ¼ãƒ ã—ã€AdaptyUI.FlowConfiguration を渡ã—ã¾ã™ï¼š

- val paywallView = AdaptyUI.getPaywallView(
-     activity,
-     viewConfiguration,
-     products,
-     eventListener,
- )
+ val flowView = AdaptyUI.getFlowView(
+     activity,
+     flowConfiguration,
+     products,
+     eventListener,
+ )

ビューを直接作æˆã™ã‚‹å ´åˆã¯ã€showメソッドもリãƒãƒ¼ãƒ ã•れã¾ã™ï¼š

- val paywallView = AdaptyPaywallView(activity)
- paywallView.showPaywall(viewConfiguration, products, eventListener)
+ val flowView = AdaptyFlowView(activity)
+ flowView.showFlow(flowConfiguration, products, eventListener)

XML レイアウトã§ã¯ã€ãƒ“ュータグを次ã®ã‚ˆã†ã«æ›´æ–°ã—ã¦ãã ã•ã„:

- <com.adapty.ui.AdaptyPaywallView ... />
+ <com.adapty.ui.AdaptyFlowView ... />

オプション㮠personalizedOfferResolver パラメータ㌠getFlowView / showFlow / AdaptyFlowScreen ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸã€‚パーソナライズ価格を示ã™ã«ã¯ã€onAwaitingPurchaseParams を通ã˜ã¦ãƒ—ロダクトã”ã¨ã«è¨­å®šã—ã¦ãã ã•ã„(AdaptyPurchaseParameters.Builder().withOfferPersonalized(true))。新ã—ã„オプション㮠customAssets パラメータを使用ã™ã‚‹ã¨ã€å®Ÿè¡Œæ™‚ã«ç”»åƒã‚„動画をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ — アセットã®ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã‚’å‚ç…§ã—ã¦ãã ã•ã„。

AdaptyPaywallScreen → AdaptyFlowScreen

Jetpack Compose ã§ã¯ã€ã‚³ãƒ³ãƒãƒ¼ã‚¶ãƒ–ルã®åå‰ã‚’変更ã—ã€è¨­å®šãƒ‘ラメータを更新ã—ã¾ã™ï¼š

- AdaptyPaywallScreen(
-     viewConfiguration,
+ AdaptyFlowScreen(
+     flowConfiguration,
      products,
<ÿÿspan style="color:#24292E">      eventListener,
  )

イベントã®å‡¦ç†

イベントリスナーã®åå‰ãŒ AdaptyUiEventListener ã‹ã‚‰ AdaptyFlowEventListener ã«å¤‰æ›´ã•れã¾ã—ãŸï¼ˆã¾ãŸ AdaptyUiDefaultEventListener 㯠AdaptyFlowDefaultEventListener ã«å¤‰æ›´ï¼‰ã€‚ã»ã¨ã‚“ã©ã®ãƒ¡ã‚½ãƒƒãƒ‰åã¯å¤‰ã‚りã¾ã›ã‚“ãŒã€ãƒ©ã‚¤ãƒ•サイクルãŠã‚ˆã³ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«é–¢ã™ã‚‹ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯åå‰ãŒå¤‰æ›´ã•れã¦ã„ã¾ã™ï¼š

- class YourListener : AdaptyUiDefaultEventListener() {
+ class YourListener : AdaptyFlowDefaultEventListener() {

-     override fun onPaywallShown(context: Context) {}
-     override fun onPaywallClosed() {}
+     override fun onFlowShown(context: Context) {}
+     override fun onFlowClosed() {}

-     override fun onRenderingError(error: AdaptyError, context: Context) {}
+     override fun onError(error: AdaptyError, context: Context) {}
  }

既存ã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼æœ¬ä½“ã¯ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。型åã¨ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã®åå‰ã‚’変更ã™ã‚‹ã ã‘ã§ã™ã€‚onError ã¯ã€onRenderingError ãŒå¯¾è±¡ã¨ã—ã¦ã„ãŸã®ã¨åŒã˜ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚¨ãƒ©ãƒ¼ã«åŠ ãˆã¦ã€ãã®ä»–ã®è³¼å…¥ä»¥å¤–ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ ã‚¨ãƒ©ãƒ¼ã‚‚対象ã¨ã—ã¦ã„ã¾ã™ã€‚コールãƒãƒƒã‚¯ã®å®Œå…¨ãªä¸€è¦§ã«ã¤ã„ã¦ã¯ã€ãƒ•ロー&ペイウォールイベントã®å‡¦ç†ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 v4ã§ã¯onBackPressed(context): Booleanコールãƒãƒƒã‚¯ã‚‚追加ã•れã€ãã®ãƒ‡ãƒ•ォルト動作ãŒã‚·ã‚¹ãƒ†ãƒ ã®æˆ»ã‚‹ãƒœã‚¿ãƒ³ã®æŒ™å‹•を変更ã—ã¦ã„ã¾ã™ã€‚以å‰ã¯æˆ»ã‚‹ãƒœã‚¿ãƒ³ï¼ˆã¾ãŸã¯æˆ»ã‚‹ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ï¼‰ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティやフラグメントã«ãƒ•ォールスルーã—ã€é€šå¸¸ã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã¦ã„ã¾ã—ãŸã€‚v4ã§ã¯ãƒ‡ãƒ•ォルト実装ãŒãã®ãƒ—レスを消費ã™ã‚‹ãŸã‚ã€ã‚·ã‚¹ãƒ†ãƒ ã®æˆ»ã‚‹ãƒœã‚¿ãƒ³ã ã‘ã§ã¯ãƒ•ローãŒé–‰ã˜ãªããªã‚Šã¾ã—ãŸã€‚ã“れã¯iOSã®æŒ™å‹•(フローã¯ã‚·ã‚¹ãƒ†ãƒ ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã§é–‰ã˜ã‚‰ã‚Œãªã„)ã«åˆã‚ã›ãŸã‚‚ã®ã§ã™ã€‚ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«æ˜Žç¤ºçš„ãªé€€å‡ºæ‰‹æ®µï¼ˆCloseボタンã¾ãŸã¯on_device_backアクション)をæä¾›ã™ã‚‹ã‹ã€onBackPressedをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦falseã‚’è¿”ã™ã“ã¨ã§ä»¥å‰ã®å‹•ä½œã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã™ã€‚詳細ã¯ã‚·ã‚¹ãƒ†ãƒ ã®æˆ»ã‚‹ãƒœã‚¿ãƒ³ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 デフォルトã®è³¼å…¥ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã¯ã€ç”»é¢ã‚’é–‰ã˜ã‚‹å‹•作も行ã‚ãªããªã‚Šã¾ã—ãŸã€‚v3 ã§ã¯ã€ãƒ‡ãƒ•ォルト㮠onPurchaseFinished ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚­ãƒ£ãƒ³ã‚»ãƒ«ä»¥å¤–ã®è³¼å…¥å®Œäº†æ™‚(æˆåŠŸã¾ãŸã¯ä¿ç•™ä¸­ã®è³¼å…¥ï¼‰ã«ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã¦ã„ã¾ã—ãŸã€‚v4 ã§ã¯ä½•ã‚‚ã—ãªã„(no-op)ãŸã‚ã€è³¼å…¥ãŒå®Œäº†ã—ã¦ã‚‚フローã¯é–‰ã˜ã‚‰ã‚Œãšã€æ˜Žç¤ºçš„ã«é–‰ã˜ã‚‹ã¾ã§è¡¨ç¤ºã•れãŸã¾ã¾ã«ãªã‚Šã¾ã™ — ã“れも iOS ã®å‹•作ã¨ä¸€è‡´ã—ã¦ã„ã¾ã™ã€‚自動クローズã®å‹•作ã«ä¾å­˜ã—ã¦ã„ãŸå ´åˆã¯ã€è³¼å…¥å®Œäº†å¾Œã«è‡ªåˆ†ã§ç”»é¢ã‚’é–‰ã˜ã¦ãã ã•ã„。例ã«ã¤ã„ã¦ã¯è³¼å…¥ã®æˆåŠŸãƒ»ã‚­ãƒ£ãƒ³ã‚»ãƒ«ãƒ»ä¿ç•™ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

アトリビューションã¨çµ±åˆè­˜åˆ¥å­

updateAttribution

source パラメーター㌠String åž‹ã‹ã‚‰æ–°ã—ã„ AdaptyAttributionSource åž‹ã«å¤‰æ›´ã•れã€attribution 㯠Map<String, Any> ã«ãªã‚Šã¾ã—ãŸï¼ˆJSON String ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ­ãƒ¼ãƒ‰ã‚‚利用å¯èƒ½ã§ã™ï¼‰ã€‚事å‰å®šç¾©ã•れãŸã‚½ãƒ¼ã‚¹ã®ã„ãšã‚Œã‹ã‚’使用ã—ã¦ãã ã•ã„:

- Adapty.updateAttribution(attribution, "appsflyer") { error -> /* handle the error */ }
+ Adapty.updateAttribution(attribution, AdaptyAttributionSource.APPSFLYER) { error -> /* handle the error */ }

定義済ã¿ã®ã‚½ãƒ¼ã‚¹: AdaptyAttributionSource.APPLE_ADSã€.ADJUSTã€.APPSFLYERã€.BRANCHã€.TENJIN。ãã®ä»–ã®ã‚½ãƒ¼ã‚¹ã«ã¯ã€æ–‡å­—列ã‹ã‚‰ã‚½ãƒ¼ã‚¹ã‚’作æˆã—ã¦ãã ã•ã„: AdaptyAttributionSource("your_source")。

setIntegrationIdentifier

setIntegrationIdentifier(key, value) ã¯ã€1ã¤ä»¥ä¸Šã® AdaptyIntegrationIdentifier 値をå—ã‘å–るメソッドã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã—ãŸã€‚ç”Ÿã®æ–‡å­—列キーを渡ã™ä»£ã‚りã«ã€ã‚³ãƒ³ãƒ“ニエンスメソッドã§å„識別å­ã‚’作æˆã—ã¦ãã ã•ã„:

- Adapty.setIntegrationIdentifier("appsflyer_id", appsFlyerId) { error -> /* handle the error */ }
+ Adapty.setIntegrationIdentifier(AdaptyIntegrationIdentifier.appsflyerId(appsFlyerId)) { error -> /* handle the error */ }

1回ã®å‘¼ã³å‡ºã—ã§è¤‡æ•°ã®è­˜åˆ¥å­ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼š

Adapty.setIntegrationIdentifier(
    listOf(
        AdaptyIntegrationIdentifier.appsflyerId(appsFlyerId),
        AdaptyIntegrationIdentifier.adjustDeviceId(adjustDeviceId),
    )
) { error -> /* handle the error */ }

å¤ã„キー文字列をãれãžã‚Œã®ä¾¿åˆ©ãƒ¡ã‚½ãƒƒãƒ‰ã«ç½®ãæ›ãˆã¦ãã ã•ã„:

v3 キーv4 AdaptyIntegrationIdentifier メソッド
"adjust_device_id"adjustDeviceId(value)
"airbridge_device_id"airbridgeDeviceId(value)
"amplitude_user_id"amplitudeUserId(value)
"amplitude_device_id"amplitudeDeviceId(value)
"appmetrica_device_id"appmetricaDeviceId(value)
"appmetrica_profile_id"appmetricaProfileId(value)
"appsflyer_id"appsflyerId(value)
"branch_id"branchId(value)
"facebook_anonymous_id"facebookAnonymousId(value)
"firebase_app_instance_id"firebaseAppInstanceId(value)
"mixpanel_user_id"mixpanelUserId(value)
"one_signal_subscription_id"oneSignalSubscriptionId(value)
"one_signal_player_id"oneSignalPlayerId(value)
"posthog_distinct_user_id"posthogDistinctUserId(value)
"pushwoosh_hwid"pushwooshHWID(value)
"tenjin_analytics_installation_id"tenjinAnalyticsInstallationId(value)
キーãŒã“ã®ãƒªã‚¹ãƒˆã«ãªã„å ´åˆã¯ã€ã‚«ã‚¹ã‚¿ãƒ  Key ã‹ã‚‰è­˜åˆ¥å­ã‚’直接作æˆã—ã¾ã™: AdaptyIntegrationIdentifier(AdaptyIntegrationIdentifier.Key("custom"), customValue)。
ÿÿÿÿ