702
阿裏雲
Android SDK配置__Android SDK手冊_App SDK 手冊_移動推送-阿裏雲
使用前必讀:移動推送名詞解釋&約束
1. 創建應用
到阿裏雲移動推送控製台創建應用,應用創建完成以後,進入移動推送相關模塊進行設置,具體操作請參見 創建APP。
在應用中完成應用配置,請注意PackageName務必和App的包名一致,否則推送將無法正確初始化。
【注意】使用Gradle構建App時,PackageName的查看:
- 查看AndroidManifest.xml中根元素package屬性;
- 查看工程build.gradle中
applicationId
設置,默認AndroidManifest.xml中的package屬性保持一致,如果不一致,以applicationId為準。
2. SDK下載和集成
2.1 SDK下載
2.2 SDK目錄結構
OneSDK
|-- AndroidManifest.xml
|-- build.gradle
|-- libs
| |-- armeabi
| | |-- libcocklogic.so -網絡連接庫及幽靈進程的輔助lib
| | |-- libtnet.so
| |-- armeabi-v7a
| | |-- libcocklogic.so
| | |-- libtnet.so
| |-- arm64-v8a
| | |-- libcocklogic.so
| | |-- libtnet.so
| |-- x86
| | |-- libcocklogic.so
| | |-- libtnet.so
| |-- arm64
| | |-- libcocklogic.so
| | |-- libtnet.so
| |-- alicloud-android-push-sdk.jar -移動推送主功能包
| |-- alisdk-ut.jar -UT基礎包
| |-- utdid4all.jar -設備Id生成包
|-- project.properties
|-- src
2.3 SDK集成:
- 請在工程中添加
android-support-v4.jar
支持包(v2.3.0以上),關於v4支持包的說明請參考:https://developer.android.com/topic/libraries/support-library/features.html#v4; - 手動拷貝下載SDK中的libs目錄,手動拷貝後需要在APP工程的build.gradle中配置jniLibs的目錄:
android {
...
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
3. 配置AndroidManifest.xml
3.1 appkey和appsecret配置
<application android:name="*****">
<meta-data android:name="com.alibaba.app.appkey" android:value="*****"/> <!-- 請填寫你自己的- appKey -->
<meta-data android:name="com.alibaba.app.appsecret" android:value="****"/> <!-- 請填寫你自己的appSecret -->
</application>
com.alibaba.app.appkey
和com.alibaba.app.appsecret
為您App的對應信息,在推送控製台APP列表
頁的應用證書
中獲取。appkey和appsecret請務必寫在application標簽下,否則sdk會報找不到appkey錯誤。
3.2 Permission 的配置
- 將以下uses-permission片段拷貝進你manifest中的Permission申明區域中:
<!--阿裏移動推送相關權限-->
<!--Android 6.0版本可去除,用於選舉信息(通道複用)的同步-->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--進行網絡訪問和網絡狀態監控相關的權限聲明-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允許對sd卡進行讀寫操作-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--網絡庫使用,當網絡操作時需要確保事務完成不被殺掉-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--用於讀取手機硬件信息等,用於機型過濾-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--選舉使用,當應用有刪除或者更新時需要重新選舉,複用推送通道-->
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<!--補償通道小米PUSH使用,不用可去除-->
<uses-permission android:name="android.permission.GET_TASKS" />
<!--補償通道GCM使用,不使用可去除-->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!--允許監聽啟動完成事件-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--允許訪問震動器-->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允許task重排序 -->
<uses-permission android:name="android.permission.REORDER_TASKS" />
3.3 Service 的配置
- 將以下service片段拷貝進你Manifest中的service申明區域中:
<!-- 通道保持服務 -->
<service android:name="com.alibaba.sdk.android.push.ChannelService"
android:exported="true" android:process=":channel">
<intent-filter>
<action android:name="com.taobao.accs.intent.action.SERVICE"/>
</intent-filter>
<intent-filter>
<action android:name="org.agoo.android.intent.action.PING_V4" />
<category android:name="taobao" />
</intent-filter>
</service>
<!-- 消息接收服務 -->
<service android:name="com.alibaba.sdk.android.push.MsgService"
android:exported="false">
<intent-filter>
<action android:name="com.taobao.accs.intent.action.RECEIVE" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.NOTIFY_ACTION" />
</intent-filter>
</service>
<!-- 消息接收增強服務(可提高通知/消息達到率)-->
<service android:name="com.alibaba.sdk.android.push.channel.TaobaoRecvService" android:exported="true">
<intent-filter>
<action android:name="org.android.agoo.client.MessageReceiverService"/>
</intent-filter>
</service>
3.4 Receiver 的配置
將以下receiver片段拷貝進你manifest中的receiver申明區域中:
<!--消息接收監聽器-->
<receiver android:name="com.alibaba.sdk.android.push.MessageReceiver">
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/>
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED"/>
</intent-filter>
<intent-filter>
<action android:name="com.taobao.accs.intent.action.COMMAND" />
</intent-filter>
<intent-filter>
<action android:name="com.taobao.taobao.intent.action.COMMAND" />
</intent-filter>
<intent-filter>
<action android:name="org.agoo.android.intent.action.RECEIVE" />
</intent-filter>
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
4. Proguard配置
-keepclasseswithmembernames class ** {
native <methods>;
}
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.taobao.** {*;}
-keep class com.alibaba.** {*;}
-keep class com.alipay.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-dontwarn com.alipay.**
-keep class com.ut.** {*;}
-dontwarn com.ut.**
-keep class com.ta.** {*;}
-dontwarn com.ta.**
-keep class anet.**{*;}
-keep class org.android.spdy.**{*;}
-keep class org.android.agoo.**{*;}
-dontwarn anet.**
-dontwarn org.android.spdy.**
-dontwarn org.android.agoo.**
5. 在應用中注冊和啟動移動推送
首先通過
PushServiceFactory
獲取到CloudPushService
,然後調用register()
初始化並注冊雲推送通道,並確保Application上下文中進行初始化工作。請參照以下代碼段進行初始化:
import android.app.Application;
import android.content.Context;
import android.util.Log;
import com.alibaba.sdk.android.callback.InitResultCallback;
import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
public class MainApplication extends Application {
private static final String TAG = "Init";
@Override
public void onCreate() {
super.onCreate();
initCloudChannel(this);
}
/**
* 初始化雲推送通道
* @param applicationContext
*/
private void initCloudChannel(Context applicationContext) {
PushServiceFactory.init(applicationContext);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.register(applicationContext, new CommonCallback() {
@Override
public void onSuccess(String response) {
Log.d(TAG, "init cloudchannel success");
}
@Override
public void onFailed(String errorCode, String errorMessage) {
Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
}
});
}
}
【注意】:
- 如果設備成功注冊,將回調callback.onSuccess()方法。
- 但如果注冊服務器連接失敗,則調用callback.onFailed方法,並且自動進行重新注冊,直到onSuccess為止。(重試規則會由網絡切換等時間自動觸發。)
- 請在網絡通暢的情況下進行相關的初始化調試,如果網絡不通,或者App信息配置錯誤,在onFailed方法中,會有相應的錯誤碼返回,可參考錯誤處理。
啟動正常確認方法:
- 回調方法中日誌打印正常(以上邊接入代碼為例)
11-24 12:55:51.096 15235-15535/com.alibaba.xxxx D/YourApp﹕ init cloudchannel success
- 確認cloudchannel初始化正常,在logcat日誌中:輸入awcn關鍵字:
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] AUTH httpStatusCode: 200
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] status:AUTH_SUCC
- 確認DeviceId獲取正常:在初始化成功後使用
cloudPushService.getDeviceId()
獲取deviceId
,應該能夠成功獲取。
最後更新:2016-12-18 12:34:37
上一篇:
鑒權Action__OpenAPI RAM鑒權_OpenAPI 2.0_移動推送-阿裏雲
下一篇:
SDK API介紹__Android SDK手冊_App SDK 手冊_移動推送-阿裏雲
User__數據類型_RAM API文檔_訪問控製-阿裏雲
刪除域名接口__域名管理接口_Open API_HTTPDNS-阿裏雲
創建函數__數據庫開發_用戶指南(RDBMS)_數據管理-阿裏雲
設置文件HTTP頭__管理文件_控製台用戶指南_對象存儲 OSS-阿裏雲
其他HPC應用__應用場景_產品簡介_高性能計算-阿裏雲
如何獲取真實來源IP__常見問題_負載均衡-阿裏雲
性能白皮書__產品白皮書_雲數據庫 RDS 版-阿裏雲
申請內網連接串(原內外網切換)__實例管理_API 參考_雲數據庫 RDS 版-阿裏雲
如何給應用簽名__使用手冊_移動安全-阿裏雲
命令行快速開始1__快速入門_批量計算-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲