检测是否通过设置密钥内容可用= 1轻触通知中心或应用程序图标启动应用程序

时间:2016-12-22 23:28:13

标签: ios swift push-notification

我试过这个:Detect if the app was launched/opened from a push notification

但不同之处在于我设置了密钥content-available = 1,这意味着didReceiveRemoteNotification事件不仅在通知中心播放时始终执行。如何区分通知中心或图标应用程序何时被触发?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,发布可能对其他人有用。在didReceiveRemoteNotification fetchCompletionHandler设置变量timeReceiveRemoteNotification = NSDate ()中,收到通知的日期。在applicationDidBecomeActive中,我检查当前日期和执行didReceiveRemoteNotification事件之间经过的时间是否小于1秒。因为如果从通知中心启动应用程序,则执行的第一个方法是didReceiveRemoteNotification然后applicationDidBecomeActive,如果从应用程序图标启动,则执行的事件仅为applicationDidBecomeActive并且因此,变量timeReceiveRemoteNotification保留了收到通知的日期的指定值,这可能超过一秒。在applicationDidBecomeActive代码中:

LaunchIconApp = true
        println (NSDate().TimeIntervalSinceDate (timeReceiveRemoteNotification))
        if(launchIconApp && launchNotification && NSDate().TimeIntervalSinceDate (timeReceiveRemoteNotification) <1)
        {
            println("Comes from the notification center")
            LaunchNotification = false
        } Else {
            println("Comes from the app icon")
        }

答案 1 :(得分:0)

如果您的应用未开放,则不在后台。当您在下面打开app时,方法被调用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

您可以在上述方法中写下这一行。

NSDictionary *remoteNotifiInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

如果通过点击通知触发应用,remoteNotifiInfo将永远不会为零。如果它为零,则表示用户通过点击应用程序图标打开应用程序。