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

更新问题:

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

我正在尝试下面的方法。

我是iOS的新手,我在静音推送通知,努力了很多,并陷入困境。 当应用程序未启动时(即从应用程序切换器删除应用程序时),当iOS收到静默推送通知时,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); } 

这个方法被调用,并且当应用程序处于前台和后台时工作正常。当应用程序不处于运行状态时(例如,应用程序未从应用程序切换器启动或死亡),唤醒我的应用程序。

如果应用程序已从应用程序切换器中删除,iOS将不会唤醒您的应用程序,因为用户特意要求closures应用程序。

如果用户至less打开一次应用程序,并且不要将其从应用程序切换器中删除,则iOS会唤醒您的应用程序

我们在服务器端处理这个事情的方法是:如果用户的应用程序在我们发送了无声通知之后没有连接(可以根据需要设置),我们会发送另一个非静默的推送通知来提醒用户。 由于应用程序(不是由用户closures)应该自动获取数据,应该需要一分钟。

但是,当然你需要一个更复杂的服务器代码,而不是简单地发送静默。

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

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

这清楚地表明,使用新的后台推送function,只有当您的应用程序被暂停时,才能唤醒应用程序。如果用户强行终止,则不会

按照下面的步骤。

  1. 应用程序被杀时听到沉默的推动。

  2. 当推送(在didReceiveRemoteNotification),去web服务调用

  3. 当你从webservice获取数据时,发送LOCAL PUSH (你从webservice获得的文本)

希望这是你想要的。

请让我知道,如果你需要别的东西。

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

另外这个:

另外请记住,如果您从应用程序切换器中删除应用程序(即向上滑动杀死应用程序),则操作系统不会重新启动应用程序,无论是推送通知还是后台提取。 在这种情况下,用户必须手动重新启动应用程序一次,然后从这一点开始,后台活动将被调用。 -pmarcos(苹果工作者)

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

你可以得到一个推送通知,并使用它。 我知道一点办法做到这一点…打开AppDelegate.m和find或把这个方法- (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 } 

我知道,这有助于很多人。 =)