お世話になっております。
UnrealEngineにおけるStoreKit2実装についてのご質問です。
現在のプロジェクトにてiOSの決済にStoreKit2の実装が必要だったため、UE4.27PlusでのPurchaseInterfaceiOSを確認してみたところ旧StoreKitにのみ対応しているようでした。
現在は外部で作成した.frameworkを読み込んだ上でObjective-C ブリッジを使用してStoreKit2APIを呼び出せるところまで実装出来たため、引き続きStoreKit2用の機能を追加していこうかと進めているのですが
StoreKit2の実装についてEpic様から推奨している実装方法等はありますでしょうか?
最新のエンジンバージョンでもStoreKit2の実装が特に見られなかったため情報提供いただけますと幸いです。
[Attachment Removed]
お世話になっております。
4.27での実装について、現在のアプローチ(外部.framework+Objective-Cブリッジ)は、4.27という制約の中ではかなり妥当な選択かと思います。エンジン側として特別に推奨できる方法は、今のところございません。
移植性の観点で一点だけご提案させていただくとすれば、IOnlinePurchaseを継承した独自実装クラスを用意し、FOnlineSubsystemIOS::GetPurchaseInterface()のファクトリー内で設定ファイル経由で切り替えられる形にしておくと、ゲームプレイ側のコードがStoreKitのバージョンを意識せずに済むかと思います。将来的な移行や差し替えもスムーズになりやすいかと思います。
サーバーサイドの検証についても、移行期間中はApp Receipt v1とStoreKit2のJWS(Transaction.jsonRepresentation)の両方を受け付けられるようにしておくと安心かもしれません。
ご参考までに、将来的にUE5系へのアップグレードを検討される機会がありましたら、5.6以降のUBTにはSwiftInteropHeaderという仕組みがネイティブで用意されており、モジュール内にSwiftコードを直接配置してC++/Objective-C++側から呼び出せるようになっています。OnlineSubsystemIOS自身が内部でStoreKit2 Swiftクラスを扱う際にも使っている仕組みです。5.xベースであればこちらの方が扱いやすいかと思いますが、4.27には存在しないため現状は適用できません。
補足として、StoreKit2はiOS15.0以降が必須となりますので、DefaultEngine.iniのMinimumiOSVersionをご確認いただき、それ以前もサポートされる場合はSwift側で[Content removed] *)を付けてフォールバックを入れる形になるかと思います。
ご不明点があれば、お気軽にこのチケットでお知らせください。
よろしくお願いいたします。
[Attachment Removed]
ご提案・補足ありがとうございます。
実装の参考にさせていただきます。
現在のアプローチで問題が出てきましたらまたご相談させていただければと思います。
よろしくお願いいたします。
[Attachment Removed]