*

【google apis】GCM の使い方1 ~Getting Start~

公開日: : 最終更新日:2012/11/20 google apis

この記事はGCMのGetting Startの要約です。

参考URL

・はじめに Getting Start
http://developer.android.com/intl/ja/guide/google/gcm/gs.html

・仕組み概要 GCM Architectural Overview
http://developer.android.com/intl/ja/guide/google/gcm/gcm.html

・サンプルアプリ GCM Demo Application
http://developer.android.com/intl/ja/guide/google/gcm/demo.html

・上級者向けのお話 GCM Advanced Topics
http://developer.android.com/intl/ja/guide/google/gcm/adv.html

・クライアントライブラリ
http://developer.android.com/intl/ja/guide/google/gcm/client-javadoc/index.html

・サーバーライブラリ
http://developer.android.com/intl/ja/guide/google/gcm/server-javadoc/index.html

・その他のサイト
http://onlineconsultant.jp/pukiwiki/?Android%20GCM%E3%81%A7%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E3%82%8B

準備

Googleアカウント作成
Google apisにアクセスしてGCMを有効化。
APIキーを作成

プッシュ通知処理の流れ

1.クライアントアプリが自分の端末をGCMサーバーに登録する。
2.GCMサーバーからID(regId)を受け取る。
3.サーバーアプリにregIdを知らせる。
4.サーバーアプリがGCMサーバーにregIdを指定してプッシュ通知を依頼する。
5.クライアント端末のGCMBroadcastReceiverがGCMサーバーからプッシュ通知を受け取る。
6.GCMBroadcastReceiverがGCMIntentServiceのonMessageを呼ぶ。
7.onMessage内でメッセージをハンドリング。

アンドロイドアプリの作成

1.クライアント用のSDKにパスを通す

Android SDK ManagerからGCMのSDKをダウンロードすると下記にjarがあるのでプロジェクトにパスを通す。
C:\Program Files (x86)\Android\android-sdk\extras\google\gcm\gcm-client\dist\jcm.jar

2.AndroidManifest.xmlの編集

<!-- 2.2以降(API8)に対応 -->
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="xx"/>

<!-- パーミッションを追加 -->
<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" /> 

<!-- App receives GCM messages. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- ブロードキャストレシーバー「GCMBroadcastReceiver」を登録 -->
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
  <intent-filter>
    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    <category android:name="my_app_package" />
  </intent-filter>
</receiver>

<!-- ブロードキャストをハンドリングするサービスを登録 --?
<service android:name=".GCMIntentService" />

3.my_app_package.GCMIntentServiceクラスを作成

自分のアプリのパッケージにcom.google.android.gcm.GCMBaseIntentServiceを継承したGCMIntentServiceクラスを作成。
プッシュ通知をGCMBroadcastReceiverから受け取るサービス。
下記メソッドをオーバーライドする。

●OnRegistered(Context context, String regId)
GCMサーバーにプッシュ通知登録が完了した際に呼ばれる。通常はここで受け取ったregIdをサーバーアプリに送信してサーバーアプリに登録する。

●onUnregistered(Context context, String regId)
GCMサーバーにプッシュ通知登録解除が完了した際に呼ばれる。通常はここで受け取ったregIdをサーバーアプリに送信してサーバーアプリから削除する。

●onMessage(Context context, Intent intent)
GCMサーバーからメッセージを受け取った際に呼ばれる。ペイロードはインテントのextrasに含まれる。

@Override
protected void onMessage(Context context, Intent intent) {
	Log.v(TAG, "onMessage ");

	//受信データはintent.getExtras()の中にある
	Bundle extras = intent.getExtras();

	//予約後「from」を指定するとメッセージを発行したSENDER_ID(=google apiのプロジェクトナンバー)
	Log.v(TAG, extras.getString("from");
	//予約後「collapse_key」を指定すると
	Log.v(TAG, extras.getString("collapse_key");

	//送信時にキーdataに入れたデータは対応するキーを指定してデータを取り出す。
	Log.v(TAG, extras.getString("message_key1");
	Log.v(TAG, extras.getString("message_key2");
}

●onError(Context context, String errorId)
登録・解除の際にGCMからエラーが返った場合に呼ばれる。

●onRecoverableError(Context context, String errorId)
登録・解除の際にGCMサーバーが無効であった場合に呼ばれる。
オーバーライドしなければ登録・解除の処理を再試行しfalseを返す動作をデフォルトで行う。
このメソッドは省略可能で、再試行を行いたくない場合にのみオーバーライドを行う。

4.mainアクティビティを作成

GCMサーバーへのデバイス登録を行う。
登録済みの場合は行わない。

import com.google.android.gcm.GCMRegistrar;

//SENDER_ID = google apis -> Overview -> Dashboard -> ProgjectNumber
final private String SENDER_ID = "89766xxxxxxx";

//onCreateの中で
GCMRegistrar.checkDevice(this); //デバイスがGCM対応かチェック
GCMRegistrar.checkManifest(this); //パーミッションチェック

//登録済みチェック
final String regId = GCMRegistrar.getRegistrationId(this); 
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID); //未登録時は登録を要求
} else {
  Log.v(TAG, "Already registered");
}

サーバーアプリの作成

Getting Startではjavaのライブラリを使った方法が紹介されていますが、リファレンスもなくいざというときに自分でごにょれなくなるので、GCM Architectural Overviewで説明されている素のWebAPIを操作する方法を採用します。
そもそも今回サーバー側はPHP環境なので。

ということで続きは↓で。
【google apis】GCM の使い方2 ~GCM Architectural Overview~

関連記事

no image

【google apis】GCM の使い方2 ~GCM Architectural Overview~

前回に引き続きGCMの使い方です。   前回:【google apis】GCM の使い方1 ~

記事を読む

no image

【google apis】Zend_GdataでYouTube認証を行う

YouTube Data Apiでユーザーのプレイリストにアクセスする場合、ユーザーにアプリケー

記事を読む

no image

【google apis】GoogleのアカウントでAOuthを行う

GoogleのAOuthを使う方法です。 サマリー 目次 サイトのURL、リダイレクトする

記事を読む

Comment

  1. […]   前回:【google apis】GCM の使い方1 ~Getting Start~ […]

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑