今までの Swift コードには以下のような SceneDelegate がありました。
class SceneDelegate: UIResponder, UIWindowSceneDelegate { // ユーザーのアクティビティオブジェクトの情報を受信したときに呼ばれる func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { } }
しかし、SwiftUI で開発したプロジェクトには SceneDelegate がない場合が多いです。
以下のように、メールリンクのクリックからアプリで何か反応したい場合、
SceneDelegate があればよいですが、ない場合はどうしたらよいでしょうか?
[iOS] Firebaseメールリンク認証を実装してみた – 2021年9月5日
https://qiita.com/mtkmr/items/078b715d9965fea1bd04
iOS 14 から始まった、
onContinueUserActivity() modifier
を使います。
How to continue an NSUserActivity in SwiftUI – Feb 9, 2021
https://www.hackingwithswift.com/quick-start/swiftui/how-to-continue-an-nsuseractivity-in-swiftui
以下のように使えばよいっぽいです。
func handleSpotlight(_ userActivity: NSUserActivity) { if let id = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String { print("Found identifier \(id)") } } WindowGroup { ContentView() .onContinueUserActivity(CSSearchableItemActionType, perform: handleSpotlight) }
または
WindowGroup { ContentView .onContinueUserActivity("com.company.app.activityIdentifier") { userActivity in handleShortcut(with: userActivity) } }
onContinueUserActivity(_:perform:) – Apple Developer
https://developer.apple.com/documentation/swiftui/view/oncontinueuseractivity(_:perform:)
SwiftUIを学ぶのにおすすめの本
SwiftUI開発レシピ iOS 14 対応
SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14 対応
SwiftUI 徹底入門
SwiftUIではじめるiPhoneアプリプログラミング入門
iOS/macOS UIフレームワーク SwiftUIプログラミング
コメント