1 注册百川应用(已有忽略)。
2 下载demo。Android推送 Demo下载
3 把demo导入到 IDE工具中,demo是Gradle构建。运行demo生成apk文件。
4 下载OneSDK 包,设置安全加固。下载onesdk的时候上传的apk和现在工程的签名不一致
请用户先换成android默认签名,然后上传apk下载最新的sdk, 然后只需要更换安全图片就行
之后需要发布正式版本的时候,再换成正式签名之后生成apk,上传apk下载最新的sdk,然后更换安全图片
点击生成SDK并下载解压,将OneSDK 包中的res/drawable/yw_1222.jpg 替换demo中drawable 目录的yw_1222.jpg,勿修改文件名。
因为demo中附的oneSDK版本可能不是最新版,请用下载的oneSDK整体替换demo中的oneSDK。
文件的结构示意如下(文件名和版本随着升级有所变化):
OneSDK |-- AndroidManifest.xml -手动拷贝,可忽略该文件 |-- build.gradle -手动拷贝,可忽略该文件 |-- libs | |-- armeabi | | |-- libcocklogic-1.1.3.so | | |-- libsecuritysdk-3.1.27.so | | `-- libtnet-2.1.24-aliyun.so | |-- armeabi-v7a | | |-- libcocklogic-1.1.3.so | | |-- libsecuritysdk-3.1.27.so | | `-- libtnet-2.1.24-aliyun.so | |-- x86 | | |-- libcocklogic-1.1.3.so -将armeabi,armeabi-v7a,x86下所有so包拷贝到你项目lib对应文件夹下 | | |-- libsecuritysdk-3.1.27.so - 安全黑匣子库 | | `-- libtnet-2.1.24-aliyun.so - 这些是网络连接库及幽灵进程的辅助lib | |-- alicloud-android-push-sdk-2.0.0.jar -阿里云推送主功能包 | |-- utdid4all-1.0.4.jar -设备Id生成包 | |-- alisdk-hotpatch-3.jar - 下面这些Jar文件是阿里云SDK基础包 | |-- alisdk-kernel-1.9.0.jar | |-- alisdk-rpc-3.jar | |-- alisdk-security-7.jar | |-- alisdk-system-14.jar | |-- alisdk-ui-5.jar | |-- alisdk-ut-5.jar | |-- sdk-legacy-support-1.9.0.jar | |-- alisdk-kernel-1.8.1.jar | `-- alisdk-ut-5.jar **如果你的项目中已经引用了阿里云其他产品,并存在这些包,可以不拷贝。 否则请全部拷贝到lib下面 |-- project.properties |-- res -可以忽略res下面的文件 `-- src
5 启动应用,控制台配置推送。
下载SDK参见这里
注意:勾选【云推送】 服务
集成SDK参见这里
注意:SDK中的yw_1222.jpg 安全图片需要放置到App工程的res/drawable 目录中,如果没有drawable 目录可以新建一个,且安全图片的文件名称不可修改。
配置ANDROID权限
将以下uses-permission片段拷贝进你manifest中的Permission申明区域中:
<!--阿里云推送相关权限 --> <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" /> <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.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_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" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" />
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>
Receiver 的配置
将以下receiver片段拷贝进你manifest中的receiver申明区域中:
<!-- 连接心跳保持监听器 --> <receiver android:name="anet.channel.heartbeat.HeartbeatManager$Receiver" > <intent-filter> <action android:name="anetwork.channel.intent.action.COMMAND" /> </intent-filter> </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>
启动云推送包含两个步骤,首先你需要在应用中初始化AlibabaSDK。
然后通过AlibabaSDK去获得到云推送服务实例,并初始化云推送。
(为确保AlibabaSDK加载正常,请你在成功返回的回调方法中初始化云推送。)
请参照以下代码段进行初始化:
import android.app.Application; import android.content.Context; import android.util.Log; import com.alibaba.sdk.android.AlibabaSDK; import com.alibaba.sdk.android.callback.InitResultCallback; import com.alibaba.sdk.android.push.CloudPushService; import com.alibaba.sdk.android.push.CommonCallback; public class AliyunApplication extends Application { private static final String TAG = "AliyunApp"; @Override public void onCreate() { super.onCreate(); //在应用启动时初始化AlibabaSDK initOneSDK(this); } /** * 初始化AlibabaSDK * @param applicationContext */ private void initOneSDK(final Context applicationContext) { AlibabaSDK.asyncInit(applicationContext, new InitResultCallback() { @Override public void onSuccess() { Log.d(TAG, "init onesdk success"); //alibabaSDK初始化成功后,初始化云推送通道 initCloudChannel(applicationContext); } @Override public void onFailure(int code, String message) { Log.e(TAG, "init onesdk failed : " + message); } }); } /** * 初始化云推送通道 * @param applicationContext */ private void initCloudChannel(Context applicationContext) { CloudPushService cloudPushService = AlibabaSDK.getService(CloudPushService.class); if(cloudPushService != null) { cloudPushService.register(applicationContext, new CommonCallback() { @Override public void onSuccess() { Log.d(TAG, "init cloudchannel success"); } @Override public void onFailed(String errorCode, String errorMessage) { Log.d(TAG, "init cloudchannel fail" + "err:" + errorCode + " - message:"+ errorMessage); } }); }else{ Log.i(TAG, "CloudPushService is null"); } } }
注意:
如果设备成功注册,将回调callback.onSuccess方法。每次注册,只会回调一次成功事件。
但如果注册服务器连接失败,则调用callback.onFailed方法,并且自动进行重新注册,直到onSuccess为止。(重试规则会由网络切换等时间自动触发。)
请在网络通畅的情况下进行相关的初始化调试,如果网络不通,或者App信息配置错误,在onFailed方法中,会有相应的错误码返回。
错误名称 | 错误码(Error Code) | 错误描述和解决办法(Error Message) |
---|---|---|
NO_NETWORK | 1101 | 网络不可用 |
REG_FAIL | 1056 | 注册/鉴权失败(请检查AppSecret配置) |
INVAILD_APPKEY | 1052 | AppKey不存在 |
INVAILD_PACKAGENAME | 1053 | 包名与配置的不符 |
INVAILD_APPSECRET | 1054 | Appsecret不合法 |
NETWORK_UNSTABLE | 1105 | 网络不稳定或连接异常 |
INVAILD_SERVER_RETRUN | 1115 | 不合法的服务端返回(请检查返回是否被篡改) |
SYSTEM_UNKNOWN_ERROR | 1108 | 系统未知异常 |
1、 确认DeviceId获取正常:
在代码中使用 cloudPushService.getDeviceId()
获取deviceId
,应该能够成功获取。
2、 确认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
回调方法中日志打印正常(以上边接入代码为例)
11-24 12:55:51.096 15235-15535/com.alibaba.xxxx D/YourApp﹕ init cloudchannel success
进入管理控制台,点击配置,您需要输入您的应用包,输入包名必须与您的Android客户端应用包名保持一致。
配置好以后应用即可推送通知、消息。控制台使用见控制台介绍
通知和消息推送可以通过通过API集成到服务端,对应的API接口:
参见服务端SDK介绍
群号:1074804791