我试过这个:Detect if the app was launched/opened from a push notification
但不同之处在于我设置了密钥content-available = 1
,这意味着didReceiveRemoteNotification
事件不仅在通知中心播放时始终执行。如何区分通知中心或图标应用程序何时被触发?
答案 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
将永远不会为零。如果它为零,则表示用户通过点击应用程序图标打开应用程序。