开发者社区> 问答> 正文

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

已解决

展开
收起
2018-07-13 23:59:44 977 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

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

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

    【注意】

    • 如果设备成功注册,将回调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,应该能够成功获取。
    2018-07-15 15:26:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载