質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

Q&A

2回答

4831閲覧

【Objective-C】 push通知の文字数制限について

katsuo77

総合スコア28

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

0グッド

0クリップ

投稿2015/11/03 05:12

いつもお世話になっています。

現在iOSアプリにpush通知機能の実装をしているのですが、その中で一点詰まってしまうポイントがありました。
お力を貸していただけると幸いです。

今回まずは初めてということもあり、ApnsPHPというライブラリのサンプルコードをそのまま少しいじっって、以下のようなコードを実装しました。

<?php // Adjust to your timezone date_default_timezone_set('Europe/Rome'); // Report all PHP errors error_reporting(-1); // Using Autoload all classes are loaded on-demand require_once 'ApnsPHP/Autoload.php'; // Instanciate a new ApnsPHP_Push object $push = new ApnsPHP_Push( ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, 'server_certificates_sandbox.pem' ); // Set the Root Certificate Autority to verify the Apple remote peer $push->setRootCertificationAuthority('entrust_root_certification_authority.pem'); // Connect to the Apple Push Notification Service $push->connect(); // Instantiate a new Message with a single recipient $message = new ApnsPHP_Message('【デバイストークン】'); $message->setCustomIdentifier("Message-Badge-3"); $message->setText('【送信テキスト】'); $message->setSound(); $message->setExpiry(30); $push->add($message); // Send all messages in the message queue $push->send(); // Disconnect from the Apple Push Notification Service $push->disconnect(); // Examine the error message container $aErrorQueue = $push->getErrors(); if (!empty($aErrorQueue)) { var_dump($aErrorQueue); } ?>

実際に動かしてみると確かに通知は送られてくるのですが、以下のような問題が発生してしまいました。

・表示される文字数が少ない
調べてみるとpush通知を送信した際にデバイスのロック画面で表示できるテキスト量はだいたい全角58字程度とのことなのですが、全角25字程度のテキストしか表示されません。
それ以上のテキストを送ろうとすると、むしろ25字よりも短くなって表示されてしまいます。

・超過した分が「…」で省略されない
表示限界を超えたテキストについては「…」で省略される仕様になっているかと思いますが、これが表示されません。
文末はぷっつりと切れてしまっています。

またいくつかテストしてみたところ、上記の症状が出るのは日本語でのテキストを送信した際に限られるようでした。(英語では問題なく表示されました)

どのような原因・対策が考えられるでしょうか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

メッセージはapns-php内でjson_encodeされてる可能性があります。
そしてメッセージの長さはiOSのバージョンにもよりますが、sound、expireなどの設定項目が増えると表示可能メッセージの長さは減ります。不要な設定項目はあえて設定しないほうか良いかと

投稿2016/03/02 09:05

JinwonKim

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそもApnsPHPって、日本語(UTF-8)に対応していますか?
なんとなく、UTF-8のマルチバイト文字に対応してなくて、
文字数のカウントに問題があるような気がします。
(検証したわけではありません。)

ApnsPHPは、push通知の仕組みを勉強するのによい材料だと思いますが、
本格的に使うなら、端末から送付されたデバイストークンを
データベースに保存し、通知を行う時は、データベースから通知先の
デバイストークンを取得する処理を別途作りこむ必要があるはずです。
(現在は、その部分を手動でハードコーディングしていますよね。)

なので、ApnsPHPは仕組みの勉強に使うだけとし、
push通知の仕組みがわかったら、実用的に使うには
http://blog.mb.cloud.nifty.com/?p=2167
で紹介されているような無料のpush通知サービスを利用することを
私としてはお勧めします。
そういうサービスを使えばちゃんと日本語で通知を送れます。

投稿2015/11/03 14:41

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katsuo77

2015/11/04 21:28

コメントありがとうございます。 返信が遅れ申し訳ありません。 UTF-8にそもそも対応していないのはあるかもしれません。 調べてみたいと思います。 トークンやメッセージの部分は実際にはデータベースから取得するつもりで、今回はあくまでテストとして適当な値を埋め込んで使用していました。 ですがご紹介いただいたサービスの使い勝手も良さそうなので参考にさせていただきたいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問