1. 程式人生 > >Android專案整合信鴿推送過程詳解

Android專案整合信鴿推送過程詳解

    推送現在在移動專案開發中已經很常見了,比較常見的推送方式有小米推送、極光推送和個推,今天我們所講解的是Tencent的信鴿推送在Android上的應用。

一、信鴿Android專案環境搭建

1、下載信鴿推送SDK,並整合到自己專案中。

2、配置AndroidManifest.xml,詳情可參加官網開發文件(完全參照也未必成功),可參照我上傳的檔案更改或者參照官方的Demo進行整合。謹記:坑太深,會淹死。

二、註冊專案信鴿ID以及Key

2、按照提示完成註冊,註冊成功後在“配置資訊”中找到ACCESS IDACCESS KEY的值。

3、將得到的ACCESS IDACCESS KEY

的值更換到AndroidManifest.xml中。

下面提供本人在測試中的完整AndroidManifest.xml檔案,僅供參考

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.com.xgpush">


    <!-- 【必須】 信鴿SDK所需許可權 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- 【可選】 信鴿SDK所需許可權 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BATTERY_STATS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 【必須】 (2.30及以上版新增)展示通知的activity -->
        <activity
            android:name="com.tencent.android.tpush.XGPushActivity"
            android:theme="@android:style/Theme.Translucent"
            android:exported="false" >
            <intent-filter>
                <!-- 若使用AndroidStudio,請設定android:name="android.intent.action"-->
                <action android:name="android.intent.action" />
            </intent-filter>
        </activity>

        <!-- 【必須】 信鴿receiver廣播接收 -->
        <receiver
            android:name="com.tencent.android.tpush.XGPushReceiver"
            android:process=":xg_service_v2" >
            <intent-filter android:priority="0x7fffffff" >

                <!-- 【必須】 信鴿SDK的內部廣播 -->
                <action android:name="com.tencent.android.tpush.action.SDK" />
                <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
                <!-- 【必須】 系統廣播:網路切換 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

                <!-- 【可選】 系統廣播:開屏 -->
                <action android:name="android.intent.action.USER_PRESENT" />

                <!-- 【可選】 一些常用的系統廣播,增強信鴿service的復活機會,請根據需要選擇。當然,你也可以新增APP自定義的一些廣播讓啟動service -->
                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
            <!-- 【可選】 usb相關的系統廣播,增強信鴿service的復活機會,請根據需要新增 -->
            <intent-filter android:priority="0x7fffffff" >
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                <action android:name="android.intent.action.MEDIA_REMOVED" />
                <action android:name="android.intent.action.MEDIA_CHECKING" />
                <action android:name="android.intent.action.MEDIA_EJECT" />

                <data android:scheme="file" />
            </intent-filter>
        </receiver>
        <!-- 【必須】 信鴿service -->
        <service
            android:name="com.tencent.android.tpush.service.XGPushService"
            android:exported="true"
            android:persistent="true"
            android:process=":xg_service_v2" />

        <!-- 【必須】 通知service,其中android:name部分要改為當前包名 -->
        <service
            android:name="com.tencent.android.tpush.rpc.XGRemoteService"
            android:exported="true" >
            <intent-filter>
                <!-- 【必須】 請修改為當前APP名包.PUSH_ACTION,如demo的包名為:com.qq.xgdemo -->
                <action android:name="example.com.xgpush.PUSH_ACTION" />
            </intent-filter>
        </service>

        <!-- 已廢棄,可刪除之;若不刪除也不會有任何副作用 -->
        <!--<service
            android:name="com.tencent.android.tpush.service.XGDaemonService"
            android:process=":qq_push_daemon" />
        -->
        <!-- 【可選】信鴿拉起其他APP應用,若應用在本地找不到可以自動下載 -->
        <!--
              <service
            android:name="com.tencent.android.tpush.XGDownloadService"
            android:enabled="true"
            android:exported="false" />
        -->
        <!-- 【必須】 請將YOUR_ACCESS_ID修改為APP的AccessId,“21”開頭的10位數字,中間沒空格 -->
        <meta-data
            android:name="XG_V2_ACCESS_ID"
            android:value="2100217728" />
        <!-- 【必須】 請將YOUR_ACCESS_KEY修改為APP的AccessKey,“A”開頭的12位字串,中間沒空格 -->
        <meta-data
            android:name="XG_V2_ACCESS_KEY"
            android:value="A6D96IFJ1I1C" />
    </application>

</manifest>

三、程式碼開發

1、完成信鴿服務的啟動和APP註冊(常見傳統方法)。

// 開啟logcat輸出,方便debug,釋出時請關閉
// XGPushConfig.enableDebug(this, true);
// 如果需要知道註冊是否成功,請使用registerPush(getApplicationContext(), XGIOperateCallback)帶callback版本
// 如果需要繫結賬號,請使用registerPush(getApplicationContext(),account)版本
// 具體可參考詳細的開發指南
// 傳遞的引數為ApplicationContext
Context context = getApplicationContext();
XGPushManager.registerPush(context);    
 
// 2.36(不包括)之前的版本需要呼叫以下2行程式碼
Intent service = new Intent(context, XGPushService.class);
context.startService(service);
 
 
// 其它常用的API:
// 繫結賬號(別名)註冊:registerPush(context,account)或registerPush(context,account, XGIOperateCallback),其中account為APP賬號,可以為任意字串(qq、openid或任意第三方),業務方一定要注意終端與後臺保持一致。
// 取消繫結賬號(別名):registerPush(context,"*"),即account="*"為取消繫結,解綁後,該針對該賬號的推送將失效
// 反註冊(不再接收訊息):unregisterPush(context)
// 設定標籤:setTag(context, tagName)
// 刪除標籤:deleteTag(context, tagName)

2、完成信鴿服務的啟動和APP註冊(列印Log資訊)。

//為測試方便設定,釋出上線時設定為false
XGPushConfig.enableDebug(this, true);
//註冊方法
XGPushManager.registerPush(this, new XGIOperateCallback() {
    @Override
    public void onSuccess(Object data, int flag) {
        Log.v("TPush", "註冊成功,Token值為:" + data);
    }

    @Override
    public void onFail(Object data, int errCode, String msg) {
        Log.v("TPush", "註冊失敗,錯誤碼為:" + errCode + ",錯誤資訊:" + msg);
    }
});

圖1、成功註冊啟動服務效果圖

3、獲取推送訊息

@Override
protected void onStart() {
    super.onStart();
    XGPushClickedResult clickedResult = XGPushManager.onActivityStarted(this);
    if(clickedResult != null){
        String title = clickedResult.getTitle();
        Log.v("TPush", "title:" + title);
        String id = clickedResult.getMsgId() + "";
        Log.v("TPush", "id:" + id);
        String content = clickedResult.getContent();
        Log.v("TPush", "content:" + content);
    }
}

四、信鴿Web推送步驟

1、在信鴿Web頁面進行訊息推送

2、推送成功返回值

3、客戶端接收資訊

五、環境搭建常見問題

1.

出現該問題是因為你專案裡面其他地方也有supportV4的包,刪除掉libs中的那個v4包即可解決問題。

2.

EclipseAS的開發不一樣,該提示是說AS中找不到庫檔案,因為AS是不能直接識別這些檔案的,新增.so檔案需在build.gradle中修改配置檔案

3.

原因:XG的服務沒有定義

解決方案:
1
、檢查ApplicationId和包名是否一致。

2、莫名原因若干,上述方案若未解決,推薦最好使用官方提供DemoAndroidManifest.xml進行修改。

Good luck!

Write by Jimmy.li