远程通知无法按预期工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程通知无法按预期工作相关的知识,希望对你有一定的参考价值。
我正在尝试让我的远程通知正常工作,但我遇到了一些问题。
我正在从我的服务器发送通知,其中content-available
标志设置为1
,这样我的didReceiveRemoteNotification
被触发,并通过触发didReceiveRemoteNotification
中的以下方法向用户显示通知:
- (void) showPush:(NSString *)message
{
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.body = message;
content.sound = [UNNotificationSound defaultSound];
NSString *identifier = @"UYLLocalNotification";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier
content:content trigger:nil];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Something went wrong: %@",error);
}
}];
}
应用程序处于挂起状态时发送的通知根本不会显示,但会在应用程序打开然后再次关闭后显示,如下所示:
-> App is suspended: notification is sent
-> App is opened and in the foreground: I can see that the notification has been processed
-> App is closed and in the background: notification is being displayed with a banner
任何关于为什么这不能按预期工作的建议将不胜感激。
答案
我想你需要从稍微不同的app delegate回调中调用showPush
:
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
这个回电注释的文档:
与应用程序(_:didReceiveRemoteNotification :)方法不同,该方法仅在应用程序在前台运行时调用,系统会在您的应用程序在前台或后台运行时调用此方法。
另一答案
通知可以是面向用户的(警报,徽章或声音)或静默(内容可用)。他们不可能两者兼而有之。
当通知包含面向用户的元素和指示静默推送APNS的内容可用标志时,设备将进入未定义状态。
以上是关于远程通知无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
CKReference 的 CloudKit 订阅通知未按预期工作