全部产品
移动推送

Android SDK配置(V2.3.7及以下版本)

更新时间:2017-06-07 13:26:11   分享:   

使用前必读:移动推送名词解释&约束

Android参考Demo

本文档适用于V2.3.7及以下版本集成,如果您使用的是V3.0及以上版本请参考:Android SDK 3.0配置

一. 创建应用


到阿里云移动推送控制台创建应用,应用创建完成以后,进入移动推送相关模块进行设置,具体操作请参见 创建APP

在应用中完成应用配置,请注意PackageName务必和App的包名一致,否则推送将无法正确初始化。

【注意】使用Gradle构建App时,PackageName的查看:

  • 查看AndroidManifest.xml中根元素package属性;
  • 查看工程build.gradle中applicationId设置,默认AndroidManifest.xml中的package属性保持一致,如果不一致,以applicationId为准。

配置

二. SDK下载和集成


2.1 手动集成SDK

2.1.1 SDK下载

Android-SDK-Download

2.1.2 SDK目录结构

  1. OneSDK
  2. |-- AndroidManifest.xml
  3. |-- build.gradle
  4. |-- libs
  5. | |-- armeabi
  6. | | |-- libcocklogic.so -网络连接库及幽灵进程的辅助lib
  7. | | |-- libtnet.so
  8. | |-- armeabi-v7a
  9. | | |-- libcocklogic.so
  10. | | |-- libtnet.so
  11. | |-- arm64-v8a
  12. | | |-- libcocklogic.so
  13. | | |-- libtnet.so
  14. | |-- x86
  15. | | |-- libcocklogic.so
  16. | | |-- libtnet.so
  17. | |-- arm64
  18. | | |-- libcocklogic.so
  19. | | |-- libtnet.so
  20. | |-- alicloud-android-push-sdk.jar -移动推送主功能包
  21. | |-- alisdk-ut.jar -UT基础包
  22. | |-- utdid4all.jar -设备Id生成包
  23. |-- project.properties
  24. |-- src

2.1.3 SDK集成:

  • 手动拷贝下载SDK中的libs目录,手动拷贝后需要在APP工程的build.gradle中配置jniLibs的目录:
  1. android {
  2. ...
  3. sourceSets {
  4. main {
  5. jniLibs.srcDirs = ['libs']
  6. }
  7. }
  8. }

2.2 Maven集成

  • 项目顶层build.gradle中添加Maven仓库地址:
  1. allprojects {
  2. repositories {
  3. maven {
  4. url 'http://maven.aliyun.com/nexus/content/repositories/releases/'
  5. }
  6. }
  7. }
  • gradle添加依赖:
  1. dependencies {
  2. compile 'com.aliyun.ams:alicloud-android-push:2.3.7'
  3. }

开发时可以如上所述指定完整的版本号,也可以指定模糊版本号,gradle自动拉取满足条件的最新版本SDK,如compile 'com.aliyun.ams:alicloud-android-push:2.+'

2.3 Android支持包添加

三. 配置AndroidManifest.xml


3.1 appkey和appsecret配置

  1. <application android:name="*****">
  2. <meta-data android:name="com.alibaba.app.appkey" android:value="*****"/> <!-- 请填写你自己的- appKey -->
  3. <meta-data android:name="com.alibaba.app.appsecret" android:value="****"/> <!-- 请填写你自己的appSecret -->
  4. </application>

com.alibaba.app.appkeycom.alibaba.app.appsecret为您App的对应信息,在推送控制台APP列表页的应用证书中获取。appkey和appsecret请务必写在application标签下,否则sdk会报找不到appkey错误。如果您是百川云推送用户,不能直接使用百川平台的appKey和appSecret,需要登录阿里云移动推送控制台,登录账号为您的百川平台账号,并使用阿里云平台的appKey,appSecret。

3.2 Permission 的配置


  • 将以下uses-permission片段拷贝进你manifest中的Permission申明区域中:
  1. <!--阿里移动推送相关权限-->
  2. <!--Android 6.0版本可去除,用于选举信息(通道复用)的同步-->
  3. <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  4. <!--进行网络访问和网络状态监控相关的权限声明-->
  5. <uses-permission android:name="android.permission.INTERNET" />
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  8. <!--允许对sd卡进行读写操作-->
  9. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  10. <!--网络库使用,当网络操作时需要确保事务完成不被杀掉-->
  11. <uses-permission android:name="android.permission.WAKE_LOCK" />
  12. <!--用于读取手机硬件信息等,用于机型过滤-->
  13. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  14. <!--选举使用,当应用有删除或者更新时需要重新选举,复用推送通道-->
  15. <uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
  16. <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
  17. <uses-permission android:name="android.permission.RESTART_PACKAGES" />
  18. <!--补偿通道小米PUSH使用,不用可去除-->
  19. <uses-permission android:name="android.permission.GET_TASKS" />
  20. <!--补偿通道GCM使用,不使用可去除-->
  21. <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  22. <!--允许监听启动完成事件-->
  23. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  24. <!--允许访问震动器-->
  25. <uses-permission android:name="android.permission.VIBRATE" />
  26. <!-- 允许task重排序 -->
  27. <uses-permission android:name="android.permission.REORDER_TASKS" />

3.3 Service 的配置


  • 将以下service片段拷贝进你Manifest中的service申明区域中:
  1. <!-- 通道保持服务 -->
  2. <service android:name="com.alibaba.sdk.android.push.ChannelService"
  3. android:exported="true" android:process=":channel">
  4. <intent-filter>
  5. <action android:name="com.taobao.accs.intent.action.SERVICE"/>
  6. </intent-filter>
  7. <intent-filter>
  8. <action android:name="org.agoo.android.intent.action.PING_V4" />
  9. <category android:name="taobao" />
  10. </intent-filter>
  11. </service>
  12. <!-- 消息接收服务 -->
  13. <service android:name="com.alibaba.sdk.android.push.MsgService"
  14. android:exported="false">
  15. <intent-filter>
  16. <action android:name="com.taobao.accs.intent.action.RECEIVE" />
  17. </intent-filter>
  18. <intent-filter>
  19. <action android:name="com.alibaba.sdk.android.push.NOTIFY_ACTION" />
  20. </intent-filter>
  21. </service>
  22. <!-- 消息接收增强服务(可提高通知/消息达到率)-->
  23. <service android:name="com.alibaba.sdk.android.push.channel.TaobaoRecvService" android:exported="true">
  24. <intent-filter>
  25. <action android:name="org.android.agoo.client.MessageReceiverService"/>
  26. </intent-filter>
  27. </service>

3.4 Receiver 的配置


将以下receiver片段拷贝进你manifest中的receiver申明区域中:

  1. <!--消息接收监听器-->
  2. <receiver android:name="您的自定义Receiver(需继承com.alibaba.sdk.android.push.MessageReceiver)">
  3. <intent-filter>
  4. <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/>
  5. </intent-filter>
  6. <intent-filter>
  7. <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED"/>
  8. </intent-filter>
  9. <intent-filter>
  10. <action android:name="com.taobao.accs.intent.action.COMMAND" />
  11. </intent-filter>
  12. <intent-filter>
  13. <action android:name="com.taobao.taobao.intent.action.COMMAND" />
  14. </intent-filter>
  15. <intent-filter>
  16. <action android:name="org.agoo.android.intent.action.RECEIVE" />
  17. </intent-filter>
  18. <intent-filter>
  19. <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  20. </intent-filter>
  21. <intent-filter>
  22. <action android:name="android.intent.action.USER_PRESENT" />
  23. </intent-filter>
  24. <intent-filter>
  25. <action android:name="android.intent.action.BOOT_COMPLETED"/>
  26. </intent-filter>
  27. <intent-filter>
  28. <action android:name="android.intent.action.PACKAGE_REMOVED"/>
  29. <data android:scheme="package"/>
  30. </intent-filter>
  31. </receiver>
如果已升级到v3.0.0及以上版本,需将<action android:name="org.agoo.android.intent.action.RECEIVE" />改为<action android:name="com.alibaba.sdk.android.push.RECEIVE" />,否则会接收不到推送。

四. Proguard配置


  1. -keepclasseswithmembernames class ** {
  2. native <methods>;
  3. }
  4. -keepattributes Signature
  5. -keep class sun.misc.Unsafe { *; }
  6. -keep class com.taobao.** {*;}
  7. -keep class com.alibaba.** {*;}
  8. -keep class com.alipay.** {*;}
  9. -dontwarn com.taobao.**
  10. -dontwarn com.alibaba.**
  11. -dontwarn com.alipay.**
  12. -keep class com.ut.** {*;}
  13. -dontwarn com.ut.**
  14. -keep class com.ta.** {*;}
  15. -dontwarn com.ta.**
  16. -keep class anet.**{*;}
  17. -keep class org.android.spdy.**{*;}
  18. -keep class org.android.agoo.**{*;}
  19. -dontwarn anet.**
  20. -dontwarn org.android.spdy.**
  21. -dontwarn org.android.agoo.**

五. 在应用中注册和启动移动推送


  • 首先通过PushServiceFactory获取到CloudPushService,然后调用register()初始化并注册云推送通道,并确保Application上下文中进行初始化工作。

  • 请参照以下代码段进行初始化:

  1. import android.app.Application;
  2. import android.content.Context;
  3. import android.util.Log;
  4. import com.alibaba.sdk.android.callback.InitResultCallback;
  5. import com.alibaba.sdk.android.push.CloudPushService;
  6. import com.alibaba.sdk.android.push.CommonCallback;
  7. import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
  8. public class MainApplication extends Application {
  9. private static final String TAG = "Init";
  10. @Override
  11. public void onCreate() {
  12. super.onCreate();
  13. initCloudChannel(this);
  14. }
  15. /**
  16. * 初始化云推送通道
  17. * @param applicationContext
  18. */
  19. private void initCloudChannel(Context applicationContext) {
  20. PushServiceFactory.init(applicationContext);
  21. CloudPushService pushService = PushServiceFactory.getCloudPushService();
  22. pushService.register(applicationContext, new CommonCallback() {
  23. @Override
  24. public void onSuccess(String response) {
  25. Log.d(TAG, "init cloudchannel success");
  26. }
  27. @Override
  28. public void onFailed(String errorCode, String errorMessage) {
  29. Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
  30. }
  31. });
  32. }
  33. }

【注意】

  • 如果设备成功注册,将回调callback.onSuccess()方法。
  • 但如果注册服务器连接失败,则调用callback.onFailed方法,并且自动进行重新注册,直到onSuccess为止。(重试规则会由网络切换等时间自动触发。)
  • 请在网络通畅的情况下进行相关的初始化调试,如果网络不通,或者App信息配置错误,在onFailed方法中,会有相应的错误码返回,可参考错误处理

启动正常确认方法:

  • 回调方法callback.onSuccess()被调用。以上文接入代码为例,logcat将会打印以下日志:
  1. 11-24 12:55:51.096 15235-15535/com.alibaba.xxxx D/YourApp init cloudchannel success
  • 确认cloudchannel初始化正常,在logcat日志中:输入awcn关键字:
  1. 11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn |[seq:AWCN1_1] AUTH httpStatusCode: 200
  2. 11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn |[seq:AWCN1_1] status:AUTH_SUCC
  • 确认DeviceId获取正常:在初始化成功后使用 cloudPushService.getDeviceId() 获取deviceId,应该能够成功获取。
本文导读目录
本文导读目录
以上内容是否对您有帮助?