更新问题:
要求是;一旦收到无声通知,我想运行一个Web服务并在通知栏中显示一个班轮。如果应用程序也被杀死它必须工作。任何解决方法?
我正在尝试以下方法。
我是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);
}
这个方法被调用,当应用程序处于前台和后台时工作正常。当应用程序未处于运行状态时唤醒我的应用程序(即应用程序未从应用程序切换器启动或终止)..
答案 0 :(得分:8)
如果App已从App Switcher中删除,iOS将不会唤醒您的应用,因为用户明确要求关闭您的应用。
如果用户至少打开一次您的应用,并且不从App Switcher中删除它,iOS会唤醒您的应用
我们在服务器端做的事情是: 如果用户的应用在我们发送无声通知后的一分钟内没有连接,(您可以根据需要进行设置),我们会发送另一个非静音推送通知来提醒用户。 由于应用程序(未被用户关闭)应自动获取数据,因此应该花费不到一分钟。
但是,当然,您需要一个比简单发送静默推送更复杂的服务器代码。
编辑:(对这个问题进行投票表明我已经过时了)
这个答案不再是真的......你现在可以用PushKit唤醒你的应用来做一些小事(比如下载小块数据来更新内容),即使应用程序已从App中删除切换器。
答案 1 :(得分:2)
使用此方法处理应用的传入远程通知。 与
application:didReceiveRemoteNotification:
方法不同 只有当您的应用程序在前台即系统中运行时才会调用 当您的应用在前台运行或运行时调用此方法 背景。此外,如果您启用了远程通知,则 在后台模式下,系统启动你的应用程序(或从中唤醒它) 暂停状态)并将其置于远程时的后台状态 通知到了。但是,系统不会自动进行 如果用户强行退出,则启动您的应用。 在这种情况下, 用户必须重新启动应用程序或在系统之前重新启动设备 尝试再次自动启动您的应用。
这清楚地表明,使用新的背景推送功能只有在您的应用被暂停时才能唤醒应用程序如果用户强行终止,则不会唤醒应用程序。
答案 2 :(得分:0)
到目前为止,我已经测试了应用程序何时被用户终止(从应用程序切换器向上滑动),由于静音推送标记(内容可用)或后台提取,您将无法获得后台执行时间。
还有:
另请注意,如果您从应用切换器中删除了应用 (即向上滑动以杀死应用程序)然后操作系统将永远不会重新启动 应用程序,无论推送通知或后台获取。在这种情况下 用户必须手动重新启动应用程序一次,然后再从中重新启动 指向后台活动将被调用。 -pmarcos(Apple worker)
答案 3 :(得分:-1)
按照以下步骤操作。
当app被杀时,听到无声推送。
当推送到来时(在didReceiveRemoteNotification中),请进行webservice调用
当您从网络服务获取数据时,请发送 LOCAL PUSH (包含您从网络服务获取的文字)
希望这是你想要的。
如果您还有其他需要,请告诉我。
答案 4 :(得分:-3)
您可以获得PUSH通知并使用它。我知道一点这样做...打开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
}
我知道,这对很多人有帮助。 =)