版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
详细解答可以参考官方帮助文档
使用前必读:移动推送名词解释&约束
本文档适用于V2.3.7及以下版本集成,如果您使用的是V3.0及以上版本请参考:Android SDK 3.0配置
到阿里云移动推送控制台创建应用,应用创建完成以后,进入移动推送相关模块进行设置,具体操作请参见 创建APP。
在应用中完成应用配置,请注意PackageName务必和App的包名一致,否则推送将无法正确初始化。
【注意】使用Gradle构建App时,PackageName的查看:
applicationId设置,默认AndroidManifest.xml中的package属性保持一致,如果不一致,以applicationId为准。

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
android {...sourceSets {main {jniLibs.srcDirs = ['libs']}}}
allprojects {repositories {maven {url 'http://maven.aliyun.com/nexus/content/repositories/releases/'}}}
dependencies {compile 'com.aliyun.ams:alicloud-android-push:2.3.7'}
(开发时可以如上所述指定完整的版本号,也可以指定模糊版本号,gradle自动拉取满足条件的最新版本SDK,如compile 'com.aliyun.ams:alicloud-android-push:2.+')
android-support-v4.jar支持包(v2.3.0以上),关于v4支持包的说明请参考:https://developer.android.com/topic/libraries/support-library/features.html#v4;
<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错误。如果您是百川云推送用户,不能直接使用百川平台的appKey和appSecret,需要登录阿里云移动推送控制台,登录账号为您的百川平台账号,并使用阿里云平台的appKey,appSecret。
<!--阿里移动推送相关权限--><!--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" />
<!-- 通道保持服务 --><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>
将以下receiver片段拷贝进你manifest中的receiver申明区域中:
如果已升级到v3.0.0及以上版本,需将
<!--消息接收监听器--><receiver android:name="您的自定义Receiver(需继承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>
<action android:name="org.agoo.android.intent.action.RECEIVE" />改为<action android:name="com.alibaba.sdk.android.push.RECEIVE" />,否则会接收不到推送。
-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.**
首先通过PushServiceFactory获取到CloudPushService,然后调用register()初始化并注册云推送通道,并确保Application上下文中进行初始化工作。
请参照以下代码段进行初始化:
import android.app.Application;import android.content.Context;import android.util.Log;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";@Overridepublic 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() {@Overridepublic void onSuccess(String response) {Log.d(TAG, "init cloudchannel success");}@Overridepublic void onFailed(String errorCode, String errorMessage) {Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);}});}}
【注意】:
callback.onSuccess()被调用。以上文接入代码为例,logcat将会打印以下日志:
11-24 12:55:51.096 15235-15535/com.alibaba.xxxx D/YourApp﹕ init cloudchannel success
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] AUTH httpStatusCode: 20011-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] status:AUTH_SUCC
cloudPushService.getDeviceId() 获取deviceId,应该能够成功获取。