Unity SDKでの初回起動時にAA対象ペイウォールを表示する
この記事は、アプリのiOSビルドに適用されます。Apple Adsのアトリビューションは、iOSのみで利用できます。
Apple Ads (AA) のアトリビューションは Adapty.Activate() の後に非同期で届きます。GetFlow を早い段階で呼び出すと、アトリビューションがまだ反映されていないことが多く、Adapty はデフォルトのオーディエンスに対してプレースメントを解決するため、AA セグメント向けのペイウォールがスキップされてしまいます。AdaptyProfile.AppliedExternalAttributionProviders を使うと、AA のアトリビューションがプロファイルに適用されたタイミングをアプリ側で検知できるため、AA セグメントが正しく解決されるまでペイウォールのリクエストを待機させることができます。
AppliedExternalAttributionProviders はApple Adsのみを報告します。他のプロバイダーからのアトリビューションはユーザープロファイルで確認でき、セグメントフィルターでも利用可能ですが、ここではまだ表示されません。
始める前に
必要なもの:
- Adapty Unity SDK 4.1 以降。
- Adapty でアプリの Apple Ads が設定済みであること。Apple Ads を参照してください。
例では SDK 4.1 の API 名を使用しています。SDK 4.0 では、プロファイルのプロパティ名は AppliedAttributionSources です。SDK 3.x では、そのプロパティは同じ旧名称を持ち、ペイウォールは GetPaywall/GetPaywallForDefaultAudience で取得され、AdaptyPaywall が返されます。Adapty Unity SDK を v4 へ移行する を参照してください。
仕組み
Adapty.Activate() を呼び出すと、SDK はバックグラウンドで Apple Ads のアトリビューション情報を Apple にリクエストし、その結果を Adapty のバックエンドに転送します。AA がプロファイルのアクティブなアトリビューションソースになると、SDK は更新された AdaptyProfile を OnLoadLatestProfile ハンドラーに配信し、その AppliedExternalAttributionProviders リストに AdaptyExternalAttributionProvider.AppleAds が含まれます。
リストが空の場合、以下のいずれかを意味します。
- Apple Ads のアトリビューションがこのプロファイルに対してまだ処理されていない。
- アトリビューションがまったく届いていない。
- 別のプロバイダーからアトリビューションが届いているが、このリストには反映されない。
リストが空であっても、GetFlow の呼び出しは安全です。Adapty は現在のプロファイル状態に一致するオーディエンス(通常はデフォルトのオーディエンス)に基づいてリクエストを解決します。
この待機は初回起動時のみ適用されます。Apple Ads のアトリビューションが一度記録されると、プロファイルに永続的に保存されます。2回目以降の起動では、キャッシュ済みプロファイルにすでに AppliedExternalAttributionProviders 内に AppleAds が含まれているため、OnLoadLatestProfile はその値とともに即座に発火し、GetFlow は遅延なく Apple Ads セグメント対象のペイウォールを返します。
実装
初回起動時は、プロファイル内の AdaptyExternalAttributionProvider.AppleAds を監視し、ハードタイムアウトを設定してください。Apple Ads のアトリビューションが届かない場合でも、該当ユーザーにはペイウォールを表示する必要があります。
- SDKを有効化します。 Unity SDKのインストールと設定を参照してください。
IAdaptyEventListenerを実装し、Adapty.SetEventListenerに登録することで、プロファイルの更新を購読します。 リスナーをまだ設定していない場合は、サブスクリプションの更新を監視するを参照してください。AppliedExternalAttributionProvidersにAppleAdsが現れるのを監視します。 これが表示されたら、ペイウォールをリクエストします — AdaptyはAAセグメント済みのバリアントを返します:
using System.Linq;
public void OnLoadLatestProfile(AdaptyProfile profile)
{
if (profile.AppliedExternalAttributionProviders.Contains(AdaptyExternalAttributionProvider.AppleAds))
{
// load the paywall via Adapty.GetFlow(placementId, ...)
}
}
- サブスクリプションと並行して3〜5秒のタイマーを開始します。 タイマーが
AppleAdsの受信より先に発火した場合は、代わりにGetFlowForDefaultAudienceを使用してデフォルトオーディエンスのペイウォールをリクエストしてください。このメソッドはセグメンテーションを待たずにペイウォールを返します。
どちらのパスが先に実行されても、そのパスでペイウォールをロードし、もう一方のパスはスキップしてください。ペイウォールが2回フェッチされないよう、単一のステートフラグ(例:hasLoadedPaywall)で重複処理を防いでください。ネットワークリクエストが失敗しても、ユーザーが詰まらないよう、そのプレースメントにはフォールバックペイウォールを設定してください。
SetEventListener はリスナーを1つだけ受け付けます。アプリがすでに他の目的(例:サブスクリプションの更新を監視するなど)で IAdaptyEventListener を使用している場合は、2つ目のリスナーを登録するのではなく、既存の OnLoadLatestProfile にチェックを追加してください。