0

我正在使用 Google Firebase 向用户发送通知。当时我正在尝试向单个设备(我的)发送通知。

接收通知时出现问题 - 当我的应用程序在后台运行时,不会出现横幅。但是如果我打开我的应用程序,方法 didReceiveRemoteNotification: 会触发我的警报视图:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:userInfo[@"notification"][@"body"]
                                                message:@"More info..."
                                               delegate:self
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"Open",nil];
[alert show];

}

但正如 Google Firebase 文档中所写,此方法在应用打开后触发,因此很有意义。

所以消息被传递到我的设备,如果应用程序在后台,我就无法触发通知横幅。

我阅读了有关将消息优先级设置为高和自定义数据密钥内容可用为 1 的信息,但没有运气。

我的代码中是否缺少其他内容来触发通知?我已经使用 Google Firebase Guide 来实现通知。

4

1 回答 1

2

我解决了我的问题。我再次开始阅读 Google Firebase 上的文档,在Cloud Messaging下我发现了这一点:

在 setAPNSToken:type: 中提供您的 APNs 令牌和令牌类型。确保 type 的值设置正确:沙盒环境为 FIRInstanceIDAPNSTokenTypeSandbox,生产环境为 FIRInstanceIDAPNSTokenTypeProd。如果您没有设置正确的类型,消息将不会传递到您的应用程序。

所以我错过了把这个声明放在方法中:didRegisterForRemoteNotificationsWithDeviceToken:

 - (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox];

}

不要忘记输入 type: "FIRInstanceIDAPNSTokenTypeProd" 用于生产。

于 2016-07-25T12:01:55.360 回答