php - 如何使用 PHP [Swift,Php] 向 swift 应用程序发送推送通知
问题描述
我正在尝试使用我在 Internet 上找到的这个 php 脚本向 iOS 应用程序发送通知。我对 $passphrase 有什么价值,在哪里可以找到它?相同的值:
- stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
- stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase);
类推送通知 { 私人静态 $passphrase = 'joashp'; 公共函数 __construct() { exit('不允许初始化函数'); } 公共静态函数 iOS($data, $devicetoken) { $设备令牌 = $设备令牌; $ctx = stream_context_create(); // ck.pem 是你的证书文件 stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase); // 打开与 APNS 服务器的连接 $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 如果 (!$fp) exit("连接失败:$err $errstr" . PHP_EOL); // 创建负载体 $body['aps'] = 数组( '警报' => 数组( 'title' => $data['mtitle'], 'body' => $data['mdesc'], ), '声音' => '默认' ); // 将有效负载编码为 JSON $payload = json_encode($body); // 构建二进制通知 $msg = chr(0) 。包('n',32)。包('H*',$deviceToken)。包('n',strlen($payload))。$有效载荷; // 发送到服务器 $result = fwrite($fp, $msg, strlen($msg)); // 关闭与服务器的连接 fclose($fp); 如果(!$结果) 返回 '消息未送达' 。PHP_EOL; 别的 返回 '消息已成功发送' 。PHP_EOL; } // 卷曲 私有函数 useCurl(&$model, $url, $headers, $fields = null) { // 打开连接 $ch = curl_init(); 如果($url){ // 设置 url,POST 变量的数量,POST 数据 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 暂时禁用 SSL 证书支持 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 如果($字段){ curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); } // 执行发布 $result = curl_exec($ch); if ($result === FALSE) { die('Curl 失败:' . curl_error($ch)); } // 关闭连接 curl_close($ch); 返回$结果; } } } $msg_payload = 数组( 'mtitle' => '测试推送通知标题', 'mdesc' => '测试推送通知正文', ); $deviceToken = 'FE66489F304DC75B8D6E8200DFF8A456E8DAEACEC428B427E9518741C92C6660'; PushNotifications::iOS($msg_payload, $deviceToken);
解决方案
$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
推荐阅读
- dart - Dart:难以理解的匿名函数
- r - 当单元格与特定字符串匹配时,如何替换单元格的内容?
- azure-web-app-service - 无法使用 docker-maven-plugin 推送到 Azure 注册表
- javascript - 为什么我的 Express 服务器对 index.html 以外的所有文件都响应 404?
- python - Apache2 + mod_wsgi + 子域的多个虚拟主机
- mysql - xtrabackup 不会在 xtrabackup_binlog_info 中写入 gtid 信息
- node.js - 当我在我的 express nodejs 应用程序中更改路由时,为什么我的样式会被拒绝?
- regex - 花式正则表达式箱多个匹配项
- reactjs - 如何使用 React 处理多平台应用程序
- unity3d - 尝试打开任何 Unity 项目时卡在 Unity 3D 包管理器错误