iOSとAndroidのアイコンバッジ、同じように見えて仕組みは大きく異なる

iPhoneやiPadのアプリでは、新着メールや情報更新などを知らせる手段としてアイコンの右上に数字を表示する「アイコンバッジ」が多く利用されます。Androidにおいても、Facebookアプリなどアイコンバッジが表示される場合がありますが、Androidのアイコンバッジは機種によって同じアプリでも表示されたりされなかったりと、今ひとつ統一感がありません。

今回の連載「スマホのちょっと深いとこ」では、Androidのアイコンバッジに関わる裏事情をちょっとだけ紹介します。あなたの機種でバッジが表示されないわけもわかるかも?

【Androidのアイコンバッジ表示はOSではなく「ホームアプリ」の機能】

iPhoneやiPadなどで利用されるiOSでは、プッシュ通知やアプリ自身からの処理でバッジの表示を制御できるようになっています。これらはすべてOSの機能として統一的に提供されているため、機種によって表示されたりされなかったりといったことは基本的にありません。

一方Androidにおいてバッジを表示するのは、アプリアイコンをホーム画面に表示する、いわゆる「ホームアプリ」の機能となります。バッジが表示されるかどうかは、ホームアプリがバッジの表示に対応しているかどうかに依存することになります

【ホームアプリによりバラバラのバッジ表示方法が開発者を苦しめる】

ホームアプリにバッジを表示させる方法も統一されていません。簡単な例を示します。サムスン端末にインストールされているTouchWizと呼ばれるホームアプリにおいて、バッジを表示させるためには以下のような処理を実行します。「プログラムなんて分からない」という方は、最低限2行目の「3」がバッジに表示されるということだけ把握できれば大丈夫です。

Intent intent 
 = new Intent("android.intent.action.BADGE_COUNT_UPDATE"); 
intent.putExtra("badge_count", 3); 
intent.putExtra("badge_count_package_name",getPackageName()); 
intent.putExtra("badge_count_class_name",getPackageName() 
 + ".MainActivity"); 
sendBroadcast(intent);

一方で、Google Playで公開されているホームアプリであるApex Launcherの場合、以下のような処理となります(*1)(*2)。

Intent intent 
 = new Intent("com.anddoes.launcher.COUNTER_CHANGED"); 
intent.putExtra("count", 3); 
intent.putExtra("package", getPackageName()); 
intent.putExtra("class", getPackageName() 
 + ".MainActivity"); 
sendBroadcast(intent);

*1: バッジを表示させるためには有料版(Apex Launcher Pro)が必要となります。

*2: (開発者向け補足)正確にはこの実装のほかに、バッジを表示させるパーミッション(com.anddoes.launcher.permission.UPDATE_COUNT)の設定が必要となります。

プログラムがわからない方でも「同じ処理なのに書いている内容が違う」ことは読み取れるのではないでしょうか。もしTouchWizとApex Launcherの両方でバッジを表示させようとすると、上記の処理を両方記述する必要があります。今回は2種類だけを紹介しましたが、基本的にはホームアプリの数だけ別個に処理を記述する必要があるわけです。

android_badge_001
Apex Launcherに対応した方法でアイコンバッジを表示させた例

このような状況ですので、アプリによっては「あるホームアプリではアイコンバッジが表示されるが、別のホームアプリでは表示されない」という事態が起こります。例えばFacebookアプリの場合、TouchWizでは未読数などのバッジが表示されますが、Apex Launcherではバッジが表示されません。

android_badge_002
FacebookアプリはTouchWiz(写真=左)でバッジが表示されるが、
Apex Launcher(写真=右)では表示されない

【統一的なバッジ表示方法の提供が望まれる】

現状でGoogleはAndroidに対して統一的なアイコンバッジ表示方法を提供していません。そのため各ホームアプリが独自にアイコンバッジ表示を実現しており、その方法はバラバラです。アイコンバッジよりはステータスバーの通知を活用してほしいということかもしれませんが、iOSと同じ使い勝手を提供できるというアイコンバッジの有用性を考えれば、やはり統一的な表示方法の提供が望まれるところです。


■関連リンク
エスマックス(S-MAX)
エスマックス(S-MAX) smaxjp on Twitter
S-MAX - Facebookページ
連載『吉川英一の「スマホのちょっと深いとこ」』記事一覧 - S-MAX
今日の気分はバリいくつ?