Google cloud messaging là gì

Google Cloud Messaging mang lại Android (GCM) là một các dịch vụ được cho phép gửi dữ liệu từ bỏ phần lớn sever cho ứng dụng app android.Sử dụng hình thức dịch vụ này, bạn cũng có thể gửi tài liệu đến áp dụng của khách hàng bất cứ bao giờ gồm tài liệu bắt đầu một cách tự động cầm vìbắt buộc gửi từng trải đến sever.

Sơ trang bị dưới đó là minh họa tổng quan về mục đích của mỗi thực thể tđắm đuối gia trong lý giải google cloud messaging mang đến android.




Bạn đang xem: Google cloud messaging là gì

*

Trước tiên máy game android gửi sender id với application id đến sever GCM nhằm đăng kýSau khi đăng ký thành công xuất sắc sever GCM đang tạo nên một registration id cho thứ androidSau Lúc nhậnregistration id,trang bị đã gửiregistration idcho serverServer đang lưuregistration idvào cửa hàng dữ liệuBất cứ đọng khi nào cóthông báo, VPS đã gửi một thông điệp tới máy chủ GCM cùng rất registration id củathiết bịMáy công ty GCM sẽ chuyển thông điệp này mang đến thiết bị cầm tay registration id củathiết bị

Google Cloud Messaging đến AndroidCác bước thực hiện

Một số hình ảnh của vận dụng cài đặt google cloud messaging cho android

Trước Lúc nhập công bố cùng đăng ký


*

*

*

Nhập thông báo trên trang web cùng cliông xã vào nút “Send“, tài liệu sẽ được gửi đến ứng dụng android


*

Cách 1: Đăng cam kết vớiGoogle Cloud Messaging

Truy cập trangGoogle APIs Console pagecùng tạo ra một project mới

Chọn Create project


Bước 2:TạoMySquốc lộ Database (Tsay mê khảo bài viết trả lời kết android cùng với mysql)

Truy cập tranghttp://localhost/phpmyadmin cùng sản xuất một database tên gcm (Nếu localhost của bạn đang làm việc trên port không giống 80 thì các bạn phảithêm portvào urltheo định dạnghttp://localhost:port/phpmyadmin)

Sau Khi tạo ngừng database, các bạn chọn gcm với thực thi đoạn script sau nhằm sản xuất bảnggcm_users

CREATE TABLE IF NOT EXISTS gcm_users ( id int(11) NOT NULL AUTO_INCREMENT, gcm_regid text, name varchar(50) NOT NULL, tin nhắn varchar(255) NOT NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMPhường, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;Cách 3: Tạo PHPhường. Project

Tạo thỏng mục têngcm_server_php vào thỏng mụchtdocs

Giải nén tập tingcm_server_php.jar vào thỏng mụcgcm_server_php

Lưu ý biến đổi báo cáo liên kết đến MySquốc lộ với API Key tạiconfig.php


Chọn SDK Tools -> lựa chọn Show PackageDetails -> chọnGoogle Cloud Messaging for Android Library -> chọn OK


Bước 5: TạoAndroid Project

5.1. Sử dụng Android Studio cùng chế tạo ra new một project tên GCMDemo,download cùng copy những file đặt vào thư mục drawable

5.2. Vàosdkextrasgooglegcmsamplesgcm-demo-clientlibs cùng copygcentimet.jar -> sau đópaste vào thư mụcapplibs

Kết quả sau thời điểm paste thành công


5.3. Trong Android Studio -> mở file build.gradle (Module:app) cùng chế tạo đoạn code

compile files("libs/gcm.jar")
5.4. Tạo tập tinCommonUtilities.java

Chuột bắt buộc package -> lựa chọn New -> lựa chọn Java Class

Nội dung tập tin

param message message to lớn be displayed. */ static void displayMessage(Context context, String message) Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); intent.putExtra(EXTRA_MESSAGE, message); context.sendBroadcast(intent); }Lưu ý biến hóa các thông sau mang đến phù hợp với đồ vật của bạn


5.5. Tạo tập tinServerUtilities.java

import android.nội dung.Context;import app android.util.Log;import com.google.android.gcentimet.GCMRegistrar;import java.io.IOException;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Random;/** * Created by exposedjunction.com */public class ServerUtilities private static final int MAX_ATTEMPTS = 5; private static final int BACKOFF_MILLI_SECONDS = 2000; private static final Random random = new Random(); /** * Register this account/device pair within the hệ thống. * */ static void register(final Context context, String name, String email, final String regId) Log.i(CommonUtilities.TAG, "registering device (regId = " + regId + ")"); String serverUrl = CommonUtilities.SERVER_URL; Map params = new HashMap(); params.put("regId", regId); params.put("name", name); params.put("email", email); long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000); // Once GCM returns a registration id, we need khổng lồ register on our VPS // As the hệ thống might be down, we will retry it a couple // times. for (int i = 1; i params = new HashMap(); params.put("regId", regId); try post(serverUrl, params); GCMRegistrar.setRegisteredOnServer(context, false); String message = context.getString(R.string.server_unregistered); CommonUtilities.displayMessage(context, message); catch (IOException e) // At this point the device is unregistered from GCM, but still // registered in the hệ thống. // We could try lớn unregister again, but it is not necessary: // if the hệ thống tries lớn sover a message khổng lồ the device, it will get // a "NotRegistered" error message and should unregister the device. String message = context.getString(R.string.server_unregister_error, e.getMessage()); CommonUtilities.displayMessage(context, message); /** * Issue a POST request khổng lồ the VPS. * *
throws IOException propagated from POST. */ private static void post(String endpoint, Map params) throws IOException URL url; try url = new URL(endpoint); catch (MalformedURLException e) throw new IllegalArgumentException("invalid url: " + endpoint); StringBuilder bodyBuilder = new StringBuilder(); Iterator> iterator = params.entrySet().iterator(); // constructs the POST body toàn thân using the parameters while (iterator.hasNext()) Entry param = iterator.next(); bodyBuilder.append(param.getKey()).append("=") .append(param.getValue()); if (iterator.hasNext()) bodyBuilder.append("&"); String body = bodyBuilder.toString(); Log.v(CommonUtilities.TAG, "Posting "" + body toàn thân + "" khổng lồ " + url); byte<> bytes = toàn thân.getBytes(); HttpURLConnection conn = null; try Log.e("URL", "> " + url); conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setUseCaches(false); conn.setFixedLengthStreamingMode(bytes.length); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); // post the request OutputStream out = conn.getOutputStream(); out.write(bytes); out.close(); // handle the response int status = conn.getResponseCode(); if (status != 200) throw new IOException("Post failed with error code " + status); finally if (conn != null) conn.disconnect(); 5.6. Tạo tập tinGCMIntentService.java

import game android.app.Notification;import android.phầm mềm.NotificationManager;import game android.ứng dụng.PendingIntent;import app android.content.Context;import app android.content.Intent;import android.util.Log;import com.google.app android.gcentimet.GCMBaseIntentService;/** * Created by exposedjunction.com */public class GCMIntentService extends GCMBaseIntentService private static final String TAG = "GCMIntentService"; public GCMIntentService() super(CommonUtilities.SENDER_ID); /** * Method called on device registered **/
Override protected void onRegistered(Context context, String registrationId) Log.i(TAG, "Device registered: regId = " + registrationId); CommonUtilities.displayMessage(context, "Your device registred with GCM"); Log.d("NAME", MainActivity.name); ServerUtilities.register(context, MainActivity.name, MainActivity.email, registrationId); /** * Method called on device un registred * */


Xem thêm: Hướng Dẫn Sử Dụng Nấm Trichoderma Hiệu Quả, Hướng Dẫn Sử Dụng Nấm Trichoderma

Override protected void onUnregistered(Context context, String registrationId) Log.i(TAG, "Device unregistered"); CommonUtilities.displayMessage(context, getString(R.string.gcm_unregistered)); ServerUtilities.unregister(context, registrationId); /** * Method called on Receiving a new message * */
Override protected void onMessage(Context context, Intent intent) Log.i(TAG, "Received message"); String message = intent.getExtras().getString("msg"); CommonUtilities.displayMessage(context, message); // notifies user generateNotification(context, message); /** * Method called on receiving a deleted message * */
Override protected void onDeletedMessages(Context context, int total) Log.i(TAG, "Received deleted messages notification"); String message = getString(R.string.gcm_deleted, total); CommonUtilities.displayMessage(context, message); // notifies user generateNotification(context, message); /** * Method called on Error * */
Override public void onError(Context context, String errorId) Log.i(TAG, "Received error: " + errorId); CommonUtilities.displayMessage(context, getString(R.string.gcm_error, errorId));
Override protected boolean onRecoverableError(Context context, String errorId) // log message Log.i(TAG, "Received recoverable error: " + errorId); CommonUtilities.displayMessage(context, getString(R.string.gcm_recoverable_error, errorId)); return super.onRecoverableError(context, errorId); /** * Issues a notification khổng lồ inform the user that hệ thống has sent a message. */ private static void generateNotification(Context context, String message) long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); String title = context.getString(R.string.app_name); Intent notificationIntent = new Intent(context, MainActivity.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOPhường. 5.7. Tạo tập tinAlertDialogManager.java

import android.tiện ích.AlertDialog;import app android.nội dung.Context;import app android.nội dung.DialogInterface;/** * Created by exposedjunction.com */public class AlertDialogManager /** * Function to display simple Alert Dialog *
param context - application context *
param title - alert dialog title *
param message - alert message *
param status - success/failure (used khổng lồ mix icon) * - pass null if you don"t want ibé * */ public void showAlertDialog(Context context, String title, String message, Boolean status) AlertDialog alertDialog = new AlertDialog.Builder(context).create(); // Setting Dialog Title alertDialog.setTitle(title); // Setting Dialog Message alertDialog.setMessage(message); if(status != null) // Setting alert dialog inhỏ alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail); // Setting OK Button alertDialog.setButton("OK", new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) ); // Showing Alert Message alertDialog.show(); 5.8. Tạo tập tin ConnectionDetector.java

import apk.content.Context;import apk.net.ConnectivityManager;import game android.net.NetworkInfo;/** * Created by exposedjunction.com */public class ConnectionDetector { private Context _context; public ConnectionDetector(Context context) this._context = context; /** * Checking for all possible internet providers * **/ public boolean isConnectingToInternet(){ ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo<> info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i 5.9. Tạo tập tin WakeLocker.java

import app android.content.Context;import android.os.PowerManager;public abstract class WakeLocker private static PowerManager.WakeLock wakeLock; public static void acquire(Context context) PowerManager.ACQUIRE_CAUSES_WAKEUPhường public static void release() if (wakeLock != null) wakeLoông chồng.release(); wakeLochồng = null; 5.10. Tạo activity tênRegisterActivity

Thiết kế layout


Viết xử lý

import game android.content.Intent;import android.os.Bundle;import android.tư vấn.v7.tiện ích.AppCompatActivity;import apk.view.View;import android.widget.Button;import android.widget.EditText;public class RegisterActivity extends AppCompatActivity AlertDialogManager alert = new AlertDialogManager(); // Internet detector ConnectionDetector cd; // UI elements EditText txtName; EditText txtEmail; // Register button Button btnRegister;
Override protected void onCreate(Bundle savedInstanceState) 5.11. Thiết kế và viết xử lý mang lại MainActivity

Thiết kế layout


Viết xử lý

import app android.nội dung.BroadcastReceiver;import apk.content.Context;import app android.nội dung.Intent;import game android.nội dung.IntentFilter;import android.os.AsyncTask;import app android.support.v7.phầm mềm.AppCompatActivity;import android.os.Bundle;import app android.util.Log;import android.widget.TextView;import app android.widget.Toast;import com.google.game android.gcentimet.GCMRegistrar;import static apk.gcmtest.CommonUtilities.DISPLAY_MESSAGE_ACTION;import static apk.gcmkiểm tra.CommonUtilities.EXTRA_MESSAGE;import static app android.gcmdemo.CommonUtilities.SENDER_ID;public class MainActivity extends AppCompatActivity // label to lớn display gcm messages TextView lblMessage; // Asyntask AsyncTask mRegisterTask; // Alert dialog manager AlertDialogManager alert = new AlertDialogManager(); // Connection detector ConnectionDetector cd; public static String name; public static String email;
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// GCMRegistrar.unregister(getApplicationContext()); cd = new ConnectionDetector(getApplicationContext()); // Cheông chồng if Internet present if (!cd.isConnectingToInternet()) // Internet Connection is not present alert.showAlertDialog(MainActivity.this, "Internet Connection Error", "Please connect khổng lồ working Internet connection", false); // stop executing code by return return; // Getting name, email from intent Intent i = getIntent(); name = i.getStringExtra("name"); email = i.getStringExtra("email"); // Make sure the device has the proper dependencies. GCMRegistrar.checkDevice(this); // Make sure the manifest was properly phối - bình luận out this line // while developing the app, then unphản hồi it when it"s ready. GCMRegistrar.checkManifest(this); lblMessage = (TextView) findViewById(R.id.lblMessage); registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION)); // Get GCM registration id final String regId = GCMRegistrar.getRegistrationId(this); // Cheông chồng if regid already presents if (regId.equals("")) // Registration is not present, register now with GCM GCMRegistrar.register(this, SENDER_ID); else // Device is already registered on GCM if (GCMRegistrar.isRegisteredOnServer(this)) // Skips registration. Toast.makeText(getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show(); else // Try khổng lồ register again, but not in the UI thread. // It"s also necessary lớn cancel the thread onDestroy(), // hence the use of AsyncTask instead of a raw thread. final Context context = this; mRegisterTask = new AsyncTask()
Override protected Void doInBackground(Void... params) // Register on our hệ thống // On server creates a new user ServerUtilities.register(context, name, email, regId); return null;
Override protected void onPostExecute(Void result) mRegisterTask = null; ; mRegisterTask.execute(null, null, null); /** * Receiving push messages * */ private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver()


Xem thêm: Đánh Giá Phim Thor (Phim) - 'Thor: Ragnarok' Được Đánh Giá Là Phần

Override public void onReceive(Context context, Intent intent) String newMessage = intent.getExtras().getString(EXTRA_MESSAGE); // Waking up thiết bị di động if it is sleeping WakeLocker.acquire(getApplicationContext()); /** * Take appropriate action on this message * depending upon your tiện ích requirement * For now i am just displaying it on the screen * */ // Showing received message lblMessage.append(newMessage + " "); Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show(); // Releasing wake loông chồng WakeLocker.release(); ;
Override protected void onDestroy() if (mRegisterTask != null) mRegisterTask.cancel(true); try unregisterReceiver(mHandleMessageReceiver); GCMRegistrar.onDestroy(this); catch (Exception e) Log.e("UnRegister Receiver Error", e.getMessage()); super.onDestroy(); 5.12.Nội dung tập tinAndroidManifest.xml


Chuyên mục: Kiến thức