6

私は enabledremotenotificationtypes を認識していますが、enabledremotenotificationtypes == UIRemoteNotificationTypeNone を受け取った場合、ユーザーが 1. プッシュ通知を一度受け入れたが、後で設定してオフにしたか、または 2. 拒否したかを知る方法がないため、役に立ちません。プッシュ通知または 3. 許可を求める青いダイアログを見たことがない。これら 3 つのケースを区別する方法が必要です。

どんな助けでも本当に感謝します。

4

2 に答える 2

1

解決策は少しハックですが、うまくいきます。2 つの異なる notificationSettings に対して registerUserNotificationSettings を呼び出す必要があります。

    //Request notification permission
UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];

//Request notification permission again, but with a category with no actions
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
category.identifier = @"com.xyz.markNotificationPopupShownCategoryIdentifier";

UIUserNotificationSettings *notificationSettingsWithCategory = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:[NSSet setWithObject:category]];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettingsWithCategory];

アプリ デリゲートの didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings メソッドが 2 回呼び出され、許可通知でのユーザーの回答に関係なく、2 回目の呼び出しの後、現在の通知設定にカテゴリが含まれます。カテゴリ数が 0 より大きい限り、通知許可ダイアログが表示されたことを確認できます。

if ([UIApplication sharedApplication].currentUserNotificationSettings.categories.count > 0) {
    NSLog(@"Notifications permissions has been asked");
} else {
    NSLog(@"Notifications permissions hasn't been asked");
}
于 2015-01-07T13:14:00.463 に答える
-3

これは、私がこの種の状況に対処する方法です。私は初心者なので、これが最適ではない可能性がありますが、私にとってはうまくいきます。intプロパティを作成しますpushNotificationSeen。ユーザーがダイアログを見てそれを拒否したpushNotificationSeen場合は、1 に設定します。ユーザーがダイアログを見てそれを受け入れた場合は、pushNotificationSeen2 に設定します。次に、コードの次の行で、次のような関数を呼び出します (コードの他の場所で定義されています)。

-(void)saveData
{
if (self.pushNotificationSeen)
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:self.pushNotificationSeen forKey:@"seen?"];
    [defaults synchronize];
}
}

次に、次の行を に追加しますviewDidLoad

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.pushNotificationSeen = [defaults integerForKey:@"seen?"];

この時点で、self.pushNotificationSeen が 0、1、2 のいずれであるかを確認することで、ユーザーが何をしたか、何をしていないかを把握できます。

これが十分な情報であることを願っています。私はあまり睡眠をとっていません。混乱している場合はお知らせください。明確にすることができます。

于 2012-09-10T09:45:54.313 に答える