私はこれを非常に長い間デバッグしようとしてきましたが、明らかに自分が何をしているのかわからないので、誰かが助けてくれることを願っています。私は何を尋ねるべきかさえわかりませんが、ここにそれが行きます:
Appleプッシュ通知を送信しようとしていますが、ペイロードサイズの制限は256バイトです。それで、いくつかのオーバーヘッドのものを差し引くと、メインメッセージコンテンツの約100英語の文字が残ります。
したがって、メッセージが最大値よりも長い場合は、切り捨てます。
MAX_PUSH_LENGTH = 100
body = (body[:MAX_PUSH_LENGTH]) if len(body) > MAX_PUSH_LENGTH else body
だから、それは素晴らしいことであり、私が(英語で)どんなに長いメッセージを持っていても、プッシュ通知は正常に送信されます。しかし、今私はアラビア語の文字列を持っています:
str = "هيك بنكون
عيش بجنون تون تون تون هيك بنكون
عيش بجنون تون تون تون
أوكي أ"
>>> print len(str)
109
したがって、切り捨てる必要があります。しかし、私は常に無効なペイロードサイズエラーを受け取ります!不思議なことに、MAX_PUSH_LENGTHのしきい値を下げ続けて、成功するために何が必要かを確認しました。プッシュ通知が成功するのは、制限を約60に設定するまでです。
これが英語以外の言語のバイトサイズと関係があるかどうかは正確にはわかりません。英語の文字は1バイトかかると理解していますが、アラビア語の文字は2バイトかかりますか?これはそれと関係があるのでしょうか?
また、文字列は送信される前にJSONでエンコードされているため、次のように\u0647\u064a\u0643 \u0628\u0646\u0643\u0648\u0646 \n\u0639\u064a\u0634 ...
なります。生の文字列として解釈され、u0647だけが5バイトである可能性がありますか?
私はここで何をすべきですか?明らかなエラーはありますか、それとも正しい質問をしていませんか?