1. 程式人生 > >Android 應用整合 LeanCloud 推送服務

Android 應用整合 LeanCloud 推送服務

推送服務是喚醒使用者繼續使用App的一種手段,今天花時間瞭解LeanCloud的推送服務,讀了下大概的文件,再結合Demo把推送服務整合到了西源坊的App中。羅列了一下開發的流程以及遇到的一些問題總結:

第一步:註冊賬號,建立應用

註冊賬號是普通的註冊流程,應用是對接App的一個LeanCloud應用,建立好應用之後會分配 AppID,AppKey,這兩個引數非常重要,App端需要根據這兩個引數來對接到LeanCloud中建立的應用。

第二步:配置App開發環境

官方文件寫的還是比較清晰,基本能讀懂,這樣我們就可以對著文件來一步步設定。

  1. 配置專案的build.gradle,主要是設定LeanCloud的maven倉庫地址

    buildscript {
        repositories {
            jcenter()
            maven {
             url "http://mvn.leancloud.cn/nexus/content/repositories/releases"
            }
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
            maven {
                url "http://mvn.leancloud.cn/nexus/content/repositories/releases"
            }
        }
    }
    

    新增的兩行是leancloud的maven地址。這裡有可能遇到的一個問題: >>>“Gradle: resolve dependancies '_debugCompile'” or 'detachedConfiguration1'`,

    Android Studio一直處於掛起的狀態,始終停在_debugCompile的狀態。有可能是Android Studio的問題,也有可能是網路問題,但具體問題不祥。解決的辦法之一是:把Gradle設定為work offline模式。
    work offline 2. 配置app目錄下的build.gradle,主要是指定LeanCloud所必須的依賴包:

    android {
        //為了解決部分第三方庫重複打包了META-INF的問題
        packagingOptions{
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
        }
        lintOptions {
            abortOnError false
        }
    }
    
    dependencies {
    
      //avoscloud-sdk 為 LeanCloud基礎包
      compile 'cn.leancloud.android:avoscloud-sdk:v3.+'
    
      //avoscloud-push 與 Java-WebSocket 為推送與IM需要的包
      compile 'cn.leancloud.android:avoscloud-push:[email protected]'
      compile 'cn.leancloud.android:Java-WebSocket:1.2.0-leancloud'
    
      //avoscloud-statistics 為 LeanCloud 統計包
      compile 'cn.leancloud.android:avoscloud-statistics:[email protected]'
    }
    

    需要注意的是:推送服務也必須包含Java-WebSocket包,否則推送的時候會出現類似ClassNotFoundError的錯誤。

基本的配置就完成了,接下來就是更新APP中的程式碼。

第三步:配置AndroidManifest

  1. 確保app設定了基本網路相關的許可權

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    
    1. 指定PushService

  2. <application>中指定AVBroadcastReceiver,App能在關閉的情況下也可以收到推送

    <receiver android:name="com.avos.avoscloud.AVBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    

第四步:初始化LeanCloud資訊

在應用訪問 LeanCloud 之前,需要使用 AppID 和 AppKey 在程式碼中對 LeanCloud SDK 進行初始化。

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化應用資訊
        AVOSCloud.initialize(this, "your app id", "your app key");
        // 啟用崩潰錯誤統計
        AVAnalytics.enableCrashReport(this.getApplicationContext(), true);
        AVOSCloud.setLastModifyEnabled(true);
        AVOSCloud.setDebugLogEnabled(true);
}

第五步:儲存 Installation

Installation 是 LeanCloud中定義的一個和App所在的裝置關聯的一個類,它能唯一定位到具體的哪臺裝置。在App啟動的時候需要把Installation儲存到LeanCloud平臺。

AVInstallation.getCurrentInstallation().saveInBackground(new SaveCallback() {
        @Override
        public void done(AVException e) {
            String installationId = AVInstallation.getCurrentInstallation().getInstallationId();
        }
});

這段程式碼在應用啟動的時候呼叫,通常就是你的MainActivity,此外在它儲存到LeanCloud的時候,它還有一個回撥方法,這個方法能方便你用installationId做資料關聯。

第六步:啟動推送服務,設定預設開啟的Activity

 PushService.setDefaultPushCallback(this, MainActivity.class);

到此為止,App端的工作已經完成,現在就可以在LeanCloud平臺手動傳送推送測試是否正常。你會看到應用啟動成功後,LeanCloud平臺會新增一條Installation記錄。
leancloud_installation

現在選擇線上傳送的推送方式來測試:

leancloud_push

傳送成功後,app就收到了推送訊息:
message

接下來的任務如何通過API在服務端控制推送的業務邏輯,不過這是另外一個話題了,會另外開篇文章。


關注公眾號「Python之禪」(id:vttalk)獲取最新文章 python之禪