Android SDK介绍

更新时间:2016/05/05 访问次数:63814

根据Demo学推送

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 启动应用,控制台配置推送。

客户端接入

1.1、SDK下载集成

下载SDK参见这里

注意:勾选【云推送】 服务

集成SDK参见这里

注意:SDK中的yw_1222.jpg 安全图片需要放置到App工程的res/drawable 目录中,如果没有drawable 目录可以新建一个,且安全图片的文件名称不可修改。

1.2、配置AndroidManifest.xml

配置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>

1.3、在应用中注册和启动云推送

启动云推送包含两个步骤,首先你需要在应用中初始化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方法中,会有相应的错误码返回。

  • 移动推送Android SDK错误码说明
错误名称 错误码(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

FAQ

关于此文档暂时还没有FAQ
返回
顶部