4

我们通过 PHP / Java 后端系统发送 iOS / Apple 设备推送通知。

现在我们面临的问题是,Java 的多字节字符计数与 PHP 不同。

例如,下面是我们必须发送的阿拉伯语文本,一个来自 Java 后端,一个来自基于 PHP 的后端系统(PHP 和 Java 后端 - 两者不同,彼此没有关系):

يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت

现在,当我们检查字符串长度时:

Java:
length 106 
byte 194

PHP:
length 369
byte 547

现在 Apple 只允许256 bytesPayload,因此 Java 后端能够完整地发送上述阿拉伯文本,而 PHP 中不允许这样做。我们需要减少 PHP 的文本。

以下是我的 PHP 代码:

// PHP Interpretation:
echo $str = 'يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت';

echo '<br><br>';

$payload['aps'] = array('alert' => $str, 'sound' => 'default');
$payload = json_encode($payload);
echo $payload;
echo strlen($payload);

echo '<br><br>';

echo '<br><br>';
echo utf8_encode($str);
echo '<br><br>';
echo json_encode($str);
echo '<br><br>';
echo strlen(json_encode($str));
echo '<br>';
echo strlen(utf8_encode($str));
echo '<br>';
echo mb_strlen(json_encode($str));

有人遇到过这个问题吗?任何已知的解决方案?

请指教。

4

2 回答 2

5

暂时得到一个技巧[不确定这是永久解决方案]:将来可能对其他人有用

在下面的代码行注释

//$payload = json_encode($body);

并直接附加JSON format to Payload variable:

// static sound and badge commands
$payload = '{"aps":{"alert":"'.$message.'","sound":"default","badge":"+1"}}';

// dynamic sound and badge commands
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';

在这里,$message将是我的Arabic string,它WORKS就像一个魅力!

于 2013-07-22T09:05:07.250 回答
0

很有意思 :-)

一段时间以来,我真的一直在寻找这样一个很棒的答案,而你拯救了这一天......我想虽然徽章不再起作用了!它像这样与我一起工作:

$badge = 3;
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';

我通常让服务器端计算下一个徽章计数。

于 2013-08-05T10:05:01.710 回答