質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2197閲覧

Swiftで表示する通知許可を任意のタイミングで表示させる方法

mewmew

総合スコア5

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/06/21 10:50

前提・実現したいこと

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

swift

1UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in 2 if((error) != nil) { 3 return 4 } 5 if granted { 6 DispatchQueue.main.async { 7 UIApplication.shared.registerForRemoteNotifications() 8 } 9 } 10}

の部分を実行したいタイミングの場所に移動すればいいのではないでしょうか

投稿2021/06/21 12:17

takenm

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mewmew

2021/06/21 12:23

簡単な処理でしたね…!無事動きました。 人から教えてもらった処理をそのまま転用することの難しさを痛感しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問