Firebase 推送通知无法在手机上使用,但可以在模拟器中使用

Posted

技术标签:

【中文标题】Firebase 推送通知无法在手机上使用,但可以在模拟器中使用【英文标题】:Firebase Push Notifications not working on phone but works in simulator 【发布时间】:2016-06-25 08:36:58 【问题描述】:

我正在尝试让我的远程推送通知在我的手机上工作。当我将手机连接到计算机并通过手机运行模拟器时,从 Firebase 控制台发送的通知运行良好。但是,当我将它上传到 Testflight 并将其下载到我的手机上时,我的推送通知没有通过。

我的证书已正确上传,下面是我的代码

class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    override init() 
        FIRApp.configure()
        FIRDatabase.database().persistenceEnabled = true
    

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        // Override point for customization after application launch.
        let notificationTypes : UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
        let notificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)
        application.registerForRemoteNotifications()
        application.registerUserNotificationSettings(notificationSettings)

        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    

    func application(application: UIApplication,
        openURL url: NSURL,
        sourceApplication: String?,
        annotation: AnyObject) -> Bool 
            return FBSDKApplicationDelegate.sharedInstance().application(
                application,
                openURL: url,
                sourceApplication: sourceApplication,
                annotation: annotation)
    

    func applicationDidBecomeActive(application: UIApplication) 
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        FBSDKAppEvents.activateApp()
    

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
                     fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
        // If you are receiving a notification message while your app is in the background,
        // this callback will not be fired till the user taps on the notification launching the application.
        // TODO: Handle data of notification

        // Print message ID.
        print("Message ID: \(userInfo["gcm.message_id"]!)")

        // Print full message.
        print("%@", userInfo)

        completionHandler(.NoData)
    


    func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) 
        print(error)
        print(error.description)
    

【问题讨论】:

您是否能够使用生产证书测试推送通知?我有同样的问题。临时构建不会收到来自 firebase 的推送通知。 顺便说一句,您的屏幕截图仅显示开发证书。您是否创建了生产 SSL 证书? 【参考方案1】:

您是否创建了 APNs 分发证书并提交到 Firebase 控制台?

请查看本指南: https://firebase.google.com/docs/cloud-messaging/ios/certs#configure_an_app_id_for_push_notifications

"应用现在可以使用 Push Notification 开发环境了。当你准备发布你的应用程序时,你需要让应用使用 Push Notification 生产环境:重复这些步骤,但是点击 Create生产 SSL 证书部分下的证书,而不是开发 SSL 证书。 如果您正在调用 setAPNSToken,请确保正确设置类型的值:沙盒环境为 FIRInstanceIDAPNSTokenTypeSandbox,生产环境为 FIRInstanceIDAPNSTokenTypeProd。如果您没有设置正确的类型,消息将不会传递到您的应用。"

【讨论】:

我相信我拥有它:/ - 我编辑了我的原始帖子以包含图像【参考方案2】:

有什么更新吗?

我在其他论坛中找到了这个解决方案。如果您使用 Firebase,则必须添加:

FirebaseAppDelegateProxyEnabled: NO

TestFlight:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
[[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox];

制作:

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
[[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeProd];

FirebaseAppDelegateProxyEnabled: YES...理论上这是没有必要的..

【讨论】:

以上是关于Firebase 推送通知无法在手机上使用,但可以在模拟器中使用的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Android 发送 Firebase 通知,但可以通过 curl 工作

Firebase 网络推送通知

TestFlight 后无法从 Firebase 获得推送通知

iOS Swift 使用 Firebase 云消息发送丰富的推送通知

分享微信公众号运营助手,可以在手机上回复粉丝留言

在我的Grocery应用程序中被firebase推送通知卡住了。