我正在开发一个带有大量遗留代码的大型应用程序。
目前 - 有一个实现:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
问题是,仅当应用程序位于前台或用户在应用程序位于后台时点击通知时才会调用它。
我尝试实施:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
但该应用程序的行为是相同的。
无论如何 - 当应用程序在后台时不会调用此方法。
可能是什么问题呢?
实施didReceiveRemoteNotification
and didReceiveRemoteNotification:fetchCompletionHandler
是正确的方法,但还需要执行以下操作:
确保注册远程通知,请参阅文档在这里 https://developer.apple.com/documentation/uikit/uiapplication/1623010-registerforremotenotificationtyp:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}
还要确保编辑Info.plist
并选中“启用后台模式”和“远程通知”复选框:
此外,您还需要添加"content-available":1
到您的推送通知负载,否则如果应用程序在后台,则不会被唤醒(请参阅文档在这里 https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app updated):
对于触发下载操作的推送通知,
通知的有效负载必须包含内容可用密钥及其
值设置为 1。当该键存在时,系统会唤醒应用程序
后台(或将其启动到后台)并调用应用程序
代表的
应用程序:didReceiveRemoteNotification:fetchCompletionHandler:
方法。您对该方法的实现应该下载
相关内容并将其集成到您的应用程序中
所以有效负载至少应该是这样的:
{
aps = {
"content-available" : 1,
sound : ""
};
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)