是否可以在iOS中从服务器获取推送然后运行方法而不显示通知?例如,要检查现在是否是配置的时间,是否要显示通知,如果不是要向服务器发送不可用的消息。
答案 0 :(得分:1)
是的,你要找的是silent push notification
得到introduced in iOS 7。看一下docs regarding push notifications哪个州:
aps词典还可以包含
content-available
属性。值content-available
的{{1}}属性允许远程通知充当“静默”通知。当无声通知到达时,iOS会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行后台信息处理。用户不会被告知由静默通知产生的新信息或更改信息,但他们可以在下次打开您的应用时找到相关信息。
和
1
-content-available
- 为此键提供值1以指示新内容可用。包含此键和值意味着当您的应用在后台启动或恢复时,会调用number
。 (报亭应用程序保证每24小时窗口至少能够使用此密钥进行一次推送。)
然后你可以做出相应的反应并最终实际触发另一个通知,如果你觉得用户需要被告知某事(尽管不是100%确定那个)。
可以找到更加深入的信息和代码in this objc.io post。
答案 1 :(得分:0)
是的,可能:
请务必注册远程通知,请参阅documentation here:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}
还要确保编辑Info.plist
并选中“启用后台模式”和“远程通知”复选框:
此外,您需要将"content-available":1
添加到推送通知有效内容中,否则如果该应用位于后台,则该应用不会被唤醒(请参阅documentation here):
对于触发下载操作的推送通知, 通知的有效负载必须包含内容可用密钥及其 值设置为1.当该键存在时,系统将应用程序唤醒 背景(或将其启动到后台)并调用应用程序 委托的 应用:didReceiveRemoteNotification:fetchCompletionHandler: 方法。您应该下载该方法的实现 相关内容并将其集成到您的应用中
所以有效载荷至少应该是这样的:
{
"aps" = {
"content-available" : 1,
"sound" : ""
}
}
只需将声音属性留空并省略alert / text属性,您的通知就会无声。
不幸的是,该应用程序不会被唤醒,如果它根本没有运行(强制退出),请参阅this answer。