SwiftUI向けの対応
SDKの初期化コードを追加する
SwiftUI を使用している場合は、プロジェクト作成時には UIApplicationDelegate を継承した AppDelegate クラスがないため、AppDelegate を作成し UIApplicationDelegateAdaptor 等を利用して App
構造体に接続する必要があります。
@main
struct MyApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
}
この際、AppDelegate クラスは App 構造体よりも後に初期化されるため、現状のSDKでは App.init()
内等で直接KARTEのイベントを発行することはできません。 AppDelegate.application(_:didFinishLaunchingWithOptions:)
の後にイベントを発行するようにしてください。
作成したAppDelegateにおいてapplication(_:didFinishLaunchingWithOptions:)
メソッド内に初期化コードを追加します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
KarteApp.setup()
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[KRTApp setupWithConfiguration:KRTConfiguration.default_];
...
}
ディープリンクによってアプリが起動した際にdeep_link_app_open
イベントを発生させる
deep_link_app_open
イベントを発生させる対応が必要な場合
SwiftUIでディープリンクを介してURLを受け取った際に適切なイベントを発火させたい場合は、下記の対応が必要になります。
推奨される実装
SwiftUIで推奨される実装方法は、onOpenURL
modifierを使ってアプリケーション全体でディープリンクを捕捉する方法です。このmodifier内で KarteApp.application(_:open:)
メソッドを呼び出し、外部からのURL schemeを適切に処理します。
ステップ1: AppDelegateの準備
UIApplicationDelegateAdaptor 属性を使用して、AppDelegate
クラスをSwiftUIライフサイクルに統合します。
@main
struct SampleApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
// ...
}
ステップ2: onOpenURL modifier の使用
WindowGroup の直下で onOpenURL
modifierを使用し、URLが開かれたときの処理を定義します。
var body: some Scene {
WindowGroup {
NavigationView {
ContentView()
// 他のView
}
.onOpenURL { url in
// URLを受け取ったときの処理
KarteApp.application(UIApplication.shared, open: url)
// その他の必要な処理
}
}
}
Updated 8 months ago