iOS:推送运行方法而不显示通知

问题描述:

是否有可能在iOS中从服务器获取推送,然后运行方法而不显示通知?例如,检查现在是否为配置的时间,以及是否显示通知,以及是否不向服务器发送不可用的消息。iOS:推送运行方法而不显示通知

是的,这是可能的

  • 实施didReceiveRemoteNotification:fetchCompletionHandler

  • 确保为远程注册通知,请参阅documentation here

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {  
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
    
        return YES; 
    } 
    
  • 还要确保编辑Info.plist并检查“启用背景模式”和‘远程通知’复选框:

    enter image description here

  • 此外,还需要添加"content-available":1到您的推送通知的有效载荷,否则,如果它在后台应用程序将不会被唤醒(见documentation here) :

    对于推送通知来触发下载操作时, 通知的有效载荷必须包括其设置为1 价值的内容可用密钥。当该密钥存在时,系统将 背景中的应用程序(或将其启动到后台)并调用应用程序 委托人的 应用程序:didReceiveRemoteNotification:fetchCompletionHandler: 方法。你的实现该方法的应该下载 相关内容并将其集成到你的应用程序

    所以有效载荷至少应该是这样的:

    { 
        "aps" = { 
         "content-available" : 1, 
         "sound" : "" 
        } 
    } 
    

刚刚离开的声音特性空和忽略警报/ text属性和通知将沉默

不幸的是,应用程序将不会被唤醒,如果它没有运行在所有(强制退出),请参阅this answer

是的,你要寻找的是silent push notification s其中获得了introduced in iOS 7。看看docs regarding push notifications哪个状态:

aps字典也可以包含content-available属性。 content-available属性的值为1可让远程通知充当“无声”通知。当无声通知到达时,iOS会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行背景信息处理。用户不会被告知由静默通知产生的新信息或更改的信息,但他们可以在下次打开您的应用程序时了解它。

content-available - number - 提供值为1的这个关键,以表明有新内容可用。包括这个键和值意味着当你的应用程序在后台启动或恢复时,调用application:didReceiveRemoteNotification:fetchCompletionHandler:。 (书报亭应用,保证能够接收至少一个推,每24小时的窗口此键。)

然后,您可以反应因此,最终竟引发另一个通知,如果你觉得用户需要被告知某事(尽管对此不是100%肯定)。

更深入一点的信息和代码可以找到in this objc.io post

+0

我不能让它工作,当应用程序处于非活动状态(未激活),它的工作原理? – RCB

+0

@RCB有你能在'背景Modes'了'背景fetch'和'远程Notifications'? – luk2302

+0

@RCB [the docs](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler: )提供更多的信息,你需要做什么以及在什么情况下工作: – luk2302