我正在尝试使用我在互联网上找到的这个PHP脚本向iOS应用程序发送通知 . 我可以为$ passphrase提供什么 Value ,以及我能在哪里找到它?对于以下值的相同:
-
stream_context_set_option($ ctx,'ssl','local_cert','ck.pem');
-
stream_context_set_option($ ctx,'ssl','passphrase',self :: $ passphrase);
class PushNotifications {
private static $passphrase = 'joashp';
public function __construct() {
exit('Init function is not allowed');
}
public static function iOS($data, $devicetoken) {
$deviceToken = $devicetoken;
$ctx = stream_context_create();
// ck.pem is your certificate file
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$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);
// Create the payload body
$body['aps'] = array(
'alert' => array(
'title' => $data['mtitle'],
'body' => $data['mdesc'],
),
'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));
// Close the connection to the server
fclose($fp);
if (!$result)
return 'Message not delivered' . PHP_EOL;
else
return 'Message successfully delivered' . PHP_EOL;
}
// Curl
private function useCurl(&$model, $url, $headers, $fields = null) {
// Open connection
$ch = curl_init();
if ($url) {
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if ($fields) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
// Execute post
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
// Close connection
curl_close($ch);
return $result;
}
}
}
$msg_payload = array (
'mtitle' => 'Test push notification title',
'mdesc' => 'Test push notification body',
);
$deviceToken = 'FE66489F304DC75B8D6E8200DFF8A456E8DAEACEC428B427E9518741C92C6660';
PushNotifications::iOS($msg_payload, $deviceToken);
1 回答
$passphrase 是证书文件 ck.pem 文件的密码 . 您应该询问生成该pem文件的人是否使用密码短语 .
在许多情况下,密码可以为空 . 在这种情况下,您可能需要提供一个空字符串 .
如果您不知道 pem 文件是什么 - 那么您可以阅读一些指南,例如https://developers.connectycube.com/ios/how-to-create-apns-certificate
本指南介绍如何生成可用于发送Apple推送通知的 p12 证书文件 . 然后,您可以使用以下命令从 p12 获取 pem 文件:https://gist.github.com/shahdhiren/9ca059ac0762f7ef0fcf71a79ed5b022