Как проверить, включен ли профиль обеспечения распределения iOS для push-уведомлений?

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

Однако на моем iPad я могу получать push-уведомления из этого приложения, и он отображается в моих настройках > Уведомления. Я удалил и переустановил приложение, чтобы убедиться, что у меня есть то же самое, что у всех остальных (а не версия для разработки), и я все еще могу получать уведомления.

Теперь это приложение было написано для клиента, который отправил мне все профили подготовки (dev, adhoc, distribution), а также файлы, необходимые для отправки push-уведомлений, поэтому я не могу точно знать, что все был правильно создан.

Моя теория прямо сейчас такова:

  • профиль adhoc, который я получил, был "правильно создан" (т.е. сгенерирован после настройки APN на App App ID в Provisioning Portal)
  • профиль распространения, который я получил, был создан до настройки APN для этого приложения (и, следовательно, он не "нажимал" )
  • причина, по которой я могу получать push-уведомления на своем устройстве, заключается в том, что во время разработки я установил adhoc-версию, которая вызвала у меня разрешения на получение push-уведомлений, и хотя я удалил эту версию adhoc и загрузили версию из магазина, устройство "кэшировало" тот факт, что я готов получать уведомления и больше не запрашиваю у меня это. Я проверил с другими приложениями, и действительно, после того, как я их удалю и переустановить, они не будут запрашивать у меня снова разрешения на получение push-уведомлений.

Итак, мои вопросы:

  • Имеет ли смысл эта теория?
  • Если это так, это означает, что я должен попросить клиента создать новый профиль предоставления распределения. Как я могу проверить, что этот профиль "нажат"? (т.е. учитывая, что я не могу просто установить приложение, скомпилированное с ним)

Ответ 1

Хорошо, я, возможно, нашел способ проверить, включено ли нажатие профилей.

Если я открою файл .mobileprovision в виде текстового файла, там будет немного XML (очевидно, plist), который, как я предполагаю, для профиля распространения, должен иметь следующее:

<key>aps-environment</key>
<string>production</string>

И действительно, профиль adhoc имел это, и профиль распределения не делал этого, поэтому... Я предполагаю, что это была проблема.

Тем не менее, любая обратная связь была бы полезной:)

Ответ 2

Немного отличается, но все же полезно: при загрузке приложения в iTunes connect вы можете проверить, есть ли у него Push-уведомления (или любые другие права).

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

Оттуда перейдите на страницу "Двоичные данные" - там поле "Права", которое показывает, какие права имеют бинарные файлы. Если Push Notifications включены, вы увидите строку "aps-environment: production".

Ответ 3

Убедитесь, что профиль создания распределения создается после создания aps_certificate. Высокие изменения профиля могут пропустить aps-environment

Ответ 4

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

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
NSLog(@"Receiving Notification Types: %lu", (long)enabledTypes); //0=none 1=badge 2=sound 4=alert 8=NewsStandContantAvailability

Я получил это из очень инклюзивной и полезной ссылки: Учебное пособие по уведомлению Apple Push Notification - часть 1 это было очень полезно для меня.