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-阿里云