Android DeveloperProgramming Language

เขียนแอพ Android การทำ Push Notification และทำงานกับ Parse

บทเรียนสำหรับคนที่ต้องการสร้างระบบ Push Notification บนระบบปฏิบัติการ Android ผ่าน Android Studio ร่วมกับระบบเว็บไซต์ Cloud ของ Parse.com มาพัฒนาใช้ร่วมกัน

ศึกษาบทเรียนก่อนหน้านี่ได้ที่ บทเรียนการพัฒนาแอพพลิเคชัน Android ย้อนหลัง แต่ถ้าหากว่าพร้อมแล้วให้เราเข้าไปสมัครสมาชิกเข้าระบบของเว็บไซต์ http://www.parse.com ครับ

Screen Shot 2558-10-17 at 8.37.22 PM

ในส่วนของ Parse นั้นมีระบบที่ใช้งานได้ฟรี (30 request/ second) นั้นคือระบบ Push Notification ครับให้เราสามารถส่งข่าวสารให้กับเหล่าผู้ใช้งานแอพพลิเคชันที่เราพัฒนาขึ้นได้อย่างทั่วถึง ส่วนที่สองของ Parse นั้นคือการเก็บข้อมูล Data ต่างๆ ไว้บน Cloud ครับโดยเราสามารถใช้เป็นฐานข้อมูลในการทำระบบหลังบ้าน (เล็กๆ แบบฟรี) ได้ผ่าน Cloud Data

ทำการสร้าง New App ผ่านระบบ Parse
ทำการสร้าง New App ผ่านระบบ Parse
ตัวอย่างเมื่อสร้าง แอพของเราแล้ว
ตัวอย่างเมื่อสร้าง แอพของเราแล้ว

ทีนี้เราจะต้องทำระบบ Push สำหรับส่งข่าวสารของเราครับให้เรากดที่เมนู Quickstart ที่มุมขวาล่างของ Card แอพของเราบนระบบ Parse.com

เลือก Push
เลือก Push
เลือกระบบปฏิบัติการ Android
เลือกระบบปฏิบัติการ Android
เลือก Native นะครับ Xamarin มันต้องรันผ่าน Virtual Machine (ไม่ไหว)
เลือก Native นะครับ Xamarin มันต้องรันผ่าน Virtual Machine (ไม่ไหว)

เมื่อเราเลือก Native (Java) เป็นที่เรียบร้อยมันจะถามว่าเรามี Project อยู่แล้วหรือเปล่า หรือว่า ยังไม่มีถ้ายังก็ให้ดาวน์โหลด Project ของมันไปเปลี่ยนชื่อ Package เอา ให้เราเลือก New Project แล้วทำตามขั้นตอนไปเลยครับ มันจะมี App Key และ Client Key ให้ใส่

Screen Shot 2558-10-17 at 8.38.58 PM

แตก zip ไฟล์แล้วเปิด Android Studio ขึ้นมา แล้วเลือก Open Existing Project เลือกโฟลเดอร์ที่เราแตก zip ไฟล์ของ Parse เลือก build.gradle รอสักพักก็จะได้ระบบที่พร้อมทำงาน

Screen Shot 2558-10-17 at 9.28.03 PM

ไปที่ 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 ก็ได้ครับ

Screen Shot 2558-10-17 at 8.39.30 PM

ทำการส่งข้อความโดยพิมพ์ว่าอะไรไปก็ได้ครับ

Screen Shot 2558-10-17 at 8.39.36 PM

Screen Shot 2558-10-17 at 8.39.46 PM

เมื่อทำการส่ง ระบบจะปรากฏว่าเราเคยส่งข้อความอะไรไปบ้างแล้วผ่านหน้าจอของ DashBoard ตัวอย่างต่อไปนี้คือหน้าจอแอพพลิเคชันของผมส่วนของ Push Notification และ DashBoard บน Parse.com

Screenshot_2015-10-17-22-11-14

ส่ง Push ไปแล้วครับ ตรวจสอบผ่านระบบ Dash Board เสียหน่อย

Screen Shot 2558-10-17 at 9.56.19 PM

จะเห็นว่าส่ง 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”

Screen Shot 2558-10-17 at 10.36.14 PM

ทีนี้ทำแอพพลิเคชันตรวจ และส่งว่าเราถูกหวยหรือเปล่าก็ง่ายแล้วสิศึกษาบทเรียนอื่นๆ ได้ที่ บทเรียนการพัฒนาแอพพลิเคชัน Android ย้อนหลัง

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน