web-dev-qa-db-ja.com

重複したプッシュ通知を受け取るiOS9

IOS9では同じプッシュ通知を2回受け取りますが、iOS8では正常に動作しています。

次のコードを使用して、プッシュ通知に登録しました。

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
    // use registerUserNotificationSettings
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:( UIUserNotificationTypeSound | UIUserNotificationTypeAlert|UIUserNotificationTypeBadge) categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
    // use registerForRemoteNotifications
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge)];
}

#else

// use registerForRemoteNotifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

#endif
23
iPhone

いくつかのアプリでこの問題が発生しました。registerUserNotificationSettings: 1回以上。

この回答の詳細: https://stackoverflow.com/a/35064911/4495995

4
Vladimir K

それは明らかにAppleの問題です。アプリ間で何度も同じ問題に直面しています。 https://forums.developer.Apple.com/thread/13414

2
Gautam Jain

IOS 9からアンインストールするたびに、アプリを再インストールするたびに、新しいデバイストークンが割り当てられたため、複数のプッシュ通知を受信する可能性があります。

実際、私は1つのフォーラムから読み上げました。それらは、ペイロードを生成するときに、1つの余分なカスタムランダム値を追加して、各ペイロードに一意の値を持たせるというソリューションを提供します。 vb.netの場合、DateTime.Now.ToString( "MMddyyyyHHmmssfff")を使用して、ミリ秒の一意のタイムスタンプを追加しています。私はこれを実装したが、今のところテストされていないことを願っています。

2
Muhammad Ishaq

私はこれを使用していますが、これはIos9でも正常に機能しています。試してみてください。これをdidFinishLaunchingWithOptionsに追加します:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
{
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}
else
{
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}

呼び出し方法は

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    self.AppDeviceToken=[token stringByReplacingOccurrencesOfString:@" " withString:@""];
}
0
hardik vyas

最初にデータベースを確認し、デバイストークンを2回取得していないことを確認します。同じトークンのエントリが重複している可能性があります。

第二に、3〜4日以内にアプリをインストール/アンインストールすると、通知が2回または3回も届く可能性があります。

解決策:可能であれば、アプリを再度インストールするよりも1週間アプリをアンインストールしてください。

ありがとうございました。

0
Muhammad Ishaq