web-dev-qa-db-ja.com

プッシュ通知を作成する方法特定のViewControllerを開きますか?

SOを調べましたが、プッシュ通知を受け取ったときに特定のViewControllerを開く方法について説明する質問は見つかりませんでした。たとえば次のようなアプリを作成している場合WhatsAppと2つの異なるプッシュ通知、つまり2人の異なるユーザーからのメッセージを受信します。アプリデリゲートからそれぞれのviewControllerにどのように送信しますか?

AppDelegateが提供するuserinfo辞書で私が知る限り、特定のviewControllerにIDを与えることができますが、特定のView Controllerにトリビュートを与える方法がわからないため、再びそのviewControllerにアクセスできます。 。回答にコードスニペットを含めてください

**** SwiftまたはObjective-Cの回答は両方とも受け入れられます****

6
Honey

アプリデリゲートのこのコードを使用して、通知からアプリが開いたかどうかを検出できます。アプリがアクティブになる前に、アプリケーションの状態がUIApplicationStateInactiveのときに、初期ビューコントローラーを設定する必要があります。そこで任意のロジックを実行して、どのView Controllerを開くか、どのコンテンツをそのViewControllerに表示するかを決定できます。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    if(application.applicationState == UIApplicationStateActive) {

        //app is currently active, can update badges count here

    } else if(application.applicationState == UIApplicationStateBackground){

        //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

    } else if(application.applicationState == UIApplicationStateInactive){

        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

    }

}
15
MSU_Bulldog

これがSwift 3バージョンでif/elseの代わりにswitch/caseを使用したものです

    open func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    switch application.applicationState {
    case .active:
        print("do stuff in case App is active")
    case .background:
        print("do stuff in case App is in background")
    case .inactive:
        print("do stuff in case App is inactive")
    }
}
4
user6834282
//This method is called when user tap on the notification

      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

           print("user clicked on the notification")
           let userInfo = response.notification.request.content.userInfo

           print(userInfo)

           //check your response and navigate to specific view controller
           moveToNextViewController()
      }

     func moveToNextViewController() {
    //Add code for present or Push view controller
           let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier:"ViewController") as! ViewController                    
          self.navigationController?.pushViewController(vc, animated: true)
    }
0
Pranit