2

新しいメッセージが送信されたときにサーバーがプッシュ通知を送信するチャット アプリケーションがあります。私が抱えている問題は、ユーザーを正しいビューに導くにはどうすればよいですか? プッシュ通知でを送信してchannelIDいますが、それを取得してユーザーを実際の会話に導くにはどうすればよいですか?

このコードを使用して、プッシュ通知がクリックされたことを検出しています

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground  )
    {
         //opened from a push notification when the app was on background
    }
}
4

2 に答える 2

10

channelIDプッシュ通知で送信する場合はchannelID、userInfo 辞書から取得できます。midhere が言ったように -

1) アプリケーションがバックグラウンドで実行されているときと、アプリケーションがフォアグラウンドで実行されているときは application:didReceiveRemoteNotification:、以下のように呼び出されます。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if ( application.applicationState == UIApplicationStateInactive)
     {
     //opened from a push notification when the app was on background

       NSString channelID = [[userInfo objectForKey:@"aps"] objectForKey:@"channelID"];
       NSLog(@"channelID->%@",channelID);
     }
  else if(application.applicationState == UIApplicationStateActive)
     {
     // a push notification when the app is running. So that you can display an alert and push in any view

       NSString channelID = [[userInfo objectForKey:@"aps"] objectForKey:@"channelID"];
       NSLog(@"channelID->%@",channelID);
     }
}

2) アプリケーションが起動されていない (閉じる)場合は、application:didFinishedLaunchWithOptionsメソッドが呼び出されます。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  if (launchOptions != nil)
    {
         //opened from a push notification when the app is closed
        NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (userInfo != nil)
        {
            NSString channelID = [[userInfo objectForKey:@"aps"] objectForKey:@"channelID"];
            NSLog(@"channelID->%@",channelID);
        }

    }
     else{
             //opened app without a push notification.
         }
}
于 2013-11-13T10:21:30.963 に答える
5

次のシナリオでプッシュ通知を受け取ります。

  1. アプリケーションが起動されていない場合: 通知は通知センターに表示され、アプリケーション バッジ番号は通知バッジの詳細に従って更新されます。ユーザーが通知センターからの通知をタップすると、メソッドapplication:didFinishedLaunchWithOptionsを呼び出すことによって、チャット アプリケーションが通知情報と共に起動されます。remoteNotification データのオプションディクショナリを確認するだけです。

  2. アプリケーションがフォアグラウンドで実行されている場合: application:didReceiveRemoteNotification:でプッシュ通知を受け取り 、リモート通知データのuserInfoディクショナリを確認するだけで済みます。

  3. アプリケーションがバックグラウンドで実行されている場合: 通知は通知センターに表示され、アプリケーション バッジ番号は通知バッジの詳細に従って更新されます。ユーザーが通知センターからの通知をタップすると、チャット アプリケーションがフォアグラウンドになり、ユーザーがタップした通知をapplication:didReceiveRemoteNotification:で受け取ります。リモート通知データのuserInfoディクショナリを確認するだけで済みます。

通知辞書を取得すると、 channelIdにアクセスし、受け取ったchannelIdに基づいてそれぞれのチャット画面を表示できます。

リモート通知の処理については、Apple のドキュメントを参照してください

于 2013-11-13T06:33:43.607 に答える