根据Apple的文档,我可以通过"content-available" = 1
在aps
有效负载字典中添加键值来注册静默通知.当安静通知到来时,我希望我的应用程序在后台唤醒.我在info.plist中设置了App downloads content in response to push notifications
值Required background modes
这是我的有效载荷字典
{"aps": { "alert":"Notification alert","badge":1,"sound":"default","content-available":1 } }
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
当我的应用程序处于后台时,我正在收到回调.但我的问题是,当我们的应用程序处于被杀死状态时,我们可以回调这个或任何其他方法吗?
我不希望我的应用用户看到通知,但我希望我的应用通过静音通知在后台唤醒它来执行某项任务.
任何建议,将不胜感激.
当设备收到带有content-available
设置的推送消息时,Apple会在后台启动您的应用.用户不会意识到这一点.来自文档:
content-available:为此键提供值1,表示新内容可用.包含此键和值意味着当您的应用程序在后台启动或恢复时,将
-application:didReceiveRemoteNotification:fetchCompletionHandler:
被调用.
也来自docs
didReceiveRemoteNotification:但是,如果用户强行退出,系统不会自动启动您的应用.在这种情况下,用户必须重新启动应用程序或重新启动设备,然后系统才会再次尝试自动启动应用程序.
我曾经遇到过类似的情况,我编写了这段代码来调试我的应用程序是否在静默通知中醒来。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *str = [defaults objectForKey:@"key"]; if (str == nil) { str = @"didReceiveRemoteNotification"; }else{ str = [NSString stringWithFormat:@"%@, didReceiveRemoteNotification",str]; } [defaults setObject:str forKey:@"key"]; [defaults synchronize]; }
这段代码的工作原理是,如果您的应用唤醒,则此方法将获得回调,并且方法名称将写入NSUserDefaults
。因此,当您手动调试应用程序时,您可以看到str
string变量的值,如果存在字符串,那么didReceiveRemoteNotification
您将知道应用程序已唤醒。
注意:这仅对我有效。当我没有强制关闭(手动终止)我的应用程序时,我会获得价值,但是当我从应用程序切换器中强制关闭我的应用程序时,我将不会获得任何价值。
我希望能奏效。