我想通过网络服务器发送通知消息。在服务器中,邮件已成功发送,但它不会出现在设备中。但是,当我使用来自EASY APNs Provider的相同证书密钥发送消息时,消息确实显示在设备中。这种情况发生在开发模式中。我还没有应用到生产模式。
但它无法从网络服务器
运行我在此article
之后创建了.pem文件使用命令
openssl pkcs12 -in pushcert.p12 -out pushcert.pem -nodes -clcerts
我的PHP代码
if((include 'config.inc.php') == TRUE) {
WriteDebug('Functions.php include: OK');
}
try {
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $IOS_pem);
stream_context_set_option($ctx, 'ssl', 'passphrase', $config_passphrase);
$time_start = microtime(true);
// 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;
$text = "";
foreach($body['aps'] as $key => $value){
//WriteDebugLog("Body Key = " . $key . " & Value= " . $value, DEBUG);
$text .="[' " . $key . "',".$value."]";
}
WriteDebug("$text to $deviceToken");
// 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($pushArray)) . $pushArray;
WriteDebug('REQ '.$msg);
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
//Get response from apple
stream_set_timeout($fp, 5);
$resFromApple = fread($fp, 2000);
//Getting the timeout status
$info = stream_get_meta_data($fp);
fclose($fp);
//Track time taken
$time_end = microtime(true);
if ($info['timed_out']) {
echo 'Connection timed out!';
WriteDebug('RSP Timed out!');
} else {
echo $resFromApple;
WriteDebug('RSP '.$resFromApple);
}
if (!$result) {
WriteDebug('Message failed delivered, Push Unsuccessfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000);
echo 'Message failed delivered, Push Unsuccessfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000;
} else {
WriteDebug('Message successfully delivered, Push successfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000);
echo'Message successfully delivered, Push successfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000;
}
// Close the connection to the server
fclose($fp);
} catch (Exception $exp) {
//WriteDebug("Error connection");
fwrite($lfh, $exp);
WriteErr($exp);
return 9;
}
config.inc.php 中的
$IOS_pem='/apraise/transformers/fc2apple/phpscripts/pushcert2july.pem';
$SSL_URL='ssl://gateway.sandbox.push.apple.com:2195';
$config_passphrase = 'apraise123';
LOG FIle
2017-07-03 17:28:50.011 DBG receivers: 120f49ce167956785b5d1d6552510feb7d8587610b2b1496d2a1fae951b34969sharePush: {"aps" : {"alert" : {"title" : "Add Contact","body" : "Setting test apn"},"sound" : "default","badge" : 1}}
2017-07-03 17:28:50.011 DBG Functions.php include: OK
2017-07-03 17:28:50.647 DBG to 120f49ce167956785b5d1d6552510feb7d8587610b2b1496d2a1fae951b34969
2017-07-03 17:28:50.647 DBG REQ {"aps" : {"alert" : {"title" : "Add Contact","body" : "Setting test apn"},"sound" : "default","badge" : 1}}
2017-07-03 17:28:50.648 DBG $result: 144
2017-07-03 17:28:50.648 DBG RSP
2017-07-03 17:28:50.648 DBG Message successfully delivered, Push successfully,TT: 640
我已按照此article创建其他文件。
任何夸张?
提前致谢。
答案 0 :(得分:1)
您正在使用生产
的网关ssl://gateway.push.apple.com:2195
您必须使用开发的网关。
ssl://gateway.sandbox.push.apple.com:2195
同时检查我的PHP文件。
<?php
$deviceToken = '163e00bf5a7fe5298782988a4dcdecddac0dfe2fecf3723b4354076adasdasdfasdf'; // Development
// Put your private key's passphrase here:
$passphrase = 'M@@123';
// Put your alert message here:
$message = 'My first push notification!';
$sound = 'Default';
$badge=12;
////////////////////////////////////////////////////////////////////////////////
echo 'Connection Start';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.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;
$body['aps'] = array('alert' => 'This is the alert text', 'badge' => $badge, 'sound' => 'default');
$body['PushKey'] = array('Type' => 1, 'ID' => 392);
echo json_encode($body);
// 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);