我们通过PHP/Java后端系统发送iOS/Apple设备推送通知。
现在我们面临的问题是,Java的多字节字符数与PHP不同。
例如,下面是我们必须发送的阿拉伯语文本,一个来自Java后端,另一个来自基于PHP的后端系统(PHP和Java后端-两者都不同,彼此没有关系):
يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت
现在,当我们检查字符串长度时:
Java:
length 106
byte 194
PHP:
length 369
byte 547
现在苹果只允许Payload的256 bytes
,所以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));
有人面对过这个问题吗?有什么已知的解决方案吗?
请告知。
暂时有一个技巧[但不确定这是永久性的解决方案]:在未来的中对其他人来说可能很方便
在行代码下方评论
//$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
就像一个符咒!!
非常有趣:-)
我真的在寻找一个如此棒的答案有一段时间了,而你拯救了这一天。。。我想尽管徽章已经不起作用了!!!它对我来说是这样的:
$badge = 3;
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';
我通常让服务器端计算下一个徽章计数。