今までの 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プログラミング


コメント