1

デバイスでアラート タイプのプッシュ通知を正常に受信できました。

1.アクティブな状態またはアプリがフォアグラウンドにある

アプリの didReceiveRemoteNotification メソッドが呼び出されています。ここで、受信した通知メッセージにアクセスできます。

2. 非アクティブ状態またはアプリがバックグラウンドにある

プッシュ通知のメッセージは、「表示」&「閉じる」ボタンでアラートボックスに表示されます。

を。「表示」ボタンをクリックすると、didReceiveRemoteNotification メソッドが呼び出されます。ここでも、受信した通知メッセージにアクセスできます。

b. 「閉じる」ボタンをクリックすると、メッセージが消えます。この場合、最後に受信したプッシュ通知に関するハンドラーはありません。

3. アプリがバックグラウンドにない、またはアプリが実行されていない

ケース 2 と同じ。

4.iPhoneがスリープモードになっている

警告はメッセージとともに表示されますが、[表示] または [閉じる] ボタンは表示されません。

を。UI では、「Slide to View」と表示されます。ユーザーが電話を操作すると、アプリが開きます。受信した通知メッセージにアクセスできます。

b. ユーザーが対話せずに電話をスリープ モードにするか、手動で電話をスリープ モードにすると、次回 iOS は「スライドしてロックを解除します」というメッセージを表示します。ここでも、最後のプッシュ通知のハンドラーはありません。

ケース 2.b および 4.b の最後のプッシュ通知にアクセスするにはどうすればよいですか。

編集1:以下はappDelegateの私のコードです

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[Test1ViewController alloc] initWithNibName:@"Test1ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    // For PUSH NOTIFICATION
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    if (launchOptions != nil)
    {
        NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dictionary != nil)
        {
            NSLog(@"Launched from push notification: %@", dictionary);
        }
    }


    return YES;
}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    NSLog(@"Received notification: %@", userInfo);
    // Received Notification at here ....
    // Now based on response further to do ...
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

ありがとう、J61

4

1 に答える 1

3

OS がバッジを処理します。しかし、ユーザーがプッシュ通知を却下した場合、アプリはサーバー上のメッセージを確認し、ユーザーが却下した通知を見逃していた場合は適切な方法で処理できます。

hereから取得した、これは通知を処理する方法です。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
   // get state
   UIApplicationState state = [application applicationState];
   if (state == UIApplicationStateActive) {
      // App is in foreground
   } else {
      // App is suspended
   }

   application.applicationIconBadgeNumber = 0;
}

編集: バッジ番号を自動インクリメントしたい場合は、自分でカウントを追跡する必要があります。サーバー上でこれを行うことができます。プッシュ メッセージにバッジ カウントが含まれていない場合、iOS はそれをアプリケーションから削除します

于 2012-06-29T06:35:01.100 に答える