42

Вопрос по ios, push-notification, objective-c, apple-push-notifications, iphone – Как вернуть диалоговое окно «Разрешить push-уведомления» после того, как оно было закрыто один раз?

Я создаю приложение, которое сильно зависит от APN. При самом первом запуске моего приложения iOS спрашивает, разрешено ли этому приложению использовать APN (в результатеregisterForRemoteNotificationTypes: вызов). Однако после закрытия этот диалог никогда не появляется снова. Я должен вручную перейти кSettings->Notifications->MyApp чтобы включить / отключить вещи там. Так есть ли способ избежать этой суеты и реально испытать то, что пользователь будет испытывать при самом первом запуске каждый раз, когда я запускаю свое приложение в режиме отладки?

Почему здесь щедрость? Разве принятого ответа недостаточно?

от Gil Sand

@ Schultz9999 Ответ Эрана охватывает то, что вы спросили. В настоящее время единственный способ настроить запуск с первого раза - выполнить следующие шаги. Я воспроизвел их, и это сработало. Документация предоставлена ​​Apple:developer.apple.com/library/ios/technotes/tn2265/_index.html#//...

от LucasA

@ LucasA Кто?

от Schultz9999

Вы должны пометить это как ответ, так как приведенный ниже метод работает (для ios 7.0+).

от LucasA

проверьте эту ссылкуstackoverflow.com/questions/10191006/...

от Pawan Rai
7 ответов
79

Вот как

Apple, сказать ты можешь это сделать:

Сброс оповещения о разрешениях push-уведомлений на iOS

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

Если вы хотите имитировать первый запуск своего приложения, вы можете оставить приложение удаленным на один день. Вы можете достичь последнего, фактически не ожидая дня, выполнив следующие действия:

Удалите ваше приложение с устройства.

Полностью выключите устройство и включите его снова.

Перейдите в «Настройки»> «Основные»> «Дата и время» и установите дату на день вперед или более.

Снова полностью выключите устройство и включите его снова.

Побочный эффект: если вы сделаете это на iDevice с включенным iMessages, перемещение часов на один день в будущем отключит iMessage. Поэтому после того, как вы выполнили все вышеперечисленное и сбросили часы, не забудьте снова включить iMessages, иначе вы не сможете отправлять или получать

от Thomas Watson

Что-то, что я только что обнаружил: после того, как вы сбросили разрешения, всякий раз, когда подсказка появляется снова, вы можете выключить / включить телефон вместо ответа на подсказку, и это заставит его запросить снова при следующем запуске приложения. Полезно для изменения кода, пытаясь выяснить, если / когда определенные пути кода будут вызывать приглашение.

от adam.wulf

Извините, что беспокою. Можете ли вы взглянутьВот и посмотрим, сможешь ли ты на это ответить? @eran

от Honey

Вау ... Хорошая работа Apple :) Но спасибо! Все еще лучше чем ничего. Я сделаю это.

от Schultz9999
23

Поскольку время - деньги

а другие методы требуют FOREVER - просто меняйте идентификатор пакета снова и снова во время отладки, каждый раз уведомления будут запрашиваться заново. Как только вы будете удовлетворены кодом, вернитесь к исходному идентификатору пакета.

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

от ooxio

Но не нужно ли вам постоянно менять профиль обеспечения?

от Van Du Tran

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

от rizzes

@ VanDuTran Мне не нужно, толчок все еще работал для меня. Но даже если бы вам пришлось, это было бы намного быстрее, чем текущее отмеченное решение. Ха-ха!

от Albert Renshaw

@AlbertRenshaw О боже, текущее решение даже не работает для меня ... Я установил его на два дня вперед ..

от Van Du Tran
18

В iOS 9.x вы можете получать подсказки каждый раз

когда удаляете приложение и переустанавливаете его. Это верно как для производственных загрузок AppStore, так и для режима adhoc. Маркер устройства будет уникальным каждый раз.

@chengsam подтвердил, что это верно и для iOS 10. @WongWray подтвердил, что это верно и для iOS 11.

Я не видел повторной реплики либо :(

от mofojed

Я протестировал на своей iOS 10, и она работала хорошо. Это должен быть правильный ответ с 2017 года.

от chengsam

Я не вижу повторного запроса в моем тестировании со специальной версией моего приложения, распространяемой через HockeyApp для iPad Mini (Модель A1489 a.k.a. ME276LL / A) на iOS 9.2 (13C75). Другие могут весить?

от AWrightIV

Спасибо! Он хорошо работает на моей iOS 10. Я просто запустил приложение с xCode на iPhone и удалил приложение перед следующим запуском. Самый простой ответ здесь.

от Kamil Rykowski

Протестировано и для iOS 11.x. Работает как на производстве, так и на разработке

от WongWray
6

На IOS10 теперь я могу получить приглашение снова

просто удалив приложение.

это было в тот же день для iOS 8

от Danny Yassine
5

В настоящее время их нет

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

Вам просто нужно проверить, был ли вам предоставлен доступ, а если нет, отобразить представление, напоминающее пользователю о необходимости вручную дать разрешение в настройках конфиденциальности, чтобы включить функции push-уведомлений вашего приложения.

Я даже не ищу способ спросить то же самое. Все, что мне нужно, это в основном привести систему в исходное состояние. Но я понял твою точку зрения. Это действительно то, что я делаю позже, позвонив[[UIApplication sharedApplication] enabledRemoteNotificationTypes], Проблема в том, что я хотел действовать по-другому при запуске приложения. Я могу попытаться использовать тот же подход, я полагаю.

от Schultz9999

Я понимаю, что вы пытаетесь сделать, но, к сожалению, это невозможно (если для этого нет недокументированных частных API).

от Woodstock
1

Моя проблема не была регистрация для UserNotificationSettings. Это поз

волило APN работать, но не фоновый звук или значок.

      [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
1

Если вы просто проверяете

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

Похожие вопросы