参考記事をもとにFCM(Firebase Cloud Messaging)を手順通り実装したのですがプッシュ通知が届かないです。
FCMではなく、別途作成したAppleのローカル通知は届きます。
import os import UIKit import Firebase import GoogleMobileAds import FirebaseMessaging import UserNotifications // import IQKeyboardManagerSwift @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { var window: UIWindow? override init() { super.init() // Firebase関連の機能を使う前に必要 FirebaseApp.configure() } func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. // プッシュ通知許可の取得 UNUserNotificationCenter.current().requestAuthorization( options: [.alert, .sound, .badge]){ (granted, _) in if granted{ UNUserNotificationCenter.current().delegate = self } } if #available (iOS 10.0, *) { // For iOS 10 display notification (sent via APNS) UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: {_, _ in }) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerUserNotificationSettings(settings) } application.registerForRemoteNotifications() // for レビュー催促 let key = "startUpCount" UserDefaults.standard.set(UserDefaults.standard.integer(forKey: key) + 1, forKey: key) UserDefaults.standard.synchronize() let count = UserDefaults.standard.integer(forKey: key) if count == 8 { if #available(iOS 10.3, *) { SKStoreReviewController.requestReview() } } // Admob関連 GADMobileAds.configure(withApplicationID: "ca-app-pub-../..") // for close Keyboard // IQKeyboardManager.shared.enable = true return true } // MARK: - UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { // Called when the user discards a scene session. // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } // FCMプッシュ通知 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { // Print message ID. if let messageID = userInfo["gcm.message_id"] { print("Message ID: (messageID)") } // Print full message. print(userInfo) } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Print message ID. if let messageID = userInfo["gcm.message_id"] { print("Message ID: (messageID)") } // Print full message. print(userInfo) completionHandler(UIBackgroundFetchResult.newData) } @available(iOS 10, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo if let messageID = userInfo["gcm.message_id"] { print("Message ID: (messageID)") } print(userInfo) completionHandler([]) } func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo if let messageID = userInfo["gcm.message_id"] { print("Message ID: (messageID)") } print(userInfo) completionHandler() } }
FCM側
参考記事
・https://note.com/t0_inoue/n/nb817e740654b#6W7Zk
【追記】2021/03/19 23:13
Apple Developer→Certificates, Identifiers & Profiles→keys
>プッシュ通知が届かないです。
どの状態(アプリが起動中、アプリが起動していない、端末の電源が切れている)で何に(実機、Simulator)通知が届かないのでしょうか?
返信遅くなりました。
アプリ起動→通知✖️
アプリ起動していない→通知✖️
端末の電源が切れている→通知✖️
実機→通知✖️
シュミレーター→✖️
アプリ削除→再インストール→通知✖️
となっています。
つまり全てで通知が届かない状況になります。
Firebaseコンソールから送信はできているのが確認できます。
(FCMのレポート機能)
なぜか受信できません。
もちろんプッシュ通知の許可はOKにしています。(確認済み)
ローカル通知自体は動作しているので証明書関連でもない気がしていて。。
何が原因かサッパリわからないです。。
APNs authentication keyまたはAPNs certificateは設定しましたか?
> APNs authentication keyまたはAPNs certificateは設定しましたか?
こちらはApple Developer側で設定(作成)しました。
質問返しになって大変申し訳ありません
ローカルプッシュ通知が動くのにFirebaseで動かない原因がよくわかっていないです。。
(資料を読むと証明書や設定やら同じようにも見えます。)
一から証明書を作成し直した方が良いでしょうか。
他にも確認すべき点がありましたらどんどんご指摘ください。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー