西里尔字母的 iOS 推送通知

Posted

技术标签:

【中文标题】西里尔字母的 iOS 推送通知【英文标题】:iOS Push notifications in cyrillic 【发布时间】:2014-04-02 21:14:21 【问题描述】:

你好, 我通过这个 php sn-p 发送推送通知:

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

它在拉丁语中运行良好,但是,当我尝试发送俄语通知时,尽管日志确认正确交付,但什么也没收到。

通知 fbartolom@gmail.com 语言 ru 2014 年 3 月 1 日星期六 08:15:59 PM 通知 246e2e720c0f307ef3887922d72b6b6886fa19b44b6dbae7cda8913fe149958e con Ваше активное бронирование было прервана пользователем。 dopo***:/var/www/html/php/push/taxi/distribution/ck.pem deviceToken:246e2e720c0f307ef3887922d72b6b6886fa19b44b6dbae7cda8913fe149958eConnected 到 APNS invio 有效载荷"aps":"alert":"\u0412\u0430\u0448\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c.","sound":"default"消息 成功交付 我阅读了有关数据包长度的问题,但在这两个阶段它都会在发送消息时计算它,因此它应该是正确的长度。 知道如何解决它吗?

【问题讨论】:

您是否尝试过只发送一到两个西里尔字符? 实际上出于某种奇怪的原因,有时通知会到达,但当它发生时,它只是由一个序列问号和空格组成,就像在 Apple 的 UTF8 转换丢失一样。我会尝试只发布几个字符,看看它是否会改变。 实际上只是单词Ваше通过了,可能是转换时的长度问题还是什么?在那种情况下,有什么最大的经验吗? 【参考方案1】:

您的代码看起来不错,我倾向于解决“大小”问题。 尝试在您的代码中使用mb_strlen 而不是 strlen,因为 strlen 无法准确计算多字节字符的长度。

【讨论】:

谢谢,我这样做了: // 构建二进制通知 $msg = chr(0) 。包('n',32)。包('H*',$deviceToken)。包('n',mb_strlen($payload))。 $有效载荷; // 发送到服务器 $result = fwrite($fp, $msg, mb_strlen($msg));但仍然没有办法,完全没有消息:这是有效负载的一部分:payload“aps”:“alert”:“\u041a\u043e\u043c\u043f\u043b\u0438\u043c\u0435\u043d\u0442\ u044b!\u0417\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0442\u0430\u043a\u0441\u0438 \u043f.","sound":"default"消息发送成功;确认正确的交付。 实际上我将字符集设置为 utf-8,现在它可以工作了,直到一定长度。这是我可以成功交付的最长字符串:Комплименты!Заказанное такси принято бр。如果我再添加一个字符,则什么也没有。我怀疑每个西里尔字符比拉丁语言占用更多的字节,因此超过一定的总长度,实际占用超过了分配,但奇怪的是没有返回错误。有人可以证实这种感觉吗?这也打开了一罐带有中文等语言的蠕虫。 大多数非拉丁字母每个会消耗多达 4 个字节(明显多于拉丁字母),这确实意味着有效负载长度会更短。只要有这个 256 字节的限制,你就有点卡住了 :(【参考方案2】:

我认为最佳解决方案是发送英文字符串并在应用程序中本地化它们。唯一的缺点是每次要添加新的通知类型时都需要提交更新。

【讨论】:

以上是关于西里尔字母的 iOS 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送

ios推送通知之ios推送证书的申请和使用配置

Xamarin iOS - 推送通知 - 区分点击的推送通知与到达

ios推送通知之ios证书的申请和使用配置

iOS推送通知和远程通知的区别?

我们可以控制推送通知的“允许推送通知”对话框 ios 吗?