メールでのお問い合わせはこちら、お問い合わせフォーム

スタッフブログ

2015年6月

1

スマートフォンを使っていると、時々通知が送られてきます。
この通知、何も操作をしていないのに、勝手に届きます。
これが「プッシュ通知」と呼ばれているもので、ユーザーが何か操作をすることを「プル(引く)」と表すのに対し、サーバー側から行うものなので「プッシュ(押す)」と呼ぶようです。
もちろん、誰彼構わず所構わず送られてくるのではなく、「プッシュ通知」に対応したアプリがスマホに入っている時のみ送られてきます。

さて、このプッシュ通知ですが、例によってスマホの種類によって異なります。
AndroidとiOSでは異なる内容になるわけです。
それでも、この両者の違いを少しでも減らす取り組みというものが、世の中にはいくつかあります。
プッシュ通知を受け取った後の処理はOSが違えば全く異なるため、こちらはどうにもなりませんが、通知を送る側の処理は一本化が可能なのです。

今回とりあげる「Kii Cloud」もそういったものの一つです。

kii.png
Androidでプッシュ通知を行うために「Kii Cloud」を利用しました。
「Kii Cloud」では通知を送る側の処理のみならず、受ける側用のライブラリも提供し、開発負担の軽減につながるようになっています。
なお、通知を送る側(サーバー)には通知を送る機能の他に対象となる端末の情報を保存しておく機能も必要です。
「Kii Cloud」では保存機能もあるので、別途情報保管用のサーバーは必要ありません。

で、そのプッシュ通知を送るという行為は簡単に出来たのかと言うと、世の中そんなに甘くは無いのでした。
サンプルには10分で出来ると書いてあったんですがねぇ。

 「ナナハンに乗りたくば、まずは自転車に乗れるようになれ」

なんて格言があったかどうかは知りませんが、通知以前にAndroidのネイティブアプリの世界の用語や様式、しきたりや方言といったものを知るのが先でした。
(さすがにここはハイブリッドアプリの出番ではありません)
java自体は大したことは無い※1のですが、Androidというシステム自体が持つ不安定さ※2や他と異なる独特の文化※3と合わさった事が結構な壁として立ちはだかり、10分で出来る(とされている)サンプルを動作させるのに10時間以上かかったりしました。

※1
Javaは隣の事は一切関知しないと言うお役所のような少々融通の利かない言語ですが、別に大きな問題ではありません。
むしろ変数の有効範囲において人類皆兄弟とでも言いそうなBASICのほうが「扱いずらい」です。

※2
頻繁に仕様が変わるから本やweb上の情報の多くが「古くて使えない」うえ、開発環境まで動作が不安定になりやすい。
AndroidはGoogleが提供しているものですが、オープンソースなモノたち同様の不安定さを持っています。

※3
ここで言う「他」とは「MS-DOS」「Windows」「web」のこと。
あくまで文化の話なので、マルチタスクやイベント駆動型、非同期処理といった技術の話ではありません。
(webから入ったヒトではないので、その辺は問題ない)
まぁ一言で言うなら「日本語でOK」。
(ドキュメントが英語しかないと言う意味ではなく、dos、win32や.NET、PHPなどの世界の言葉・習慣とAndroidの世界の言葉・習慣はいろいろ違うという事)

とりあえず、一つの壁は突破したので、一歩前進です。
異文化交流に苦しむのもいつまでも続く事ではないでしょうから。

それはともかく、本を書く人は教員免許を取るか、塾で講師をするか、家庭教師の経験を持った方が良い。
せめて起承転結や5W1Hが存在する理由を考えてから書こうよ。
 「build.gradleに追加します」・・・build.gradleって2つあるよ、どっちだ?※4
 「作って入れます」・・・どこに?なんという名前で?
 「で、出来上がりです」・・・出来上がるとどうなるのだ?動かすと何が起きる?
といった肝心なところが欠如している解説が多くて困る。
blogにまでそういったクオリティは求めないけどさ。あるに越したことは無いが。

※4
実は build.gradle のソースに入っている英語のコメントを読めば判るが、それを読めと言う説明すらない。
Kii Cloud のドキュメントでは場所によっては「どこにあるbuild.gradleか」を説明しているものもあります。
(全部ではありませんが)


■余談
某所にあった通知が来ると言うサンプル。
通知が来た時に何が起きるか書いてない。
何も起きないから通知が来ていない=動作していないと思ったら大間違い。
実は「何も起きない」が正解。
他の通知を受け取ったとき通知のリストを出したら、そのリストに入っていたと言う。
「何も起きない」なら「何も起きない」と書きなさい。

(ノティフィケーションの場合)プッシュ通知は「通知が来た」事を知らせる動作と、通知リストに内容を入れる動作の2つからなる。
そのサンプルは「通知リストに内容を入れる動作」だけが実装されていたという訳。
でも、そのことはどこにも書いてない。
書いた本人は「通知リストに内容を入れる方法を書いた」ので、他の動作の事は全く触れていないということなのでしょう。

断片的情報は使えないという一例です。

1