Quantcast
Channel: Google Developers Japan
Viewing all articles
Browse latest Browse all 2207

Awareness API がセマンティック タイムをサポート

$
0
0
この記事はプロダクト マネージャー、Ritesh Nayak M による Android Developers Blog の記事 "Semantic Time support now available on the Awareness APIs" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


昨年の I/O で、Awareness APIがリリースされました。これは、ロケーション、天気情報、時刻、ユーザー アクティビティなどのシグナルを使ってユーザーの状況に即した体験を提供できるようにする、シンプルで強力な API です。

Awareness API は、Google Play サービス経由で利用でき、2 つの方法によってアプリ内で状況シグナルを活用できます。Snapshot APIは、アプリからユーザーの現在の状況に関する情報をリクエストできます。また、Fence APIは、ユーザーの状況が変化したときや、ある条件に該当した際にアプリを反応させることができます。たとえば、「ユーザーがヘッドフォンをさしたまま歩いているときは教えてください」というようなリクエストが可能です。

これまでも、Awareness API でタイムフェンス(時間の境界)を指定できましたが、時間を厳密に指定しなければならないという制限がありました。デベロッパーの皆さまからのフィードバックにより、タイムフェンスの作成に関連するこの API の柔軟性は、人々が時間について考えたり話したりする際に用いる高レベルの抽象化に対して対応できていないことがわかりました。「今週末」、「次の休日」、「日没後」といった表現は、日常会話で時間を表す際によく使われます。そこで本日(*原文公開当時)、この API にセマンティック タイムのサポートを追加しました。

たとえば、フィットネス アプリで毎朝のエクササイズの開始をユーザーに通知したい場合や、読書アプリで日没後にナイトモードをオンにしたい場合を考えてみましょう。今までは、ユーザーの現在地での日の出や日没の情報を 3p API に問い合わせ、その時間の値を使って Awareness フェンスを記述する必要がありました。今回の最新のアップデートでは、TIME_INSTANT_SUNRISETIME_INSTANT_SUNSETといった定数を使って、複雑な処理をプラットフォームに任せることができます。

例を見てみましょう。火曜日と木曜日の日の出頃に朝のエクササイズの開始を通知するフィットネス アプリを作成しているとします。このトリガーは、次のコードを使って設定できます。
// A sun-state-based fence that is TRUE only on Tuesday and Thursday during Sunrise 
AwarenessFence.and(
TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE,
-10 * ONE_MINUTE_MILLIS, 5 * ONE_MINUTE_MILLIS),
AwarenessFence.or(
TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_TUESDAY,
0, ONE_DAY_MILLIS),
TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_THURSDAY,
0, ONE_DAY_MILLIS)));


セマンティック タイムが特にすばらしいのは、祝日に対応している点です。国や地域によって、祝日は異なります。たとえば、近隣で楽しめるハイキングや探検を案内するアプリで、金曜日または月曜日の祝日に楽しむことができるものをユーザーに紹介したい場合、曜日と祝日のフラグを組み合わせれば、世界中のすべてのユーザーに対してこの状況を判別することができます。しかもわずか 3 行のコードで、世界中どこでも動作します。
// A local-time fence that is TRUE only on public holidays in the
// device locale that fall on Fridays or Mondays.
AwarenessFence.and(
TimeFence.inTimeInterval(TimeFence.TIME_INTERVAL_HOLIDAY),
AwarenessFence.or(
TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_FRIDAY,
9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS),
TimeFence.inIntervalOfDay(TimeFence.DAY_OF_WEEK_MONDAY,
9 * ONE_HOUR_MILLIS, 11 * ONE_HOUR_MILLIS)));

どちらの例でも、Awareness API は端末の言語/地域の設定に基づいて、時間や祝日のローカライズという大変な作業を行ってくれます。

皆さまがこの強力な API を使ってどのような問題を解決するか、楽しみにしています。メーリング リストに参加すると、今回の API を含む Google の Context API についてのアップデート情報を受け取ることができます。



Posted by Takuo Suzuki - Developer Relations Team

Viewing all articles
Browse latest Browse all 2207

Trending Articles