加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

通过PHP广播推送通知

发布时间:2020-12-13 16:50:28 所属栏目:PHP教程 来源:网络整理
导读:我有一个推送通知令牌列表(大约10k)为我的应用程序,我没有跟踪活动/删除令牌的状态.将新用户添加到系统时,会添加其推送令牌 (一个设备可以容纳一个推送通知令牌,以防令牌被更改 – 不是在我的应用程序生命周期的最后6个月内发生 – 它是使用新令牌修改的) 为
我有一个推送通知令牌列表(大约10k)为我的应用程序,我没有跟踪活动/删除令牌的状态.将新用户添加到系统时,会添加其推送令牌

(一个设备可以容纳一个推送通知令牌,以防令牌被更改 – 不是在我的应用程序生命周期的最后6个月内发生 – 它是使用新令牌修改的)

为了向单个用户发送推送通知,我使用以下php脚本

<?php
// connecting to sql
sql_connect();
// get user token from sql
$token = sql_gettoken();

// Put your device token here (without spaces):
$deviceToken = $token;
// Put your private key's passphrase here:
$passphrase = 'my_passphrase';

// Put your alert message here:
if ($_GET["message"]) $message = $_GET["message"];
else $message = 'This is a default message in case no message is defined';

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
stream_context_set_option($ctx,'ssl','local_cert','production_cerfiticate.pem');
stream_context_set_option($ctx,'passphrase',$passphrase);

// 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;

// 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));

if (!$result)
    echo 'Message not delivered' . PHP_EOL;
else
    echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);
?>

我相信如果我保持$fp(连接到APNS服务器)打开,我可以发送多个推送通知(我不确定?).但我已经读过,如果令牌处于离线/删除应用程序,那么连接将被苹果方关闭,这意味着推送通知周期将失败.

有关将此单推送通知脚本转换为广播通知的提示吗?我很沮丧地测试这个,因为第一次测试将是一个直播,我只有1次射击.

编辑:我错过了最重要的部分,如果我只是在所有设备令牌的循环中调用此PHP脚本,这意味着它将尝试为已删除的应用程序和活动调用此函数,Apple将阻止/停用/禁用我的证书或者我发送推送通知的能力?

>对于寻找广播的其他人来说,似乎Apple对推送通知没有任何限制.

干杯

解决方法

您应该保持连接打开并使用相同的连接发送通知,只要它保持打开状态.这就是Apple说你应该做的.

如果从设备卸载应用程序,则在发送到该设备时不会关闭连接.只有当令牌永远不会对当前环境有效时(通常在您尝试将沙盒设备令牌发送到生产环境时,或者反之亦然),或者如果消息有其他错误(例如有效负载太长),它将被关闭).

当您向卸载应用程序的设备发送通知时,APNS会发现该设备已卸载该应用程序,之后,当您调用反馈服务时,您将获得该设备令牌. Apple要求您定期调用反馈服务,并从数据库中删除它返回的设备.如果您不使用反馈服务并且不断向多次卸载应用程序的设备发送通知,Apple可能会阻止您.

我建议你阅读Troubleshooting Push Notifications,特别是推送通知吞吐量和错误检查部分.这非常有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读