Проблема с push-уведомлениями в Adhoc Distribution - PullRequest
16 голосов
/ 12 октября 2011

Здравствуйте, я новичок в iPhone.

Я работаю над приложением Iphone, которое успешно получает push-уведомления в среде разработки, но не получало уведомлений при распространении adhoc.

У меня есть оба сертификата, т.е. разработка и производство.

Может кто-нибудь сказать мне, что мне не хватает?

Ответы [ 9 ]

44 голосов
/ 12 октября 2011

Как я вчера опубликовал как ответ на тот же вопрос: ( предыдущий ответ )

У меня похожие проблемы. После некоторого теста я пришел к следующим выводам:

  1. Если приложение (которое было скомпилировано с помощью development provision profile) установлено, то такое устройство имеет development token, и вы должны отправить запросы на такое устройство, используя development certificate.

  2. Если приложение (которое было скомпилировано с distribution provision profile) установлено, то такое устройство имеет production token, и вы должны отправлять запросы на такое устройство, используя production certificate.

И, если ваше приложение еще не опубликовано, я думаю, что APNS не примет production certificate, поэтому, вероятно, вы не сможете отправлять push-сообщения в свои специальные приложения.

Что вы можете сделать? Например, отправили приложение своим тестерам, которое скомпилировано с development certificate.

ОБНОВЛЕНИЕ: Я узнал этот вопрос еще раз и нашел интересную информацию:

  1. Загрузите Ad-hoc provision profile.
  2. Открыть профиль обеспечения из 1. в текстовом редакторе.
  3. Поиск строк <key>aps-environment</key> <string>production</string>
  4. Проверьте значение ключа aps-environment. Это равно production?
  5. Если да, то вы должны отправить в свои специальные приложения push-уведомление с production certificate.

    Если значение равно development, то вам следует отправить в свои специальные приложения push-уведомление с development certificate.

  6. Теперь откройте портал обеспечения iOS -> Идентификаторы приложений . Выберите ваше приложение.
  7. Проверьте, включен ли Production Push SSL Certificate.

Если вам это не помогло, попробуйте обновить свой специальный профиль обеспечения.

2 голосов
/ 26 июня 2015

Существуют строгие контрольные списки, которые следует учитывать при тестировании push-уведомлений для среды разработки. Большинство из них уже упоминалось выше. Но это то, что решило мою проблему, и я хотел бы поделиться. Надеюсь, это кому-нибудь поможет. И это:

Обратите внимание на идентификатор токена устройства, который отличается для среды разработки и производства.

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
       NSString *deviceTokenStr = [[[[deviceToken description]
                                      stringByReplacingOccurrencesOfString: @"<" withString: @""]
                                     stringByReplacingOccurrencesOfString: @">" withString: @""]
                                    stringByReplacingOccurrencesOfString: @" " withString: @""];
       UIAlertView *alert= [[UIAlertView alloc]initWithTitle:deviceTokenStr message:Nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
}
1 голос
/ 23 июля 2014

В дополнение к догадке Некто ...

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

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

1 голос
/ 03 апреля 2013

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

Я исправил push-скрипт (на стороне сервера) соответствующим образом (используя новые сгенерированные файлы .pem и подключившись к ssl: //gateway.push.apple.com: 2195). Сценарий сообщал мне, что уведомление доставлено, но мое устройство фактически не получало его.

Оказывается, проблема была действительно глупой! Видимо токены устройства меняются при использовании приложения с новым сертификатом (либо тем, либо через Ad-Hoc). Я могу только предположить причину, по которой они изменились, но все, что я знаю, это то, что как только я взял правильный токен и использовал свой тестовый скрипт для отправки уведомления на устройство, я получил его!

1 голос
/ 12 октября 2011

Push-уведомления иногда являются головной болью и состоят из множества элементов. Если вы что-то упустили в пути, ваш PNS не будет работать, и будет очень трудно понять, почему. Как правило, просмотрите следующий контрольный список:
- Push-сертификат и закрытый ключ были сгенерированы правильно с правильным идентификатором приложения (тот же, к которому прикреплен профиль обеспечения).
- Сертификат и закрытый ключ взяты из одного и того же загруженного сертификата PNS.
- Оба файла были правильно объединены в файл .pem.
- Ваше приложение обрабатывает push-уведомления по мере их поступления, пока приложение активно.

В любом случае, я рекомендую следовать хорошему учебнику, например так: http://mobiforge.com/developing/story/programming-apple-push-notification-services дословно. Удачи!

0 голосов
/ 13 октября 2016

Ответ за 2016.10.13

У меня похожая проблема после смены ключа в следующем уроке: https://support.magplus.com/hc/en-us/articles/203808718-iOS-Creating-a-Push-Notification-Certificate

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

ССЛ: ssl://gateway.sandbox.push.apple.com:2195 Должно быть изменено на ssl://gateway.push.apple.com:2195

После изменения я могу получить уведомление

0 голосов
/ 15 мая 2015

У меня возникла та же проблема, и после большого количества яичек, наконец, я понял, в чем проблема.

Это потому, что сервер apn производства Apple больше не допускает файл P12, который содержит данные закрытого ключа. Но сервер apns разработки примет файл P12, если он когда-либо будет содержать закрытый ключ.

Поэтому, когда вы экспортируете файл P12 из цепочки для ключей, просто выберите свой файл производственного сертификата без закрытого ключа, и вы получите уведомления в своем приложении adhoc (даже если оно не опубликовано).

0 голосов
/ 05 апреля 2013

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

PushNotification push = new PushNotification(true, p12file, p12password);

Ранее игнорируя параметр true, отладка через код сервера показала, что это настройка, использовать ли сервер Sandbox- О!Переключил его на false и все было хорошо.

Мораль истории: не забудьте направить свои уведомления на сервер, не входящий в состав песочницы!

0 голосов
/ 26 января 2012

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

  1. Создайте в Apple новое приложение с той же базовой линией, что и в приложении itunes.
  2. Создайте новый производственный ключ и сертификат для этого «фантомного» приложения.
  3. Создайте новое приложение с новым рабочим ключом и протестируйте его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...