Tag: gcm

[問題] 遇到 com.google.android.gsf package couldn’t be found 怎麼辦?

這是因為使用到 Android 的模擬器。只要重新創建一個 Google APIs 的模擬器就可以解決這個問題。

Tags : ,

[教學] Google Cloud Messaging (GCM) Service 訊息推播

事前準備

  • Google API project。需要新增 Project 及  API Key。
  • 推播 Server。需要一個推播 Server 發送推播訊息。
  • gcm.jargoogle 所提供的相關 library。

推播訊息格式

如果你是使用 google 提供的 sdk,那他已經把相關格式包裝好了,不需要去理會格式。

如果想只到完整格式內容可參考 gcm#request

新增一個 Google API project

透過下面的步驟你會得到

  1. Sender ID,client 端用來註冊得到 Registeration ID
  2. API Key,server 端用來發送訊息

步驟很簡單,請參考 GCM Document

安裝 gcm.jar

在 Eclipse 內,開啓 Android SDK Manager

安裝 Extras > Google Cloud Messaging for Android Library,所下載的檔案會放置在

YOUR_SDK_ROOT/extras/google/gcm

「註」如果沒有看到安裝選項,

  1. 請先更新 Android SDK Manage > Tools > SDK Manager (rev. 20)
  2. Help > Install New Software > Android Developer Toolkit ADT

APP 端設定

請參考 Writting the Android Application

這邊會需要用到上面所申請到的 SENDER_ID 去註冊一組 REGISTERATION_ID,然後把這個 REGISTERATION_ID 上傳至 Server 用來作為辨識該處裝置的 ID。

註冊

String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
   GCMRegistrar.register(this, SENDER_ID);
}
ServerUtilities.register(context, regId);

接收提醒

相較於 apple 將提醒功能由底層自動處理掉節省不少步驟,android 則是透過 GCMIntentServiceonMessage(Context context, Intent intent) 讓開發者自行編輯提醒內容

protected void onMessage(Context context, Intent intent) {
   // 這裡提取的 message, 主要是server端 addData時所帶入的部份
   String message = intent.getStringExtra("message");
   displayMessage(context, message);
   // notifies user
   generateNotification(context, message);
};

Server端範例

請參考 Writting the Android Server-side Application

這邊會用到先前所申請到的 API_KEY 用來作為與 google server 溝通時的 key。

// 產生一個 sender instance
Sender sender = new Sender(API_KEY);
Message message = new Message.Builder().addData("message", "Hello World!").build();
// 發送訊息到 device
sender.send(message, REGISTERATION_ID, 5);

相關文章

Tags : , ,