12/08/2018, 11:56

Tạo push notification với XtremePush

Chào các bạn, hôm nay mình giới thiệu với các bạn một service cho phép chúng ta có thể gửi push notification tới các device khác nhau đó là XtremePush. Tại sao mình lại ham hố chọn chủ đề này, à tại vì là thấy nó ứng dụng nhiều mà chưa thấy có nhiều bài viết tiếng việt giới thiệu về cái này. Đầu ...

Chào các bạn, hôm nay mình giới thiệu với các bạn một service cho phép chúng ta có thể gửi push notification tới các device khác nhau đó là XtremePush. Tại sao mình lại ham hố chọn chủ đề này, à tại vì là thấy nó ứng dụng nhiều mà chưa thấy có nhiều bài viết tiếng việt giới thiệu về cái này.

Đầu tiên chúng ta cần có một tài khoản google console. Sau đó tạo một project google console, vào APIs & auth tạo một server key. Copy chúng lại. Vào API -> Google Clound Message và enable nó. Tiếp theo chúng ta cần có một tài khoản XtremePush(Có thể đăng ký tại xtremepush.com). Sau khi đăng nhập XtremePush, tạo project mới. Vào apps setting và copy APP key lại.

Mở android studio tạo project với package: com.framgia.push. Download sdk tại địa chỉ sau: https://s3-eu-west-1.amazonaws.com/xtremepush-libs/XtremePush-android-a-26072015.zip

Tiếp đến tạo một thư mục aars sau đó chuyển file sdk vừa download về vào thư mục. Tham khảo hình: Screenshot from 2015-09-28 10:36:23.png Thêm thư viện ExtremePush tới dependencies:

compile(name:'XtremePush_lib', ext:'aar')

Thêm version của Android Support Version mới nhất:

compile "com.android.support:support-v4:22.0.0"

Cũng thêm version Google play services:

`compile 'com.google.android.gms:play-services-gcm:+'`

`compile 'com.google.android.gms:play-services-location:+'`

Cuối cùng add các dependencies:

compile 'com.google.code.gson:gson:2.3.1'
compile 'com.loopj.android:android-async-http:1.4.6'
compile 'com.squareup:otto:1.3.6'

Sync cho project.

Tiếp đến cùng Modify file AndroidManifest.xml: Về permission cho Extremepush và Google clound message:

 
<uses-permission android:name="android.permission.INTERNET" />
 
<uses-permission android:name="android.permission.WAKE_LOCK" />

  
  
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 
<uses-feature
    android:name="android.hardware.bluetooth_le"
    android:required="false" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
     
     
    <permission android:name="com.framgia.push.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="com.framgia.push.permission.C2D_MESSAGE" />

Tiếp tới các activity và service:

<activity
            android:name="ie.imobile.extremepush.ui.DisplayPushActivity"
            android:label="Push received"
            android:theme="@android:style/Theme.Dialog"
            android:exported="false" />

        <activity
            android:name="ie.imobile.extremepush.ui.WebViewActivity"
            android:exported="false" />

         
        <service
            android:name="ie.imobile.extremepush.location.ProxymityAlertReceiver"/>

        <activity
            android:name="ie.imobile.extremepush.ui.LocationDialogActivity"
            android:label="Locations are not available"
            android:theme="@android:style/Theme.Dialog"
            android:exported="false" />

         
        <service android:name="ie.imobile.extremepush.beacons.BeaconLocationService" />

        <service android:enabled="true"
            android:exported="true"
            android:isolatedProcess="false"
            android:label="iBeacon"
            android:name="com.radiusnetworks.ibeacon.service.IBeaconService">
        </service>

         
        <service android:enabled="true"
            android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
            <meta-data android:name="background" android:value="true" />
            <intent-filter
                android:priority="1" >
                <action android:name="com.framgia.push.DID_RANGING" />
                <action android:name="com.framgia.push.DID_MONITORING" />
            </intent-filter>
        </service>
        <service android:name="ie.imobile.extremepush.GCMIntentService" />

        <receiver
            android:name="ie.imobile.extremepush.receivers.GCMReceiver"
            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" />
                <action android:name="ie.imobile.extremepush.BEACON_SERVICE_STARTED" />
                 
                <category android:name="com.framgia.push" />
            </intent-filter>
        </receiver>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

Để ứng dụng connect được Extremepush chúng ta cần thêm vào class MainActivity.java:

 private static final String GOOGLE_PROJECT_NUMBER = "nhập id của project google console của bạn ở đây";
 private static final String XTREME_PUSH_APP_KEY = "Nhập key của project, cái mà đã tạo lúc đầu trên trang extremepush.com vào đây";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 // INITIALISE THE XTREMEPUSH CONNECTOR HERE
 mPushConnector = new PushConnector.Builder(XTREME_PUSH_APP_KEY, GOOGLE_PROJECT_NUMBER)
 .create(this);
 mPushConnector.setShowAlertDialog(true);
 }

Đồng thời thêm các event của extremepush vào tương ứng với các event của activity:

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 //XtremePush onActivityResult Callback
 mPushConnector.onActivityResult(requestCode, resultCode, data);
 }

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//XtremePush onNewIntent Callback
mPushConnector.onNewIntent(intent);
}

@Override
protected void onStart() {
super.onStart();
//XtremePush onStart Callback
mPushConnector.onStart(this);
}

@Override
protected void onResume() {
super.onResume();
//XtremePush onResume Callback
mPushConnector.onResume(this);
}

@Override
protected void onPause() {
super.onPause();
//XtremePush onPause Callback
mPushConnector.onPause(this);
}

@Override
protected void onStop() {
super.onStop();
//XtremePush onStop Callback
mPushConnector.onStop(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
//XtremePush onDestroy Callback
mPushConnector.onDestroy(this);
}

Nhập google server key(ở chỗ nút change như trong hình bạn nhé) và android bundle id vào như hình sau: Screenshot from 2015-09-28 15:28:20.png

Vậy là xong. Giờ chạy app lần đầu để nó đăng ký với extremepush. Muốn gửi push notification chỉ cần vào CREATE CAMPAIGN và chọn create a push message. Sau đó nhập thông tin vào form sau đó nhấn review and send push.

Qua lần ngâm cứu tháng này mình biết được thêm một service có thể tự động gửi push hoặc tự gửi push tới device miễn phí, nó thực sự tiện lợi hơn là tự làm server rất nhiều.. Có thời gian sẽ ngâm cứu thêm, mình nghĩ nó cũng có nhiều ứng dụng, ví như bạn có thể tự làm cho mình 1 app kiểu mấy giờ thì gửi push cho 1 nhóm người thân nghỉ ngơi, đi làm, .... Cảm ơn sự giới thiệu và support của anh Nguyễn Viết Mạnh. Bài viết của mình có tham khảo từ trang: https://dashboard.xtremepush.com/docs/libs/android_start/

Dưới đây là link download cả project mà mình đã thực hành và test thành công. Bạn có thể download về tham khảo: https://drive.google.com/file/d/0B7td9WR1ZtQ0TGRiRGhkWFNmSHM/view?usp=sharing và file apk, mình đã cài đặt sẵn là sẽ tự động gửi push notification hàng ngày vào lúc 22h đêm, cài đặt này sẽ hết hạn vào năm 2016             </div>
            
            <div class=

0