Подтвердить что ты не робот

DidRegisterForRemoteNotificationsWithDeviceToken называется дважды?

Немного похож на Когда это сделаноRegisterForRemoteNotificationsWithDeviceToken называется?.

Когда пользователь первый установил приложение, и он запрашивает, принимать ли уведомление, вызывается ли didRegisterForRemoteNotificationsWithDeviceToken, если пользователь принимает его?

В настоящее время я вызываю registerForRemoteNotificationTypes после того, как пользователь успешно выполнил вход или создал учетную запись.

В последующих запусках делегат didRegisterForRemoteNotificationsWithDeviceToken вызывается даже без вызова registerForRemoteNotificationTypes в AppDelegate.

Если я следую документам и примерному примеру:

Запросив токен устройства и передавая его провайдеру каждый раз, когда запускается ваше приложение, вы помогаете гарантировать, что у провайдера есть текущий токен для устройства.

- (void)applicationDidFinishLaunching:(UIApplication *)app {

   // other setup tasks here....
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:...
}

Но, запросив токен при запуске приложения, делегат будет вызываться дважды.

Необходимо несколько вопросов и ясности:

  • Чтобы началось первоначальное приглашение, необходимо вызвать вызов registerForRemoteNotificationTypes для появления приглашения? Но делегат будет вызываться дважды, если я вызову его вручную в AppDelegate. Предполагается, что это так?

  • Если пользователь принимает начальное приглашение, будет ли didRegisterForRemoteNotificationsWithDeviceToken вызываться автоматически? Или мы должны ссылаться registerForRemoteNotificationTypes в AppDelegate? Но тогда делегат будет дважды вызван для будущих запусков?

  • Если пользователь отрицает и позже принимает его через настройку, что происходит?

UPDATE

0. Для того, чтобы начальное приглашение произошло, необходимо вызвать вызов registerForRemoteNotificationTypes для появления приглашения? Но делегат будет вызываться дважды, если я вызову его вручную в AppDelegate. Разве это так? Это неверно. Обнаружилось, что в AppDelegate было сделано 2 registerForRemoteNotiicationTypes.

4b9b3361

Ответ 1

Если пользователь принимает начальную подсказку, будет ли вызвана функцияRegisterForRemoteNotificationsWithDeviceToken автоматически? Нет. Процесс регистрации удаленного уведомления начинается, когда нажата кнопка "Разрешить доступ", но метод didRegisterForRemoteNotificationsWithDeviceToken вызывается только при успешной регистрации APNS.

Если ваше приложение зарегистрировалось ранее, вызов registerForRemoteNotificationTypes: результаты в операционной системе немедленно передать токен устройства делегату дополнительные накладные расходы

Вы можете определить, запускается ли приложение в результате пользователь нажал кнопку действия или было ли уведомление доставляется в уже запущенное приложение, изучая состояние приложения. В делегатах реализация application: didReceiveRemoteNotification: или application: didReceiveLocalNotification: метод, получить значение applicationState и оценить его. Если значение равно UIApplicationStateInactive, пользователь нажал кнопку действия; если Значение - это UIApplicationStateActive, приложение было он получил уведомление.

Ответ 2

Неа. этот метод только один раз запускается при запуске приложения. если он вызывается дважды, он будет вызываться из вашего кода. Попытайтесь увидеть, что если вы ставите код типа

[application registerUserNotificationSettings:mySettings];
[application registerForRemoteNotifications];

in didFinishLaunchingWithOptions

то в go to

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings

заключается в том, что вы можете называть [application registerForRemoteNotifications];

поэтому удалите этот код.