#DroidKaigi 2018で「開発者が知っておきたい通知の歴史」という内容で講演しました
DroidKaigi 2018
wktk pic.twitter.com/PsHRlfkbTi
— kobakei (@kobakei122) 2018年2月8日
今年はセッションが採択されたので、スピーカーとして参加しました。去年までは普通に参加者としてだったので、スピーカーとして参加するのは今年が初です。
発表したぞい
「開発者が知っておきたい通知の歴史」というタイトルで、Androidの通知の機能追加の歴史と、互換性を維持してどう実装していけばいいか?というテーマで話させていただきました。内容はスライドを見ていただくとして、この発表をするに至った動機や、当日の発表、オフィスアワーで頂いた質問などを紹介しようと思います。
なんで通知?
自分は基本iOSよりAndroid好きマンなんですが、何が好きって特に通知が使いやすいのが好きなんですね。ただ、普段使っているアプリでも通知の実装が残念なこともあったりして、もっとAndroid開発者がかっちょいい通知を作って欲しい!という個人的な思いの元で応募したセッションでした。
ちなみに、応募したけどリジェクトされたその他のセッションについてはこちらの記事に内容を書きました。 kobakei.hatenadiary.jp
事前準備
セッションが採択されて、まずはサンプルアプリを作るところからはじめました。
別に自分は通知マスターでもなんでもないにも関わらず、通知の機能を網羅的に紹介するセッションが通ってしまったので、普段自分の業務では使わない機能も主要な機能では説明しなくてはと思い、ちまちま実装してました。GitHubのコミットログを見ると、最初のコミットは11/9のようです。実に3ヶ月前から始まってますね。
スライドも年末からボチボチ書き始めました。一度勢いに任せてガーッと書いたあと、こまめにアップデートを重ねてました。今年は事前にスライドを公開するビッグウェーブが来てたので、3日くらい前に自分も公開しておきました。そこからソースコードや説明に細かい手直しは入れましたが、大筋は事前公開通りで発表しています。
何度か通しで発表練習して、25分くらいに収まるように調整しました。が、後述するようにギリギリ、むしろちょいオーバーくらいでした。
DroidKaigi当日
自分のセッションは2日目の最後だったので、それまで他のセッションを聞いても全然集中できませんでしたw
自分の発表は正直反省だらけで、
- マイクが途中で電池切れになる
- 動画が上手く再生できなかった(再生まで時間がかかってたせいで、発表者モードで再生できないように見えた。実際は動いてたらしい)
- 序盤にダラダラ喋りすぎて、後半駆け足になった。結局1分ぐらい押した。
といった感じであとで動画を見るのが怖いレベルです。合掌。
30分の長さの発表になると途中途中で今自分の話が早いか・遅いかを確認するマイルストーンが必要だと思い、スライドのセクションごとに発表者ノートに「ここで12分」みたいなメモを足していたんですが、これは後半巻き返す際にとても役に立ちました。
あと、Keynoteに動画埋め込みは大体うまく行かないのでやめましょう。次やるときは動画GIFにします。
強いてよかった点を挙げるとすれば、笑いを取るつもりで喋った小ネタは全部笑いが起きてたのが救いでした。雰囲気の良い会場でよかった。
セッションの反響
#droidkaigi_room1
のツイートをいくつか引用。
昔の通知に懐かしさを感じる人達
tickerなつかし!!!!!!!!!! #droidkaigi_room1
— やぎにいちゃん (@yaginier) 2018年2月9日
懐かしい見た目だー #DroidKaigi_room1
— Keita Kagurazaka (@kkagurazaka) 2018年2月9日
更なる闇を持つ人達
ステータスバーに表示される通知アイコンって白 / 黒一色の端末と、カラフルなアプリアイコンを反映できる端末の2種類があったと記憶しているんだけれど、あれってなんでしょう? #droidkaigi #droidkaigi_room1
— バトルプログラマー柴田智也 (@tomoya_shibata) 2018年2月9日
そうだ、これだ。
— やまんだー (@ymnd) 2018年2月9日
> ヘッドアップ通知のトリガーとなる条件
ユーザーのアクティビティが全画面モードであること(アプリが fullScreenIntent を使用していること)、または
その通知が高い優先度を持ち、着信音または振動を使用していることhttps://t.co/TxPyhjdNRV#droidKaigi_room1
通知辛いってなる人達
#droidkaigi_room1 通知大変すぎる…
— あめいぱわーにおまかせろ! (@amay077) 2018年2月9日
マジでAPILevelで分岐を分ける系がめっちゃおおいな… #droidkaigi_room1
— しんくう (@shinkuFencer) 2018年2月9日
説明聞いてるだけで、今度通知を実装する辛さを想像しておえっとなる。 #droidkaigi_room1 #droidkaigi
— seisuke (@seisuke) 2018年2月9日
それなりに好評だった?
簡潔にまとまっててとても良い#droidKaigi #droidKaigi_room1
— 業務用水珈琲 (@kawakawaritsuki) 2018年2月9日
電光石火の如く早いけどかなり的確な良セッション#droidkaigi #droidkaigi_room1
— OJI@Kotlin修行中 (@OJI_1941) 2018年2月9日
通知マスター感ある#droidkaigi #droidkaigi_room1
— にかいどう あまね (@a2kaido) 2018年2月9日
通知の知見の塊だ…#droidkaigi_room1
— ゴッドマン (@ogapants) 2018年2月9日
#droidkaigi #droidkaigi_room1
— OJI@Kotlin修行中 (@OJI_1941) 2018年2月9日
とても良かったw
最高のオチwww #droidkaigi_room1
— むーむー (@muumuumuumuu) 2018年2月9日
通知の知見モリモリであった。通知の事はこばけいさんに聞こう… #droidkaigi_room1
— namiki (@nyanyoni) 2018年2月9日
同僚氏の発表、内容もオチもよかった #DroidKaigi #droidkaigi_room1
— こにふぁー (@konifar) 2018年2月9日
ここで引用できなかったツイートもすべて目を通しました。ツイートありがとうございます!
なんか主に通知の辛さが伝わってしまった感が否めないんですが、僕は皆にいい通知を実装してほしくて講演してるので是非諦めずにがんばってください!!!
オフィスアワー
いくつか質問を頂いたのでブログでも紹介しておきます。
通知チャンネルでユーザーが通知を拒否したことは取得できるか?
できます。公式ドキュメントに以下の記述があります。
To find out if a user blocked a notification channel, you can call getImportance(). If the notification channel is blocked, getImportance() returns IMPORTANCE_NONE.
Firebaseでプッシュ通知を実装しているが、アプリの持つ通知設定でON/OFFできるか?
多分カスタマイズしないと厳しいです。どのみち二行以上のテキストを表示するために、BigTextStyleを使うようにカスタマイズすると思うので、諦めて通知の表示部分は自分で実装しましょう。
アプリ内通知設定とOreoの通知チャンネルの関係は?Oreoでは前者はいらない?
僕は部屋の蛍光灯に例えると、以下のような関係だと思っています。
- アプリ内通知設定 = 電気のスイッチ
- Oreo通知チャンネル = ブレーカー
より根っこに近いレベルのONOFFがOreoの通知チャンネルだと思うので、引き続きアプリ内で通知設定を提供していてよいと思います。また、通知チャンネルの粒度は、アプリ内通知設定がすでにあるなら大体合わせておけばよいと思います。
See you next DroidKaigi!
ともあれ、この日のために長い間準備してくださったスタッフの皆さん、スピーカーの皆さん、そして参加された皆さんありがとうございました!
それではまた、来年のDroidKaigiの会場でお会いしましょう!
#DroidKaigi #droidKaigi_room1 遅ればせながら、最後まで残ってセッション聞きにきてくれた皆さんありがとうございました!また来年DroidKaigiでお会いしましょう💪 pic.twitter.com/gpte9nTztj
— kobakei (@kobakei122) 2018年2月9日