Как определить статус Push-уведомлений программно? - PullRequest
2 голосов
/ 30 января 2012

В моем приложении при первой регистрации push-уведомлений я вызываю didRegisterForRemoteNotificationsWithDeviceToken и сохраняю токен устройства в постоянном режиме, а также обновляю список серверов для токена устройства. Теперь, если кто-то отключит настройки push-уведомлений в настройках iPhone, как я могу определить его в своем приложении, чтобы можно было также удалить токен устройства с сервера. Я знаю, что APNS предоставляет список отзывов, но кроме этого есть способ определить это в приложении программно? Спасибо за любую помощь!

1 Ответ

7 голосов
/ 30 января 2012

Я считаю, что вы не хотите управлять токенами таким образом.

Ваше приложение всегда должно запрашивать у Apple токен APN.Затем вы всегда должны отправлять этот токен на свой собственный сервер, вероятно, связывая токен с вашим пользователем (если он у вас есть).Вы делаете это потому, что токен может измениться, поэтому вы хотите убедиться, что у вас всегда есть актуальные токены.

Служба обратной связи сообщит вам (на самом деле, вы опрашиваете его нанекоторый интервал по вашему выбору), какие токены стали недействительными.На этом этапе вы удаляете токены из своей базы данных на стороне сервера.Чтобы было ясно, вам нужен процесс на стороне сервера, который опрашивает службу обратной связи Apple, а затем обновляет базу данных на стороне сервера.

Вы не будете получать отзывы о недействительных токенах, пока не попытаетесь отправить уведомление с использованием токена.Уведомление будет (я думаю) будет принято Apple, когда вы отправите его, но когда Apple обнаружит, что оно предназначено для недействительного токена, сообщение отбрасывается и токен добавляется в ваш отзыв.

Теперь, еслиПользователь вашего приложения принимает push-уведомления, когда ваше приложение сначала запрашивает об этом, но позже отключает уведомления через приложение «Настройки» для вашего приложения, вы не получите никаких отзывов об этом.Насколько я могу судить, происходит то, что любое уведомление, которое вы отправляете на это устройство, будет отправлено на устройство, но ОС отбрасывает его, выполняя окончательный выбор пользователя в приложении «Настройки» для вашего приложения и уведомлений.

Наконец, в вашем приложении есть API, который можно вызвать, чтобы получить битовую маску о том, какие виды уведомлений включены для вашего приложения на устройстве.Вот метод, который я написал для этой цели;при необходимости измените:

+(BOOL)acceptsPushNotifications
{
    UIRemoteNotificationType mask = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

    return (mask & UIRemoteNotificationTypeAlert) == UIRemoteNotificationTypeAlert;
}

Но я бы не рекомендовал использовать это, чтобы решить, должно ли ваше приложение сообщать серверу об удалении токена из вашей базы данных.Это не то, как вся система APN предназначена для работы ... Я верю.

...