[201510][Bach Ngoc Hoai] Android push notify using Google Cloud Message (GCM)
**Sử dụng GCM để push notification từ server (my domain) về ứng dụng android ** Cấu trúc hoạt động Đăng ký Google Cloud Message từ Google API Console Tạo môi trường từ Android Studio Tạo GCM Project - code sample Push notify với webservice bằng code php **Cấu trúc hoạt động ** ** ...
**Sử dụng GCM để push notification từ server (my domain) về ứng dụng android **
- Cấu trúc hoạt động
- Đăng ký Google Cloud Message từ Google API Console
- Tạo môi trường từ Android Studio
- Tạo GCM Project - code sample
- Push notify với webservice bằng code php
**Cấu trúc hoạt động **
** Đăng ký Google Cloud Message từ Google API Console**
a. Mở Google API Console page https://developer.google.com/console
b. Tạo project GCM Sample Tại màn hình home các bạn thấy id của project
ID: gcm-sample (#6237....) đây chính là client id hay SENDER_ID để đăng ký ứng dụng trên android
c. Sau khi tạo xong project, để Google Cloud Message ở chế độ enable
APIs & auth >> APIs >> Cloud Messaging for Android
d. Đăng ký webservice - hay chính xác hơn là xác nhận domain của webservice vào Google Cloud Message Project (GCM Project) Tạo service key từ
APIs & auth >> Credentials >> Add Credentials >> API Key >> Service Key
Tại đây tất cả để mặc định và chọn Create >> có được SERVER KEY
e. Add domain vào GCM Project -> cho phép domain có quyền request GCM push notify cho SEND_ID
APIs & auth >> Credentials >> Domain verification >> Add domain và làm theo hướng dẫn khá cụ thể ở đó
Tạo môi trường từ Android Studio
a. Mở AVD manager và cài đặt Google APIs (version tuỳ thích )
b. Ngoài ra có thể sử dụng lib gcm.jar thay thế cho dùng Google APIs để build project
Tạo GCM Project - code sample
a. Cấu trúc project
b. AndroidManifest.xml INTERNET – Required Sử dụng internet để nhận message .
ACCESS_NETWORK_STATE – Kiểm tra trạng thái kết nối (có thể bỏ qua sử dụng exception)
GET_ACCOUNTS – Required lấy thông tin account
WAKE_LOCK – Bỏ qua chế độ sleep của máy
VIBRATE – Để chế độ rung khi nhận được message
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sample.gcm" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <application android:name="com.sample.gcm.Controller" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name="com.sample.gcm.RegisterActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.sample.gcm.MainActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name" > </activity> <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="com.sample.gcm" /> </intent-filter> </receiver> <service android:name="com.sample.gcm.GCMIntentService" /> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="com.sample.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.sample.gcm.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> </manifest>
c. Some JAVA FILE
_Config.java _
YOUR_SERVER_URL : Link webservice từ domain của bạn.
GOOGLE_SENDER_ID : SENDER_ID tạo từ bên trên.
MainActivity.java
'GCMRegistrar.checkDevice(this);'
Kiểm tra đăng ký GCM của device
'GCMRegistrar.checkManifest(this);'
Kiểm tra permission, service, receiver trong mainifest
'registerReceiver(mHandleMessageReceiver, new IntentFilter(Config.DISPLAY_MESSAGE_ACTION));'
Đăng ký receiver để nhận tin nhắn trả về từ GCM
'GCMRegistrar.register(this, Config.GOOGLE_SENDER_ID);'
Đăng ký device mới
GCMIntentService.java
'protected void onRegistered(Context context, String CLIENT_ID ) '
Function khi GCM đăng ký device thành công và trả về CLIENT_ID
'protected void onMessage(Context context, Intent intent)'
Ngoài ra các function, class khác chủ yếu chỉ bổ trợ cho đăng ký
**Push notify với webservice bằng code php **
a. Tạo database lưu trữ CLIENT_ID: gcm
b. Tạo bảng lưu trữ thông tin client gửi lên như tên, CLIENT_ID, mail
'CREATE TABLE IF NOT EXISTS gcm_users ( id int(11) NOT NULL AUTO_INCREMENT, gcm_regid text, name varchar(50) NOT NULL, email varchar(255) NOT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; '
c. PHP File
config.php
<?php ' // Database config variables define("DB_HOST", "localhost"); define("DB_USER", "xxxxxxxxx"); define("DB_PASSWORD", "xxxxxxx"); define("DB_DATABASE", "gcm"); // Google Cloud Messaging API Key // Place your Google API Key define("GOOGLE_API_KEY", "AIzaSyA81yS1VSj1WZXY_T"); ?>'GOOGLE_API_KEY là SERVER KEY đăng ký ở trên
và một số function khác hỗ trợ cho việc gửi message đến GCM API.
Các bạn có thể tải Full Demo tại đây https://www.dropbox.com/s/egv15wq6acjg936/GCM Sample.zip?dl=0