Я использую этот код в php …
function pushnotificationios( $deviceToken, $message, $badges){ $passphrase = "12345"; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $_SERVER['DOCUMENT_ROOT'].'/include/ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client( "ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); $body['aps'] = array( //'badge' => $badges, 'badge' => "+1", 'alert' => $message['message'], 'sound' => 'default', 'content-available' => '1' ); $body['msg'] =$message; $payload = json_encode($body); $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $msg, strlen($msg)); //echo "<pre>"; print_r($result); fclose($fp); return $result; }
.pem и их пароль верны. но когда я ударяю эту функцию, тогда только в режиме производства он возвращает мне false;
$result = pushnotificationios( $deviceToken, $message, $badges); echo "<pre>"; print_r($result);
И для ответа требуется слишком много времени.
В настоящее время я не нахожу никакого решения .. мой api собирается яблоко, и мои уведомления не работают. Интересным является то, что приложение для отладки и целое приложение основано на уведомлениях. Это плохой день для меня.
Пожалуйста, помогите, если что-то случится хорошо для меня для приложения.
Производство:
SSL: //gateway.push.apple.com: 2195
,
Разработка:
SSL: //gateway.sandbox.push.apple.com: 2195
В моем приложении. Я непосредственно получаю 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); }
Если вы все еще не можете отправить уведомление, проверьте это уведомление об устранении неполадок
редактировать
Я смотрел на ваш push push push, некоторое время назад, тогда я заметил, что ваш 'badge' => "+1"
Вы не можете увеличить значок таким образом.
Единственный вариант – управлять им в своем приложении и использовать базу данных для отслеживания.
и, возможно, это вызывает проблему .. и badge
должен быть числом, здесь: Таблица 3-1
А также проверить, что это обсуждение может помочь вам.
В режиме производства не используйте URL песочницы
$fp = stream_socket_client( "ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
Yup .. наконец, я получил решение.
Проблема в порте. Я использую сервер Bluehost. Bluehost блокирует порт, который используется push-уведомлением. Теперь я изменил свой сервер и уведомления, работающие на меня. Спасибо всем