前提・実現したいこと
swiftでユーザーに通知許可を求める処理を書いています。
アプリ起動時すぐではなく、任意のタイミングで通知許可モーダルを表示したいのですが、やり方がわかりません。
mbaasとしてニフティを使っています。
該当のソースコード
AppDelegate
1import UIKit 2import NCMB 3import UserNotifications 4import Onboard 5 6@main 7class AppDelegate: UIResponder, UIApplicationDelegate { 8 9 var window: UIWindow? 10 11 12 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 13 // Override point for customization after application launch. 14 NCMB.setApplicationKey("削除", clientKey: "削除") 15 16 let ud = UserDefaults.standard 17 let isLogin = ud.bool(forKey: "isLogin") 18 19 20 switch isLogin { 21 case true: 22 23 //通知の確認をログイン後に出す 24 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in 25 if((error) != nil) { 26 return 27 } 28 if granted { 29 DispatchQueue.main.async { 30 UIApplication.shared.registerForRemoteNotifications() 31 } 32 } 33 } 34 35 self.window = UIWindow(frame: UIScreen.main.bounds) 36 let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 37 let rootViewController = storyboard.instantiateViewController(withIdentifier:"RootHomeController") 38 self.window?.rootViewController = rootViewController 39 self.window?.backgroundColor = UIColor.white 40 self.window?.makeKeyAndVisible() 41 42 43 44 case false: 45 self.window = UIWindow(frame: UIScreen.main.bounds) 46 let storyboard = UIStoryboard(name: "Sign", bundle: Bundle.main) 47 let rootViewController = storyboard.instantiateViewController(withIdentifier:"RootNavigationController") 48 self.window?.rootViewController = rootViewController 49 self.window?.backgroundColor = UIColor.white 50 self.window?.makeKeyAndVisible() 51 } 52 53 54 55 56 57 return true 58 } 59 60 // MARK: UISceneSession Lifecycle 61 62 63} 64 65 66extension AppDelegate{ 67 68 //許可しますか?を押した時に出る 69 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 70 //端末情報を扱うNCMBInstallationのインスタンスを作成 71 let installation : NCMBInstallation = NCMBInstallation.current() 72 let user = NCMBUser.current() 73 74 //Device Tokenを設定 75 installation.setDeviceTokenFrom(deviceToken) 76 installation.setObject(user?.objectId, forKey: "userObjectId") 77 78 79 //端末情報をデータストアに登録 80 installation.saveInBackground { (error) in 81 if error != nil{ 82 print("失敗") 83 }else{ 84 print("成功です") 85 } 86 } 87 } 88 89 90 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 91 print(userInfo) 92 } 93 94 95}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/21 12:23