当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)

Posted

技术标签:

【中文标题】当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)【英文标题】:Will iOS awake my app when i receive silent push notification?(When app is not in running state) 【发布时间】:2014-04-08 12:50:32 【问题描述】:

更新问题:

要求是;收到静默通知后,我想运行 Web 服务并在通知栏中显示一个衬里。如果应用程序也被杀死,它必须工作。任何解决方法?

我正在尝试以下方法。

我是 ios 新手,我在无声推送通知方面苦苦挣扎,在 Google 上搜索了很多,然后卡住了。 当我在应用程序未启动时(即从应用程序切换器中删除应用程序时)收到静默推送通知时,iOS 会唤醒我的应用程序吗?

我的工作负荷是

 
      aps: 
              content-available: 1,
              sound: ""
     

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

int CA=[[[userInfo valueForKey:@"aps"] valueForKey:@"content-available"] intValue];

if (CA==1) 

    my action...



 completionHandler(UIBackgroundFetchResultNewData);

当应用程序处于前台和后台时,此方法被调用并且工作正常。当应用程序未处于运行状态时无法唤醒我的应用程序(即应用程序未从应用程序切换器启动或终止)..

【问题讨论】:

是的。它会。当你点击它时。 是的,没关系,但是推送通知是无声的,您无法查看任何警报并且无法点击。 @Guruanu_Deepu 当您的应用程序在后台时,您是如何测试静默通知的?我正在通过城市飞艇发送推送通知,但找不到我是否收到无声通知?有什么建议吗? @Guruanu_Deepu 你是怎么解决这个问题的?我面临同样的问题。如果您找到解决方案,请告诉我 Using Push Notifications to Signal Changes 【参考方案1】:

如果应用已从应用切换器中删除,iOS 将不会唤醒您的应用,因为用户专门要求关闭您的应用。

如果用户至少打开您的应用一次,并且没有将其从 App Switcher 中移除,iOS 将唤醒您的应用

我们在服务器端处理这个问题的是: 如果用户的应用在我们发送静默通知后的一分钟内没有连接,(您可以根据需要设置),我们会发送另一个非静默推送通知来提醒用户。 由于应用程序(不是由用户关闭)应该会自动获取数据,因此应该需要不到一分钟的时间。

但为此,您当然需要一个比简单发送静默推送更复杂的服务器代码。

编辑:(对这个问题进行投票表明它已经过时了)

这个答案不再正确......您现在可以使用PushKit 唤醒您的应用程序做一些小事情(例如下载小块数据以更新内容),即使该应用程序已从 App Switcher 中删除。

【讨论】:

增加了用户关闭应用时的处理可能性 TheSquad - 我明白这一点。但要求是;收到静默通知后,我想运行 Web 服务并在通知栏中显示一个衬里。如果应用程序也被杀死,它必须工作。任何解决方法? No 绝对没有解决方法,当应用程序被杀死时,对不起...您只能通过非静默推送通知要求用户再次打开应用程序【参考方案2】:

请查看:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler:

使用此方法为您的应用处理传入的远程通知。 与application:didReceiveRemoteNotification: 方法不同,后者是 仅当您的应用程序在前台运行时调用,系统 当您的应用程序在前台运行时调用此方法或 背景。此外,如果您启用了远程通知 后台模式,系统启动您的应用程序(或从 挂起状态),并在远程时将其置于后台状态 通知到达。但是系统不会自动 如果用户强制退出应用程序,则启动您的应用程序。 在这种情况下, 用户必须在系统之前重新启动您的应用程序或重新启动设备 尝试再次自动启动您的应用。

这清楚地表明,使用新的后台推送功能只有在您的应用被暂停时才能唤醒应用,而不是在用户强行终止时才能唤醒应用

【讨论】:

我尝试用 WhatsApp 彻底杀死了该应用程序,但我仍然收到来电通知。【参考方案3】:

据我测试,当用户终止应用程序(从应用程序切换器向上滑动)时,由于静默推送标志(内容可用)或后台获取,您不会有后台执行时间。

还有这个:

另外请记住,如果您从应用切换器中终止您的应用 (即向上滑动以杀死应用程序)然后操作系统将永远不会重新启动 应用程序,无论推送通知或后台获取。在这种情况下 用户必须手动重新启动应用程序一次,然后再从该应用程序重新启动 向前指向后台活动将被调用。 -pmarcos(苹果工人)

来自苹果论坛:https://devforums.apple.com/message/873265#873265

【讨论】:

【参考方案4】:

您可以获得推送通知并使用它。我知道一些方法可以做到这一点...打开 AppDelegate.m 并找到或放置此方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions。 之后,像我的一样放入这个方法代码:

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (userInfo) 
    NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

    NSString *alertType = [apsInfo objectForKey:@"type"]; //my own param in PUSH-notification
    globalPushType = alertType;  //global variable for working with it in some ViewControllers after app's load

我知道,这对很多人都有帮助。 =)

【讨论】:

我不知道,为什么有些人设置减分,但只有这种方式可能有助于在应用程序未启动时使用 PUSH-msgs。 我猜是因为在用户点击通知之前不会调用它,而不是问题中所问的内容......

以上是关于当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)的主要内容,如果未能解决你的问题,请参考以下文章

iOS6 会收到静默推送通知吗?

静默推送通知是不是能够唤醒 ios 中处于未运行状态的应用程序?

适用于 iOS 的 Firebase FCM 静默推送通知

静默推送不触发代码执行

静默通知上的 iOS 后台发布请求

当应用程序处于终止状态时,iOS 静默推送通知不会收到