Отсутствует право на получение push-уведомлений

126

У меня есть приложение для отправки, когда оно было отклонено, и я получил сообщение

Отсутствует право на получение push-уведомлений. Кажется, ваше приложение зарегистрировано в службе push-уведомлений Apple, но права подписи приложения не включают право «aps-environment». Если ваше приложение использует службу Apple Push Notification, убедитесь, что ваш идентификатор приложения включен для push-уведомлений на портале Provisioning Portal, и повторите отправку после подписания вашего приложения с профилем обеспечения распространения, который включает право «aps-environment».

Я проверил свою специальную подготовку и там обнаружил aps-environment и production, однако, когда я открываю свое распределение, я не нахожу их.

Является ли это причиной появления этого сообщения об ошибке и отказа от Apple, как это исправить?

mirageservo
источник

Ответы:

80

Да, это причина отказа App Store. Если в вашем специальном профиле подготовки есть ключ aps-environment, это означает, что ваше приложение правильно настроено на портале подготовки Apple. Все, что вам нужно сделать, это удалить профиль распространения App Store на локальном компьютере, затем повторно загрузить и установить профиль распространения с портала Provisioning Portal. Этот новый должен содержать ключ aps-environment.

Том
источник
Чтобы очистить еще немного тумана, здесь справедливо говорится, что «профиль распределения ДОЛЖЕН содержать aps-environment и т.д.», и что когда я открываю подготовку в текстовом редакторе, я должен найти его там ...
mirageservo
мне нужно создать новый сертификат ssl, особенно когда я что-то изменил в моем профиле распространения?
mirageservo
2
Нет, новый сертификат разработчика не нужен. Когда вы включили распространение для push-уведомлений (что вы должны были сделать в какой-то момент, потому что ваш специальный профиль имеет ключ aps-environment), портал подготовки iTunes создает новый профиль распространения магазина приложений, содержащий ключ aps-environment. Вы, вероятно, просто не загрузили и не установили последнюю версию.
Том
еще одна вещь, прежде чем этот вопрос попадет в галактику, нужно ли мне перекомпилировать (переархивировать) ipa, так как будут изменения в настройках сборки проекта, или я могу напрямую распространять приложение, не беспокоясь о перекомпиляции?
mirageservo
Вам нужно переархивировать. Профиль подготовки, связанный с приложением, встраивается в .ipa.
Tom
43

Первый идентификатор приложения

убедитесь, что ваше push-уведомление ID включено на производственной стороне

как показано на картинке

введите описание изображения здесь

Второй сертификат

из производственного раздела создайте два сертификата с вашим идентификатором (push-уведомление включено)

Сертификат App Store и Ad Hoc

Сертификат SSL (песочница) службы Apple Push Notification

введите описание изображения здесь

Третьи профили обеспечения

В разделе «Распространение» создайте профиль App Store с вашим идентификатором.

в заключение

пока вы загружаете свою корзину, вы должны проверить, какой профиль подготовки используется и иметь много прав

введите описание изображения здесь

это все случаи вызывают эту проблему, надеюсь, это будет полезно для вас

Мина Фаузи
источник
1
Это то, чего мне не хватало. Мне пришлось создать новый профиль подготовки на сайте разработчика Apple, используя идентификатор приложения с push-уведомлениями. С новым профилем обеспечения наконец в мое приложение было добавлено право на aps-environment. Спасибо!
М. Луиза Каррион,
38

В XCode 8 вам необходимо включить push на вкладке «Возможности» на вашей цели, помимо включения всего, что связано с положениями и сертификатами: Xcode 8 «право на aps-environment отсутствует в подписи приложения» при отправке

Мой блог об этом здесь .

Vaiden
источник
8
Это такой классический Apple. Через два часа после отправки сборки они отправляют сообщение об ошибке о проблеме, которую я давно решил (включение службы приложений push-уведомлений на портале разработчиков), и объясняется ссылкой на 404. Затем оказывается, что настоящая проблема в том, что они не перенесли мои настройки при обновлении до новой версии своего программного обеспечения (в которой я заблокирован). Тьфу.
Рембрандт К. Эйнштейн
3
Здесь та же история. Мы почти отклонили сообщение об ошибке как ошибку Apple.
Вайден
23

Я получил это сообщение по другой причине - я отправил приложение через Xcode, не создав предварительно профиль распространения App Store специально для приложения. Я считаю, что Xcode автоматически использует подстановочный профиль App Store, если он у вас установлен. Но для приложения, использующего push-уведомления, требуется собственный профиль.

Исправление заключается в создании нового профиля распространения в App Store для приложения. Затем вы загружаете его, перетаскиваете в Xcode и изменяете свой проект Build Settings> Code Signing> Release, чтобы использовать новый профиль.

Саймон Вудсайд
источник
11

Следуя ответу @Vaiden, в Xcode 8 вы можете решить эту проблему, выбрав цель и нажав «Исправить проблему». Конечно, вам все равно нужно настроить push-уведомления на портале Apple Developer (вы можете немного упростить процесс, используя новую опцию «Автоматическое управление подписью», которая избавит вас от хлопот по загрузке профилей обеспечения).

Вариант исправить меня

Ян
источник
8

Для тех, кто сталкивается с этой проблемой и на самом деле использует push-уведомления в своих приложениях:

Наши push-сертификаты недавно истекали, поэтому мы создали новые push-сертификаты dev / prod стандартным способом, изложенным Apple (я не буду вдаваться в подробности здесь, в Интернете есть много информации об этом при обновлении. ваши push-сертификаты на следующий год использования).

Однако после этого возникла проблема в этом вопросе. Независимо от того, что мы сделали, мы получили это письмо от Apple после отправки нашего приложения. Когда мы проверили настройки нашего профиля обеспечения распространения в Центре участников Apple, все выглядело нормально (push был включен для нашего идентификатора приложения для prod / dev, и наш профиль обеспечения распространения все еще был подключен к этому идентификатору приложения, мы буквально только что создали новые push-сертификаты еще на один год, что является стандартной практикой).

Наконец, вот что решило эту проблему для меня:

  1. Создайте новый профиль обеспечения распространения, указывающий на ваш идентификатор приложения (оставьте текущий профиль без изменений)
  2. В Xcode обновите свои профили подготовки через Настройки> Учетные записи> Выберите свою учетную запись> Детали> Щелкните значок обновления.
  3. Вручную создайте файл plist прав для вашего приложения:
    • Меню Файл> Новый файл ...
    • Выберите iOS> Ресурс> Список свойств.
    • Назовите новый файл «foo.entitlements» (обычно целевое имя - «foo»).
    • Нажмите (+) рядом с «Файл прав», чтобы добавить элемент верхнего уровня (редактор списка свойств будет использовать правильную схему из-за расширения файла)
  4. Убедитесь, что этот файл разрешений используется в настройках сборки вашей цели (Цель> Настройки сборки> Поиск «Права», в CODE_SIGN_ENTITLEMENTS укажите путь к только что созданному вами файлу разрешений)
  5. Убедитесь, что профиль обеспечения профиля / идентификатор подписи кода в вашем Target правильно настроен на ваш соответствующий профиль обеспечения распространения / удостоверение подписи (это должно быть очевидно)
  6. Я не уверен на 100%, повлияло ли это на это (это не должно, поскольку настройки Target переопределяют настройки проекта, но я все равно сделал это), убедитесь, что профиль обеспечения вашего проекта / идентификатор подписи соответствуют вашему Target
  7. В созданном вами файле прав щелкните правой кнопкой мыши пустой файл и выберите «Показать необработанные ключи / значения».
  8. Добавьте новую запись в файл прав под названием «aps-environment» и установите для нее значение «production».
  9. Одно ключевое замечание: если вы ранее использовали право группы доступа к связке ключей, вы также захотите добавить этот ключ сюда, потому что по какой-то причине он был очищен для меня при выполнении этого вручную. Убедитесь, что значение совпадает со значением, используемым в предыдущих сборках (вы можете найти значение, найдя предыдущую сборку в Организаторе, попытавшись отправить в магазин приложений, выберите свою команду, а затем перед отправкой приложения нажмите стрелку рядом с Строка «(X) Entitlements», чтобы развернуть права и увидеть значение прав группы доступа связки ключей.
  10. Заархивируйте свое приложение и попытайтесь отправить его до последней кнопки «Отправить». Вы должны увидеть, что это приложение было создано с новым профилем подготовки, который вы создали в центре участников. Отмените это сейчас.
  11. Вернитесь в центр участников Apple и удалите новый профиль обеспечения, созданный на шаге 1.
  12. Вернувшись в Xcode, еще раз обновите список профилей подготовки, повторив шаг 2.
  13. Теперь снова заархивируйте свое приложение, и вы должны увидеть, что приложение было создано с использованием старого профиля обеспечения распространения, который вы хотели использовать, и правильно имеет права aps-environment. Отправьте, и все готово.

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

Адам Эйсфельд
источник
Спасибо. №8 для меня был настроен на разработку, что могло быть нашей проблемой.
ingage
Большое спасибо, потраченный впустую целый день на этот мерзкий шаг №4 был проблемой, по какой-то причине без указания CODE_SIGN_ENTITLEMENTS права игнорировались только при загрузке в магазин приложений.
Марк Казаков
5

убедитесь, что ваш идентификатор приложения включен или отключен на сайте developer.apple.com на портале подготовки iOS. Если нет, то включите его, настройте сертификат Push SSL для идентификатора приложения. Загрузите его и переустановите в связке ключей еще раз, затем загрузите свой профиль распространения. в вашей библиотеке Xcode

Вишала п
источник
4

Я также столкнулся с этой проблемой, даже если я вообще не использовал push-уведомления в своем приложении. Создание нового профиля подготовки также не сработало для меня. Я сделал следующее:

1.Создайте новый сертификат только для Ad hoc и App Store.

2. Затем создайте профиль распространения с этим сертификатом и интегрируйте профиль с Xcode.

Затем вновь представленная сборка с этим профилем утверждается без предупреждения.

Пустынная роза
источник
2
Я пробовал это - не помогло. все еще получаю отсутствующие push-уведомления .. Я не использую push-уведомления!
Adam
2

В моем случае даже я создал myapp.profile и вручную установил его в xcode, и когда я выбрал «показать в поисковике», нашел embedded.mobileprovision и проверил, есть ли в файле aps-environment, ошибка была все еще там.

Затем я пошел в центр разработчиков и обнаружил, что статус XC: myapp.profile недействителен. Я обновил его и установил XC: myapp.profile, и он работал нормально.

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

ОБНОВИТЬ:

После того, как вы подписались с помощью загруженного профиля и подтвердили, что он aps-environmentбыл там, когда вы пытаетесь отправить App Store, вы сможете изменить профиль и объект подписи кода на автоматический и iOS Developer. Надеюсь, это можно улучшить в Xcode 7.

superarts.org
источник
Я проверил все профили, а также профиль XC: обновлен, и он не содержит никаких ключей asp-environment, но у меня снова и снова возникает одна и та же проблема. Любая помощь будет оценена по достоинству. И да, мне не нужны какие-либо push-уведомления, реализованные в приложении
iOSDev
Не могли бы вы убедиться, проверив двоичное содержимое профиля обеспечения и посмотреть, находится ли внутри строка «aps-environment» или нет? Если он внутри, вам нужно найти способ избавиться от него, иначе вам нужно убедиться, что это тот профиль, которым вы подписываете свое приложение. В любом случае должна быть проблема.
superarts.org 05
1
Я проверил его дважды и пытаюсь узнать больше, но безуспешно. Такой строки нет, но после 2 дней поиска и попыток я понял, что эта проблема связана с бета-версией Xcode 7, а не с моим кодом :) Та же сборка с помощью Xcode 6.4 отлично работает, и от Apple не пришло письмо с сообщением, что проблема, поэтому проблема связана с Xcode 7 beta 4, а не с кодом или профилем.
iOSDev
2

Это было то, что исправило это для меня. (Я уже пробовал включать / выключать возможности, воссоздавать профиль обеспечения и т. Д.).

На вкладке « Параметры сборки» в разделе « Права на подпись кода» мой файл .entitlements не был связан со всеми разделами. Как только я добавил его в раздел Any SDK, ошибка была устранена.

введите описание изображения здесь

mogile_oli
источник
2

Чтобы решить эту проблему для «извлеченного» приложения, я перешел на вкладку возможностей, включил push, а затем снова отключил. В результате из файла .entitlements был удален параметр APNS «Права».

Крис
источник
попробовал это на моем "извлеченном" проекте, но все равно получаю эти уведомления
webdevbyjoss
1

У меня была та же проблема, и моим решением было добавить право на push-уведомления из Target -> Capabilities.

Шалом Дахан
источник
0

Это случилось со мной внезапно, потому что срок действия моего профиля распространения приложения истек. Вместо этого Xcode начал использовать профиль с подстановочными знаками, для которого не было включено право на push-уведомления. Я не получил никакого предупреждения. Исправить было легко; Мне просто нужно было сгенерировать другой профиль распространения для моего приложения в Apple Developer Member Center, загрузить его и дважды щелкнуть для установки в Xcode.

ahmacleod
источник
0

Здесь есть несколько действительно хороших предложений.

Ссылаясь на последний снимок экрана, предоставленный Миной после первоначального архивирования моего приложения, профиль обеспечения, упомянутый во время загрузки, содержал подстановочный знак (XC. *). Это не верно.

Чтобы решить эту проблему, потребовались значительные усилия. Мне пришлось выполнить комбинацию предложений, которые предоставили Саймон Вудсайд и Мина Фози.

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

Подробное предложение Мины Фаузи превосходно. Выполнение предложения Мины, если оно выполнено правильно, должно позаботиться о вас в Интернете.

Введите предложение Саймона. Две вещи, которые мне нужно было проверить в моем проекте. Используя XCode, перейдите сюда:

ПРОЕКТ -> НАСТРОЙКИ ЗДАНИЯ -> ПОДПИСАНИЕ КОДА

Просмотрите свойства идентификатора подписи кода и профиля обеспечения . Убедитесь, что вы установили эти два свойства в соответствии с именем вашего проекта. Не позволяйте XCode автоматически выбирать за вас и не используйте какую-либо общую идентификацию подписи кода (например, Iphone Developer).

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

Тренер Робак
источник
0

Самая большая проблема , что у меня есть после включения Push Notificationот Capabilitiesи переделке всех сертификатов является то , что имя Target и имя папки , где хранилась проект состоит из 2 -х строк , разделенных пробелом. После удаления пробела все заработало нормально!

Константин Сауленко
источник
1
Мое приложение не использует push-уведомления, но я все равно получаю это предупреждение от Apple. Пожалуйста, предложите
Чандни
0

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

Вот пример правильно отформатированного файла прав (" Runner.entitlements"):

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>aps-environment</key>
    <string>development</string>
    <key>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
</dict>
</plist>
Jonas357
источник
0

ИСПРАВЛЕННАЯ ИДЕЯ Привет, ребята, я сделал приложение и не использовал функции push-уведомлений, но я все равно получил электронное письмо. После проверки сертификатов, идентификаторов и профилей идентификатора пакета, который я использовал для создания своего приложения в магазине Apple, подключиться на портале разработчика Apple, я понял, что push-уведомления включены.

Что вам нужно сделать:

перейдите на сайт входа для разработчиков Apple, где вы можете управлять своими сертификатами как 2. выберите вкладку «Сертификаты, идентификаторы и профили» справа 3. теперь выберите «Идентификаторы» 4. и идентификатор пакета из списка справа 5. теперь прокрутите вниз, пока не увидите push-уведомление. 6. выключите его. 7. заархивируйте сборку и повторно загрузите ее в Apple Store Connect.

Надеюсь, поможет!

Qooplite
источник