使用Firebase和APNs Auth Key生成推送通知

时间:2017-06-08 22:26:51

标签: ios firebase push-notification apple-push-notifications production

在TestFlight上测试我的应用程序时,我注意到我没有收到推送通知。

我已确认在从Xcode加载构建时,我可以接收从云功能和firebase控制台发起的通知。

我引用了其他类似的问题,但没有一个能反映我正在处理的确切问题。在Firebase中配置远程通知时,我使用的是 APNs身份验证密钥,我还为开发和生产添加了.p12个文件。但是,.p12文件显示为灰色并列为非活动状态,因为已设置了APNs验证密钥。

在我的Apple开发人员帐户证书,标识符&个人资料,我确保我的APNs验证密钥存在于左侧密钥部分。我还在我的App Id&中设置了开发人员和生产SSL证书。验证它们被列为"已启用"。我还验证了我的iOS分发配置文件是"活动"。

这是一个难以调试的问题,因为Xcode构建工作但TestFlight构建却没有。我知道这个问题涉及生产与开发环境,但我不确定如何解决问题。

在Xcode构建中调用此方法,并且所有关联的UserNotifications&正在调用Messaging委托方法。我正在运行iOS 10.3&在我的FirebaseAppDelegateProxyEnabled中将NO设置为info.plist

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
     Messaging.messaging().setAPNSToken(deviceToken, type: MessagingAPNSTokenType.sandbox)
     Messaging.messaging().setAPNSToken(deviceToken, type: MessagingAPNSTokenType.prod)
}

2 个答案:

答案 0 :(得分:0)

对我来说,解决方法是停止使用MessagingAPNSTokenType.sandbox或.prod,而只需使用:

Messaging.messaging().setAPNSToken(deviceToken, type: .unknown)

在先前的应用中,我使用了:

if Config.isDebug {
    tokenType = MessagingAPNSTokenType.sandbox
} else {
    tokenType = MessagingAPNSTokenType.prod
}
Messaging.messaging().setAPNSToken(deviceToken, type: tokenType)

并设置Config以依赖于Xcode中的构建方案。现在看来无法在产品中使用。在Firebase上,我现在使用的是APNS Key,而不是较早版本的Prod和Dev证书。那可能有所作为。我看到Firebase docs现在也说:

  

如果令牌类型设置为UNKNOWN,则Firebase Messaging会隐式地   尝试从配置中找出实际的令牌类型是什么   轮廓。除非您确实需要指定类型,否则应使用   而是使用APNSToken属性。

答案 1 :(得分:0)

您需要在后台添加对推送通知的支持到info.plist。 enter image description here

您还可以通过在目标设置的“签名和功能”标签下添加新功能来实现此目的。

enter image description here