Android專案整合信鴿推送過程詳解
阿新 • • 發佈:2019-02-05
推送現在在移動專案開發中已經很常見了,比較常見的推送方式有小米推送、極光推送和個推,今天我們所講解的是Tencent的信鴿推送在Android上的應用。
一、信鴿Android專案環境搭建
1、下載信鴿推送SDK,並整合到自己專案中。
2、配置AndroidManifest.xml,詳情可參加官網開發文件(完全參照也未必成功),可參照我上傳的檔案更改或者參照官方的Demo進行整合。謹記:坑太深,會淹死。
二、註冊專案信鴿ID以及Key。
2、按照提示完成註冊,註冊成功後在“配置資訊”中找到ACCESS ID和ACCESS KEY的值。
3、將得到的ACCESS ID和ACCESS KEY
下面提供本人在測試中的完整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.
Eclipse和AS的開發不一樣,該提示是說AS中找不到庫檔案,因為AS是不能直接識別這些檔案的,新增.so檔案需在build.gradle中修改配置檔案
3.
原因:XG的服務沒有定義
解決方案:
1、檢查ApplicationId和包名是否一致。
2、莫名原因若干,上述方案若未解決,推薦最好使用官方提供Demo將AndroidManifest.xml進行修改。
Good luck!
Write by Jimmy.li