2015-12-16 2 views
6

С моим приложением в App Store push-уведомления не работают. С моим приложением в разработке, push-уведомления работают.Apple Push Уведомления не работают в производстве

Я предполагаю, что я должен был протестировать через развертывание Ad Hoc. Во всяком случае, вот что я знаю ...

App ID

мой App ID является com.MyName.My-App

имеет Push-уведомления включены для развития и распространения

enter image description here

APNs Сертификаты

У меня есть оба сертификата разработки и распространения. Это то, о чем я беспокоюсь.

enter image description here

Он имеет имя com.MyName.My-App

Экспорт в PEM

Я выбрал как Cert и закрытый ключ, и экспортировать ее, как следующим образом:

enter image description here

и защищены паролем Это.

Я побежал

openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts 

поставляет пароль и успешно получать pushcert.pem выход.

Загрузка App

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

<?php 

// Put your device token here (without spaces): 
$deviceToken = 'myProductionDeviceTokenInHere'; 

// Put your private key's passphrase here: 
$passphrase = 'myPasswordIsInHere'; 

// Put your alert message here: 
$message = 'Test'; 

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer'); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 

Почему это не удается? Он работает с токеном моего устройства разработки, но не с токеном моего продукта. Разве я не сделал что-то правильно?

+0

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

+0

Эй! Вы попробовали мое решение? –

+0

@JulianE. Еще нет, я должен получить шанс на каникулы в ближайшие несколько дней, чтобы уйти. –

ответ

3

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

Итак, теперь вы должны предпринять следующие шаги:

  • Войти в Центре разработчиков компании Apple
  • Создать новый профиль обеспечения для этого идентификатор приложения для распространения Screenshot
  • Continue, чтобы установить его в полном объеме, указав все необходимые данные
  • Загрузите профиль и дважды щелкните его, чтобы установить его
  • В вашем проекте под Build Settings-> Code Signing -> Distribution выберите ваш вновь созданный профиль
  • Теперь Push Notifications также достигнет конечного пользователя в сборках Distribution.

Надеюсь, что поможет, Джулиан.

+0

Я создал новый профиль специального профиля, а не профиль App Store, чтобы проверить, будет ли это работать первым ... прежде чем я создам дистрибутив, нажмите его в App Store и подождите 2 недели. Таким образом, я могу проверить, работает ли Ad Hoc сразу. Во всяком случае, это не так: @. Эта проблема убивает меня! –

+0

Итак, вы сделали Ad Hoc один, установили его в Xcode, и это не сработало? –

+0

Yup. Сейчас я убиваю все в своем центре. Очистив все это. Собираясь записывать свой экран через QuickTime и настраивать все, и посмотреть, не сработает ли он снова. Тогда, по крайней мере, таким образом я сделаю все свои шаги записаны. –

0

Убедитесь, что вы не используете сертификат sandbox на сервере! вы должны изменить это, чтобы он работал из песочницы в prod.

0

Оказалось, что это проблема с третьей стороной Ruby Gem, которую я использовал (rpush). Не совсем точно, что, но как только я переключил его, все было здорово.