Yog*_*ton 35 xcode push-notification apple-push-notifications ios xcode6
我正在开发一个包含大量遗留代码的大型应用程序.目前 - 有一个实现:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
Run Code Online (Sandbox Code Playgroud)
问题是它仅在应用程序位于前台或用户在应用程序处于后台时点击通知时调用.我试图实现:
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)
但该应用程序的行为相同.在任何情况下 - 当应用程序在后台时,不会调用此方法.可能是什么问题呢?
Bar*_*kar 69
实现didReceiveRemoteNotification并且didReceiveRemoteNotification:fetchCompletionHandler是正确的方法,但您还需要执行以下操作:
确保注册远程通知,请参阅此处的文档:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
还要确保编辑Info.plist并选中"启用后台模式"和"远程通知"复选框:

此外,您需要添加"content-available":1到推送通知有效负载,否则如果应用程序在后台,则不会被唤醒(请参阅此处的文档):
对于触发下载操作的推送通知,通知的有效负载必须包含内容可用密钥,其值设置为1.当存在该密钥时,系统会在后台唤醒应用程序(或将其启动到后台)并且调用app delegate的应用程序:didReceiveRemoteNotification:fetchCompletionHandler:method.您对该方法的实施应下载相关内容并将其集成到您的应用中
因此有效载荷至少应如下所示:
{
aps = {
"content-available" : 1,
sound : ""
};
}
Run Code Online (Sandbox Code Playgroud)
Mah*_*ale 14
我有同样的问题。出现通知横幅,但未调用-application:didReceiveRemoteNotification:fetchCompletionHandler:方法。对我有效的解决方案是添加-application:didReceiveRemoteNotification:方法的实现,并向前调用-application:didReceiveRemoteNotification:fetchCompletionHandler ::
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
self.application(application, didReceiveRemoteNotification: userInfo) { (UIBackgroundFetchResult) in
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30199 次 |
| 最近记录: |