单击图标后,APNS不会调用didReceiveRemoteNotification

时间:2014-08-30 08:29:01

标签: ios apple-push-notifications apns-php

我想将以下有效负载从PHP Server传递给APNS。

$body['aps'] = array(
        'badge' => 1,
        'ArmyGroupID' => 12345
);

当应用程序在前台时,我得到整个字典,这没有问题。

问题:

但是当应用程序在后台时,它会成功附加徽章, 但是当我点击图标时,消息不会被分派到didReceiveRemoteNotification。

我是以正确的方式做到的吗?

2 个答案:

答案 0 :(得分:0)

这是预期的行为。请参阅Apple文档的以下片段:

  

作为呈现通知的结果,用户点击警报的操作按钮或点击(或点击)应用程序图标。   如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的应用程序:didFinishLaunchingWithOptions:method(如果已实现);它传递通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。   如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息。如果在运行OS X的计算机上单击应用程序图标,则应用程序将调用委托的applicationDidFinishLaunching:方法,其中委托可以获取远程通知负载。

作为一种解决方法,我可以建议对这样的didFinishLaunchingWithOptions进行一点检查:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Get user info dict
    NSDictionary* userInfo = [launchOptions   valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
    if([UIApplication sharedApplication].applicationIconBadgeNumber >0 && userInfo == nil){
        //Do like you did in didRecieveRemoteNotification method
    }
    return YES;
}

答案 1 :(得分:0)

swift2中的

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
  }