Intereting Posts
Создание JSON в PHP с использованием базы данных Переменная сеанса работает на локальном сервере, но не на сервере хостинга Как удалить автоматическое форматирование абзаца для страниц ТОЛЬКО, а не сообщений (WordPress) Ошибка переименования PHP для имени файла с помощью строки utf-8 arabic charset PHP sprintf escaping% Как безопасно хранить файлы cookie, содержащие конфиденциальные данные, в PHP? Смещение 0 недействительно для индекса результата MySQL 64 (или данные запроса не загружены) Получает первый URL-адрес изображения из сообщения? Предотвратить показ строки исходного кода Как добавить пробел в строку заглавными буквами, но сохранить непрерывные капиталы вместе с помощью PHP и Regex? Пытаться анализировать только изображения из RSS-ленты Получение списка файлов и папок с удаленного сервера в PHP HTML-формы. Как добавить несколько кнопок, которые передают разные значения? MySQL SHA () не работает Объединить два массива и упорядочить этот новый массив по дате

iOS push-уведомление не работает с использованием PHP

Я пытаюсь реализовать push-уведомление в iOS на PHP с использованием библиотеки APNS. Вот мой код:

<?php // Put your device token here (without spaces): $deviceToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Put your private key's passphrase here: $passphrase = 'XXXXXX'; // Put your alert message here: $message = 'My first push notification!'; //////////////////////////////////////////////////////////////////////////////// $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'Certificates.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server $fp = stream_socket_client( 'ssl://gateway.sandbox.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));print_r($result); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL; // Close the connection to the server fclose($fp); ?> 

Он показывает сообщение успешно, но в iOS он не показывает уведомление.

 2015-07-28 08:32:39 Connected to APNS result = 97 2015-07-28 08:32:39 Message successfully delivered 2015-07-28 08:32:39 Connection closed to APNS 

Почему это происходит? Я что-то пропустил?

Существует две потенциальные причины:

  1. Ваше приложение находится на foreground
  2. Недопустимый токен вашего устройства.

В моем приложении. Я непосредственно получаю deviceToken который находится в NSData

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *deviceTokenString = [NSString stringWithFormat:@"%@", deviceToken]; // this is producing something like: // <xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb> // // and i am directly saving that to my servers database 

Вот что я имею на своем сервере.

 $from_database = "<xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb>"; // this removes the '<' and '>' to make the device token valid // $token_string = substr($from_database, 1, -1); $token_array[] = $token_string; // you can also add multiple 'token_string' to the 'token_array' for push notification broadcasting, i am currently doing that and it is working properly. ... public function __push_notification($message_input, $token_array) { $message = stripslashes($message_input); $passphrase = 'xxxxxx'; $cert = realpath('xxx.pem'); $payload = '{ "aps" : { "alert" : "'.$message.'", "badge" : 1, "sound" : "bingbong.aiff" } }'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $cert); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) { // echo "Failed to connect $err $errstr <br>"; return; } else // echo "Post notification sent<br>"; $dev_array = array(); $dev_array = $token_array; foreach ($dev_array as $device_token) { $msg = chr(0) . pack("n", 32) . pack('H*', str_replace(' ', '', $device_token)) . pack("n", strlen($payload)) . $payload; // echo "sending message :" . $payload . "n"; fwrite($fp, $msg); } fclose($fp); } 

Также проверьте это, возможно, будет полезно: Облицовка проблем в ios push notification php code

его ошибка связана с ios 9, если так прекратить использование кода в объекте C и использовать его быстро, поскольку он имеет ошибку при создании объектного токена – C для ios9. Я рекомендую срочно изменить ваш код. Также через эту мысль был сервер, когда запланированные изменения ios для быстрого были решены, и мой php был почти равным. Забота:

  $ msg = chr (0). pack ('N', 32). pack (H * ','. '$deviceToken [0].'). pack ('N', strlen ($ payload)). $ payload;