Riz*_*eem 5 php apple-push-notifications laravel
我正在处理推送通知,我想使用php向IOS发送聊天推送通知.但是当我向apns(Apple推送通知服务器)发送5个推送通知时,apns会丢弃旧的推送通知,并在设备上线时仅向设备发送最新的推送通知.
我在互联网上搜索解决方案,我找到的一个解决方案是设置通知到期时间.所以我实际解决了我的实际问题.
有什么方法可以解决我的问题.建议任何有用的解决方案或参考站点.
以下是我的示例代码
public function sendIOSNotification($tokens, $data, $envoirement = 'production') {
try {
$payload = json_encode($this->setIosNotificationDataParameters($data));
$deviceTokens = str_replace(array(' ', '<', '>'), '', $tokens['ios']);
// FUNCTION NOTIFICATIONS???
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', config('push-notification.appNameIOS.certificate_' . $envoirement));
stream_context_set_option($ctx, 'ssl', 'passphrase', 'push');
//send notification
$fp = stream_socket_client(
config('push-notification.appNameIOS.ios_push_notification_' . $envoirement), $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx
);
$res = [];
foreach ($deviceTokens as $deviceToken) {
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken)
. pack('n', strlen($payload)) . $payload
.pack('N', time()).pack('N', time() + 86400);
$res = json_encode($result);
}
fclose($fp);
\Log::info("=== IOS Notification Send Successfully ===");
return true;
} catch (\Exception $ex) {
$messages = $ex->getMessage() . '::' . $ex->getFile() . '( ' . $ex->getLine() . ' )';
\Log::ifno("===Push Notificaion Exception===");
\Log::ifno($messages);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
你无法根据文档做你想做的事。这是记录的行为:
服务质量、存储转发和合并通知 Apple 推送通知服务包括执行存储转发功能的服务质量 (QoS) 组件。如果 APNs 尝试传送通知而目标设备处于离线状态,APNs 会在有限的时间内存储通知,并在设备再次可用时传送通知。该组件仅存储每个设备和每个应用程序的最新通知。如果设备离线,发送针对该设备的通知请求会导致先前的请求被丢弃。如果设备长时间处于离线状态,则 APN 中存储的所有通知都会被丢弃。来源:苹果推送通知文档
这意味着每个应用程序的每个用户只有一个离线通知。
您应该以不同的方式构建您的应用程序。首先,对于聊天应用程序,您不能期望在设备重新上线时发送数千个推送通知。如果您想在应用程序中显示旧消息,则必须为您的应用程序实现一些额外的机制来检索旧消息
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |