186

プッシュ通知でアプリの起動・起動を知ることはできますか?

起動イベントはここでキャッチできると思います:

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

    if (launchOptions != nil) {
         // Launched from push notification
         NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    }
}

しかし、アプリがバックグラウンドにあるときにプッシュ通知から開かれたことをどのように検出できますか?

4

29 に答える 29

132

遅いが役に立つかもしれない

アプリが起動していないとき

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

と呼ばれる..

プッシュ通知を確認する必要がある場所

NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (notification) {
    NSLog(@"app recieved notification from remote%@",notification);
    [self application:application didReceiveRemoteNotification:notification];
} else {
    NSLog(@"app did not recieve notification");
}
于 2014-02-06T18:26:11.313 に答える
25

アプリが終了し、ユーザーがプッシュ通知をタップしたとき

public func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
   if launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] != nil {
      print("from push")
    }
}

アプリがバックグラウンドで、ユーザーがプッシュ通知をタップしたとき

ユーザーがシステムに表示されたアラートからアプリを開いた場合、ユーザー インターフェイスを更新して通知に関する情報を表示できるように、アプリがフォアグラウンドに入ろうとしているときにシステムがこのメソッドを再度呼び出す場合があります。

public func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
  if application.applicationState == .inactive {
    print("from push")
  }
}

アプリによっては、content-availableinsideapsでサイレント プッシュを送信することもできるため、これにも注意してください :) https://stackoverflow.com/a/33778990/1418457を参照してください

于 2016-06-22T12:13:02.403 に答える
15

迅速な場合:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    PFPush.handlePush(userInfo)

    if application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background {
        //opened from a push notification when the app was in the background

    }

}
于 2014-11-29T23:34:28.210 に答える
3

誰かがSwift 3で答えを求めているなら

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    switch application.applicationState {
    case .active:
        //app is currently active, can update badges count here
        break
    case .inactive:
        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here
        break
    case .background:
        //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here
        break
    default:
        break
    }
}
于 2016-12-21T09:15:17.473 に答える
2

のドキュメントから直接

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo:nil

アプリが実行中で、リモート通知を受信した場合、アプリはこのメソッドを呼び出して通知を処理します。

このメソッドの実装では、通知を使用して適切なアクションを実行する必要があります。

そして少し後に

プッシュ通知が届いたときにアプリが実行されていない場合、このメソッドはアプリを起動し、起動オプション ディクショナリに適切な情報を提供します。

アプリは、そのプッシュ通知を処理するためにこのメソッドを呼び出しません。

代わりに、あなたの実装

application:willFinishLaunchingWithOptions:

また

application:didFinishLaunchingWithOptions:

メソッドは、プッシュ通知のペイロード データを取得し、適切に応答する必要があります。

于 2013-05-06T07:23:00.207 に答える
0
     // shanegao's code in Swift 2.0
     func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
    {
            if ( application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background ){
                    print("opened from a push notification when the app was on background")
            }else{
                    print("opened from a push notification when the app was on foreground")
            }
    }
于 2016-03-16T19:35:11.770 に答える
-1

まだ試していませんが、自分宛てに通知を送信できますか? http://nshipster.com/nsnotification-and-nsnotificationcenter/

于 2015-02-10T15:27:52.333 に答える