gpt4 book ai didi

iphone - 阿拉伯字符 ios 中推送通知消息的最大长度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:25 27 4
gpt4 key购买 nike

推送通知的最大字符数是256个字节,当我尝试以阿拉伯编码发送消息时最大长度小于50个字符,

我使用这个 php 文件:

    <?php

// Put your device token here (without spaces):
$deviceToken = '2ca0c25ed7acea73e19c9d9193e57a12c1817ed48ddf8f44baea42e68a51563c';

// Put your private key's passphrase here:
$passphrase = 'pushp12';

// Put your alert message here:
$message = 'الاشعار الاول للتطبيق مرحبا بكم واهلا وسهلا';

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

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.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;

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

?>

APNS拒绝上面的消息因为太长了,否则英文字符的最大长度是正常的

请问我该怎么办!

最佳答案

PHP json_encode() 函数对阿拉伯字符使用 Unicode 转义序列,这样 $payload 就变成了:

{"aps":{"alert":"\u0627\u0644 ... \u0644\u0627","sound":"default"}}

总长度为266个字符。这 有效(比较 http://json.org ),但是对于 APNS 来说,有效载荷太长了。每个阿拉伯字符使用 6 个字节而不是 2 个 UTF-8 字节。

根据 https://stackoverflow.com/a/10835469/1187415 , 你可以使用

$payload = json_encode($body, JSON_UNESCAPED_UNICODE);

在 PHP 5.4.0 或更高版本中关闭 Unicode 转义。我无法测试这个,因为我的 PHP 版本较旧。

唯一的替代方法是不使用 json_encode() 并创建JSON 字符串“手动”。


更新:Apple 增加了允许的最大负载大小。来自 The Remote Notification Payload本地和远程通知编程指南中:

When using the HTTP/2 provider API, maximum payload size is 4096 bytes. Using the legacy binary interface, maximum payload size is 2048 bytes.

这使得超过 300 个阿拉伯字符的 JSON 编码成为可能“旧版界面”以及基于新的 HTTP/2 界面的更多内容。

关于iphone - 阿拉伯字符 ios 中推送通知消息的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com