Каким-то образом я потерял уведомления pu sh в своем приложении. Я не могу понять это - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть уведомления pu sh как часть моего профиля обеспечения.

У меня есть удаленные уведомления и уведомления pu sh, выбранные в качестве моих возможностей для всех типов сборки.

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

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

Я пытался удалить и переустановить приложение. перезагрузка телефона. проект уборки. удаление и повторное добавление возможностей. Что здесь происходит?

1 Ответ

1 голос
/ 23 февраля 2020

Существует два типа удаленных уведомлений: уведомления об обновлениях в фоновом режиме (те, чья полезная нагрузка содержит content-available: 1) и обычные уведомления pu sh. Первый тип всегда молчит, и пользователь ничего не увидит, а второй - когда пользователь получил сообщение на экране блокировки.

Для приложения iOS ВСЕГДА разрешено фоновое уведомление об обновлении без Пользователь должен предоставить вам любые разрешения. Только когда вы хотите доставлять уведомления, когда пользователь будет предупрежден, пользователь должен сначала предоставить вам разрешение. Поэтому, когда вы включаете эти возможности, вы сообщаете системе, что ваше приложение должно получать уведомления, но система не знает, какой тип, поэтому она позволяет вам зарегистрироваться в APNS и получать уведомления в фоновом режиме. Только выполнение этого означает, что ваш пользователь не увидит оповещений, предлагающих разрешить вашему приложению отправлять уведомления, и не будет никаких настроек уведомлений для вашего приложения - пользователь не может отключить то, о чем он даже не знает.

Чтобы попросить пользователя предоставить вам разрешение, посмотреть настройки разрешений в приложении «Настройки» и иметь возможность доставлять уведомления со звуками и сообщениями, вы должны в определенный момент в своем коде спросить систему для таких разрешений, используя следующий код:

iOS 9:

UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil))

, затем внедрите func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) в вашем делегате приложения. Проверьте, предоставил ли пользователь вам разрешение. (Проверьте, является ли notificationSettings.types пустым. Если это так, пользователь отклонил его).

iOS 10 и далее:

import UserNotifications

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted in
    if (granted) {
        // ...
    }
}

Когда вы выполняете этот код, система немедленно представит пользователю предупреждение с просьбой предоставить или запретить вашему приложению разрешение представлять уведомления, которые могут содержать предупреждение, звук, и отображать значок на значке вашего приложения. Сделав выбор, пользователь может go в приложении «Настройки» и просмотреть / изменить свой выбор, где вы увидите, что ваше приложение имеет настройку уведомлений.

PS Как пользователь может позже пересмотреть и изменить свои Настройки уведомлений для вашего приложения, вы никогда не должны хранить предоставленный статус в вашем приложении. Скорее используйте надлежащие API для получения текущего статуса каждый раз, когда вам это нужно. Для iOS 9 установите флажок UIApplication.shared.currentUserNotificationSettings?.types пуст (означает, что у вас нет разрешения), а для iOS 10 и выше используйте UNUserNotificationCenter.current().getNotificationSettings { settings in ... }, чтобы проверить, содержат ли настройки какие-либо типы вообще. Опционально, вызов requestAuthorization может также напрямую вернуть вам предоставленное логическое значение, и если пользователь был предупрежден и сделал выбор, метод requestAuthorization напрямую предоставит вам выбор пользователя, не спрашивая его снова.

TL; DR Вы еще не запросили у пользователя разрешения. Они не увидят предупреждение о разрешении, и вы не найдете настройки уведомлений для вашего приложения в приложении «Настройки», пока вы не сделаете это.

...