详细解答可以参考官方帮助文档
使用前必读:移动推送名词解释&约束
本文档适用于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";
@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()
被调用。以上文接入代码为例,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: 200
11-24 12:53:51.036 15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] status:AUTH_SUCC
cloudPushService.getDeviceId()
获取deviceId
,应该能够成功获取。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。