Adapty iOS SDK を v4.1 へ移行する
Adapty iOS SDK 4.1 では、Adapty Attribution の有効化方法が変更され、外部アトリビューション API の名称が変わり、フォールバックファイルのフォーマットも変更されています。また、4.0 で削除されていた App Store プロモートのアプリ内課金サポートが復活しました。
名前が変更されたAPIは完全な互換性の破壊を意味します。古い名前は完全に削除されており、非推奨扱いではなく、typealiasや@available(renamed:)アノテーションによる移行手段も用意されていません。4.0.xでコンパイルできていたコードは、以下に示すすべての呼び出し箇所を修正するまで4.1でコンパイルエラーになります。
クイックリファレンス
| v4.0 | v4.1 |
|---|---|
| Adapty アトリビューションがデフォルトで有効 | Adapty アトリビューションはデフォルトで無効。.with(adaptyAttributionEnabled: true) でオプトイン |
Adapty.updateAttribution(_:source:) | Adapty.updateExternalAttribution(_:provider:) |
Adapty.updateAttribution(_ attributionJson: String, source:) | パブリック API から削除。代わりにディクショナリを渡してください |
AdaptyAttributionSource | AdaptyExternalAttributionProvider(新しい .custom 値を追加) |
AdaptyProfile.appliedAttributionSources | AdaptyProfile.appliedExternalAttributionProviders |
AdaptySubscriptionOfferType 列挙型 | AdaptySubscriptionOfferType 構造体。.code は削除 |
| 4.0 用フォールバックファイル | 新しいフォールバックファイル形式。ファイルを再度ダウンロードしてください |
| プロモートされたアプリ内課金は非対応 | didReceivePromotedPurchase(_:) デリゲートメソッドと AdaptyPromotedProduct |
⚠️ Adapty アトリビューションはデフォルトで無効になっています
SDK 4.1 にアップデートしてオプトインしない場合、Adapty アトリビューションは無通知で機能しなくなります — インストールの記録が停止しても、警告は一切表示されません。
4.0 以前のバージョンでは、SDK は Adapty Attribution のインストール登録を自動的に行っていました。4.1 からはデフォルトでオフになっています。SDK はインストールを登録せず、onInstallationDetailsSuccess および onInstallationDetailsFail デリゲートコールバックは呼び出されません。getCurrentInstallationStatus() は .notAvailable を返します。
Adapty Attribution を使用する場合は、SDK を有効化する際に有効にしてください:
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
+ .with(adaptyAttributionEnabled: true)
Adapty Attributionを使用していない場合、変更は必要ありません。
外部アトリビューション API の名称変更
updateAttribution(:source:) → updateExternalAttribution(:provider:)
外部プロバイダー(Adjust、AppsFlyer、Branch、Tenjin、またはカスタム)からのアトリビューションデータを渡すメソッドの名前が変更され、source パラメーターが provider に改名されました:
- try await Adapty.updateAttribution(attribution, source: .adjust)
+ try await Adapty.updateExternalAttribution(attribution, provider: .adjust)
JSON文字列オーバーロードの削除
4.0では、アトリビューションデータを [AnyHashable: Any] 辞書またはJSON String のどちらでも渡せました。4.1では、辞書のオーバーロードのみが公開されており、JSON文字列のオーバーロードはAdaptyのクロスプラットフォームSDK向けに予約されています。渡す前にJSONをデシリアライズしてください。
- try await Adapty.updateAttribution(attributionJson, source: .adjust)
+ guard let attribution = try JSONSerialization.jsonObject(
+ with: Data(attributionJson.utf8)
+ ) as? [AnyHashable: Any] else { return }
+ try await Adapty.updateExternalAttribution(attribution, provider: .adjust)
AdaptyAttributionSource → AdaptyExternalAttributionProvider
型が改名されました。定義済みのプロバイダー名は変わりません:.appleAds、.adjust、.appsflyer、.branch、.tenjin。引き続き ExpressibleByStringLiteral に準拠しているため、文字列リテラルの引数はそのままコンパイルできます。プロバイダーを String 変数に保持している場合は、AdaptyExternalAttributionProvider(rawValue: yourProvider) のようにラップしてください。
また、4.1 では Adapty が直接統合していないプロバイダー向けに定義済みの .custom 値が追加されました。4.0 では同じ値は文字列リテラル "custom" としてのみ使用できました。
AdaptyProfile.appliedAttributionSources → appliedExternalAttributionProviders
プロファイルに適用されたアトリビューションプロバイダーの一覧を返すプロファイルプロパティの名前が変更されました。それに伴い、要素の型名も変更されています。
- if profile.appliedAttributionSources.contains(.appleAds) {
+ if profile.appliedExternalAttributionProviders.contains(.appleAds) {
// Apple Ads attribution has been applied
}
AdaptySubscriptionOfferTypeが構造体になりました
AdaptySubscriptionOfferType — AdaptySubscriptionOffer.offerType の型 — は、バックエンドがSDKを更新せずに新しいオファータイプを導入できるよう、enumからRawRepresentable構造体に変更されました:
- public enum AdaptySubscriptionOfferType: String, Sendable { ... }
+ public struct AdaptySubscriptionOfferType: Sendable, RawRepresentable, Equatable, Hashable { ... }
この変更はコードに3つの影響を与えます:
-
switch文の網羅チェックがコンパイルエラーになります。 構造体にはケースの固定セットがないため、コンパイラはswitchが網羅的であることを証明できません。defaultブランチを追加してください:switch offer.offerType { case .introductory: // ... case .promotional: // ... case .winBack: // ... + default: // handle offer types added later } -
.codeが削除されました。 オファーコードはAdaptySubscriptionOffer.offerTypeで報告されなくなりました。case .codeブランチがあれば削除してください。オファーコードの処理については、iOS でのオファーコードの引き換えを参照してください。 -
Codable準拠が削除されました。AdaptySubscriptionOfferTypeを直接エンコード・デコードしていた場合は、代わりにofferType.rawValue(String)を保存し、AdaptySubscriptionOfferType(rawValue:)で値を再構築してください。
定義済みの値との比較は変わらず使用できます。.introductory、.promotional、.winBack は引き続き == による比較や case パターンとして機能します。
フォールバックファイル
フォールバックファイルのフォーマットは SDK 4.1 で変更されました。すでに 4.0 用にダウンロード済みの場合でも、Placements > Fallbacks から再度ファイルをダウンロードし、アプリにバンドルしてください。
この手順を省略してもコンパイルエラーは発生しません。ただし、省略すると SDK が古いファイルを拒否し、すべてのプレースメントでフォールバックが機能しなくなります。
App Store のプロモーション対象アプリ内課金の復活
SDK 4.1 では、4.0 で削除された App Store のプロモーション対象アプリ内課金のサポートが復活しました。これは新機能であり、移行手順ではありません。4.0 の動作に変更はありません。
3.x から移行した場合、shouldAddStorePayment(for:) を AdaptyDeferredProduct とともに使用していたのであれば、新しい didReceivePromotedPurchase(_:) デリゲートメソッドと AdaptyPromotedProduct に切り替えてください。shouldAddStorePayment とは異なり、新しいメソッドは戻り値を返しません。実装しない場合、SDK はすぐに購入を開始します。購入を遅延させるには、このメソッドを実装してプロダクトを保存し、後で makePurchase にそのプロダクトを渡してください。詳細はApp Store からのアプリ内課金を参照してください。
新しいメカニズムはStoreKit 2上に構築されており、iOS 16.4以降が必要です。3.x の shouldAddStorePayment メソッドはそれ以前のiOSバージョンでも動作していました。iOS 16.4未満のデバイスでは、didReceivePromotedPurchase は発火せず、プロモーション購入はアプリに届きません。