Я знаю, что это немного затоплено проблемами службы push-уведомлений Apple (APNs) по всему StackOverflow, поэтому я действительно провел много исследований, прежде чем поднять свой вопрос.
По сути, я следовал за apns-php's CertificateCreation , некоторые учебные пособия, такие как на mobiforge , а некоторые из Matthijs Hollemans .Тем не менее, я не могу отправлять уведомления на свой iPad 2.
По сути, я выполнил следующие шаги:
- Я следовал учебнику CertificateCreation Я вышел с
server_certificates_bundle_sandbox.pem
, entrust_root_certification_authority.pem
. Следуя инструкциям, указанным в mobiforge blog , я успешно создал идентификатор приложения, предоставил профиль и связал их вместе.
- Описание: APNTest
- Идентификатор комплекта семян: Использовать идентификатор группы
- Идентификатор комплекта: com.learn.APN
Затем я включаю SSL-сертификат Development Push (только на данный момент), используя тот же запрос сертификата, который я использовал только что, чтобы получить сертификаты, и я загружаю его и устанавливаю в свою цепочку для ключей.
Я загрузил свой профиль обеспечения в файл .mobileprovision
и загрузил его в Организатор XCode под моим устройством iPad 2.
Далее я создаю простое приложение только с этими кодами:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
// Override point for customization after application launch.
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"Error: %@", error);
}
Затем я настраиваю параметры сборки:
- Цели> Информация> Идентификатор сборки: net.learn.APN
- Цели> Настройки сборки> Идентификация подписи кода> (я выбрал профиль обеспечения, который я только что установил, и он автоматически выбирает идентичные профили для моего Отладки и выпуска)
Я создаю и запускаю приложение на своем iPad 2. Мое приложение запрашивает Push-уведомление, и после того, как я одобрил его, в моей консоли появился идентификатор токена:
2012-01-19 12:43:26.345 TestAPN[578:707] <3cb08612 9392996b 5332d2fc 5adce03d 994f8959 d7a2ac38 de7bed52 c8e0778e>
Я использовал apns-php , изменил идентификатор устройства (необработанные 64 шестнадцатеричные значения), затем запустите sample_push.php
.Сценарий успешно запущен, но мое устройство не получает никаких уведомлений
Затем я пытаюсь использовать SimplePush.php .Появилось сообщение «Сообщение успешно доставлено», но мой iPad все еще не получает никаких уведомлений от APN
Вопрос в том, какие шаги я сделал неправильно?Я довольно новичок в этой области, и для моего проекта на самом деле требуется, чтобы сервер отправлял сообщения нашим собственным приложениям.Нам известно о программном обеспечении сторонних производителей, которое отправляет APN от вашего имени, но мы хотели бы внедрить его самостоятельно.
Я также столкнулся с « APN Feedback Service » и написалэто (основано на SimplePush), но, к сожалению, оно пустое.Что мне теперь делать?
<?php
// Put your private key's passphrase here:
$passphrase = '';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://feedback.sandbox.push.apple.com:2196', $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;
while (!feof($fp)) {
$data = fgets($fp, 1024);
var_dump(unpack("N1timestamp/n1length/H*devtoken", $data));
}
// Close the connection to the server
fclose($fp);
Примечание
- Мне известны различия между сертификатами разработки / производства.
- iPadне взломан, работает под управлением iOS 5.0.1
- Другие приложения App Store обычно получают уведомления
- XCode 4.2.1, Lion 10.7.2
Я надеюсь, что я 'm не дублирует ни один из вопросов здесь ..;)
РЕДАКТИРОВАТЬ
Когда я запускаю php simplepush.php
затем php feedback.php
, я получаю отзыв с идентификатором своего устройства,Мое приложение все еще в iPad, значит ли это, что идентификатор моего устройства неверный?
[root@ip-xx-xx-xx-xx SimplePush]# php feedback.php
Connected to APNS
array(3) {
["timestamp"]=>
int(1326962028)
["length"]=>
int(32)
["devtoken"]=>
string(64) "3cb086129392996b5332d2fc5adce03d994f8959d7a2ac38de7bed52c8e0778e"
}
Спасибо
РЕДАКТИРОВАТЬ
После долгих попытоки переделывая все шаги, написанные Matthijs Hollemans , я наконец-то начал работать.Таким образом, проблема заключается в неправильном сгенерированном файле PEM ... хмм