บทเรียนสำหรับคนที่ต้องการสร้างระบบ Push Notification บนระบบปฏิบัติการ Android ผ่าน Android Studio ร่วมกับระบบเว็บไซต์ Cloud ของ Parse.com มาพัฒนาใช้ร่วมกัน
ศึกษาบทเรียนก่อนหน้านี่ได้ที่ บทเรียนการพัฒนาแอพพลิเคชัน Android ย้อนหลัง แต่ถ้าหากว่าพร้อมแล้วให้เราเข้าไปสมัครสมาชิกเข้าระบบของเว็บไซต์ http://www.parse.com ครับ
ในส่วนของ Parse นั้นมีระบบที่ใช้งานได้ฟรี (30 request/ second) นั้นคือระบบ Push Notification ครับให้เราสามารถส่งข่าวสารให้กับเหล่าผู้ใช้งานแอพพลิเคชันที่เราพัฒนาขึ้นได้อย่างทั่วถึง ส่วนที่สองของ Parse นั้นคือการเก็บข้อมูล Data ต่างๆ ไว้บน Cloud ครับโดยเราสามารถใช้เป็นฐานข้อมูลในการทำระบบหลังบ้าน (เล็กๆ แบบฟรี) ได้ผ่าน Cloud Data
ทีนี้เราจะต้องทำระบบ Push สำหรับส่งข่าวสารของเราครับให้เรากดที่เมนู Quickstart ที่มุมขวาล่างของ Card แอพของเราบนระบบ Parse.com
เมื่อเราเลือก Native (Java) เป็นที่เรียบร้อยมันจะถามว่าเรามี Project อยู่แล้วหรือเปล่า หรือว่า ยังไม่มีถ้ายังก็ให้ดาวน์โหลด Project ของมันไปเปลี่ยนชื่อ Package เอา ให้เราเลือก New Project แล้วทำตามขั้นตอนไปเลยครับ มันจะมี App Key และ Client Key ให้ใส่
แตก zip ไฟล์แล้วเปิด Android Studio ขึ้นมา แล้วเลือก Open Existing Project เลือกโฟลเดอร์ที่เราแตก zip ไฟล์ของ Parse เลือก build.gradle รอสักพักก็จะได้ระบบที่พร้อมทำงาน
ไปที่ Class ของไฟล์ StarterApplication.java ทำการแก้ไข บรรทัดหลังส่วนนี้
// Add your initialization code here
เป็น
Parse.initialize(this, "ใส่ APP ID", "ใส่ CLIENT KEY"); ParseInstallation.getCurrentInstallation().saveInBackground();
เสร็จแล้วเปิด AndroidManifest.xml ขึ้นมาเปิด Permission ดังนี้ครับ
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below to match your app's package name + ".permission.C2D_MESSAGE". --> <permission android:protectionLevel="signature" android:name="com.parse.starter.permission.C2D_MESSAGE" /> <uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" />
และเรียกใช้ ฟังก์ชันของ Parse เล็กน้อย ให้ประกาศการเรียกใช้งานก่อนปิด </application>
<service android:name="com.parse.PushService" /> <receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.parse.push.intent.RECEIVE" /> <action android:name="com.parse.push.intent.DELETE" /> <action android:name="com.parse.push.intent.OPEN" /> </intent-filter> </receiver> <receiver android:name="com.parse.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" /> <!-- IMPORTANT: Change "com.parse.starter" to match your app's package name. --> <category android:name="com.parse.starter" /> </intent-filter> </receiver>
พึงระวังครับถ้าเรามี Package Name ใหม่เช่น com.daydev.push เราต้องแก้บรรทัดนี้ให้ตรงกันนะครับ
<!--IMPORTANT: Change "com.parse.starter" to match your app's package name.--> <category android:name="com.parse.starter" />
ทำการ Build App ของเราลงเครื่องสมาร์ทโฟนจริงๆ (รันใน Genymotion ไม่เกิดประโยชน์นะครับ) เปิด Parse.com ขึ้นมาไปยัง Dash Board หรือจะกด Test ก็ได้ครับ
ทำการส่งข้อความโดยพิมพ์ว่าอะไรไปก็ได้ครับ
เมื่อทำการส่ง ระบบจะปรากฏว่าเราเคยส่งข้อความอะไรไปบ้างแล้วผ่านหน้าจอของ DashBoard ตัวอย่างต่อไปนี้คือหน้าจอแอพพลิเคชันของผมส่วนของ Push Notification และ DashBoard บน Parse.com
ส่ง Push ไปแล้วครับ ตรวจสอบผ่านระบบ Dash Board เสียหน่อย
จะเห็นว่าส่ง Push Notification นั้นไม่ยากเลยนะครับ 30 Request/ sec แต่ถ้าเกินก็ หลายบาทอยู่ครับ ระวังก็ดีถ้ามีเงินก็ใช้ๆ ไปครับสบาย ง่ายๆ
ทีนี้มาดูส่วนของ Cloud Data เราสามารถ put ค่าที่ส่งจากแอพพลิเคชันของเราไปยัง Cloud Data ของ Parse.com ได้แบบ Key Value ครับ ทดสอบโดยการเพิ่มคำสั่งต่อไปนี้ลงไปที่ StarterApplication.java
// Add your initialization code here Parse.initialize(this, "APPLICATION ID", "CLIENT KEY"); ParseObject testObject = new ParseObject("ANDROID_DEVICE"); testObject.put("telephone", getSimSerialNumber); testObject.put("device_name", deviceName); testObject.put("device_manufacture", deviceManuacture); testObject.put("device_Brand", deviceBrand); testObject.put("device_version", deviceVersion); testObject.saveInBackground(); ParseInstallation.getCurrentInstallation().saveInBackground();
เก็บการดึงข้อมูลว่า device_name นั้นโทรศํพท์เราชื่อรุ่นอะไร device_version ลงระบบปฏิบัติการอะไร ดังนั้นเราต้องดูภาพรวมของไฟล์เราเป็นแบบนี้ครับ
/* * Copyright (c) 2015-present, Parse, LLC. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.parse.starter; import android.app.Application; import android.content.Context; import android.os.Build; import com.parse.Parse; import com.parse.ParseACL; import com.parse.ParseInstallation; import com.parse.ParseObject; import com.parse.ParseUser; import android.telephony.TelephonyManager; public class StarterApplication extends Application { @Override public void onCreate() { super.onCreate(); String deviceName = android.os.Build.MODEL; String deviceManuacture = android.os.Build.MANUFACTURER; String deviceBrand = android.os.Build.BRAND; String deviceVersion = android.os.Build.VERSION.RELEASE; TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String getSimSerialNumber = telemamanger.getSimSerialNumber(); // Enable Local Datastore. Parse.enableLocalDatastore(this); // Add your initialization code here Parse.initialize(this, "APPLICATION ID", "CLIENT KEY"); ParseObject testObject = new ParseObject("ANDROID_DEVICE"); testObject.put("telephone", getSimSerialNumber); testObject.put("device_name", deviceName); testObject.put("device_manufacture", deviceManuacture); testObject.put("device_Brand", deviceBrand); testObject.put("device_version", deviceVersion); testObject.saveInBackground(); ParseInstallation.getCurrentInstallation().saveInBackground(); ParseUser.enableAutomaticUser(); ParseACL defaultACL = new ParseACL(); // Optionally enable public read access. // defaultACL.setPublicReadAccess(true); ParseACL.setDefaultACL(defaultACL, true); } }
ลอง run แอพใหม่จากการ Build ผ่าน Android Studio เราจะแอบส่งรุ่นรหัสของเครื่อง ระบบปฏิบัติการ และเบอร์โทรศัพท์แบบเข้ารหัสไปเก็บในระบบของ Parse ด้วย Package ของ Object ชื่อว่า “ANDROID_DEVICE”
ทีนี้ทำแอพพลิเคชันตรวจ และส่งว่าเราถูกหวยหรือเปล่าก็ง่ายแล้วสิศึกษาบทเรียนอื่นๆ ได้ที่ บทเรียนการพัฒนาแอพพลิเคชัน Android ย้อนหลัง