2016-08-16_CocoSDK接入开发文档V1.1.1

来源:互联网 发布:阿里云服务器购买流程 编辑:程序博客网 时间:2024/06/10 10:47

CocoSDK接入开发文档

文档版本:V1.1.1
修订日期:2016-08-16

O、更新日志

2016-08-16 V1.1.1更新日志:

1、AndroidMenifest.xml增加新权限:

<uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.REORDER_TASKS" />

一、接入流程

1.提供您应用的包名和应用签名MD5,我们会在后台进行接入配置。服务端对接文档详见svrdoc-api – Coco.mht。可使用如下方法获取应用签名MD5信息:
    public static String getSignInfo(Context context){        try {            PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);            Signature[] signs = packageInfo.signatures;            Signature sign = signs[0];            MessageDigest md = MessageDigest.getInstance("MD5");            md.update(sign.toByteArray());            byte[] digest = md.digest();            String res = toHexString(digest);            return res;        } catch (Exception e) {            Log.e(TAG, "获取 app签名信息出错,原因:" + e.getMessage());            return null;        }    }    private static String toHexString(byte[] block) {        StringBuffer buf = new StringBuffer();        int len = block.length;        for (int i = 0; i < len; i++) {            byte2hex(block[i], buf);        }        return buf.toString();    }    private static void byte2hex(byte b, StringBuffer buf) {        char[] hexChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8',                '9', 'A', 'B', 'C', 'D', 'E', 'F' };        int high = ((b & 0xf0) >> 4);        int low = (b & 0x0f);        buf.append(hexChars[high]);        buf.append(hexChars[low]);    }

2.导入CocoSdk_Xx.Yyy.jar。其中Xx表示SDK的主版本号,此版本号变更则可能涉及接口变化;Yyy表示SDK内部逻辑功能的版本号,您可忽略此版本号的变更。

3.继承SDKCallback,并实现需要监听的回调。

4.在AndroidManifest.xml中注册以下权限、Service、以及Activity:

        <uses-permission android:name="android.permission.INTERNET" />        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />        <uses-permission android:name="android.permission.READ_CONTACTS" />        <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />        <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />        <uses-permission android:name="android.permission.RECORD_AUDIO" />        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />        <uses-permission android:name="android.permission.READ_PHONE_STATE" />        <!-- 蓝牙分享所需的权限 -->        <uses-permission android:name="android.permission.BLUETOOTH" />        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />        <!-- 百度定位权限 -->        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />        <uses-permission android:name="android.permission.READ_LOGS" />        <uses-permission android:name="android.permission.WAKE_LOCK" />        <uses-permission android:name="android.permission.WRITE_SETTINGS" />        <!-- 振动提示 -->        <uses-permission android:name="android.permission.VIBRATE" />        <uses-permission android:name="android.permission.GET_TASKS" />        <uses-permission android:name="android.permission.REORDER_TASKS" />        <activity            android:name="com.coco.base.dynamicload.DLProxyActivity"            android:screenOrientation="portrait"        <service            android:name="com.coco.base.dynamicload.DLProxyService"/>        <service            android:name="com.coco.coco.sdk.cocosdk.RemoteService"            android:enabled="true"            android:exported="true"/>        <service            android:name="com.coco.coco.sdk.cocosdk.ClientService"            android:enabled="true"            android:exported="true" />

5.Proguard配置

-keep class com.coco.**{*;}-keep class coco.**{*;}-keep class android.support.v4.app.** { *; }-keep interface android.support.v4.app.** { *; }-keep class android.support.v4.** { *; }

6.其他注意事项

(1)确保您的应用程序名称String是定义在xml文件中的,且key为”app_name”; 确保您应用程序的icon名称为“ic_launcher.png”,在drawable、drawable-hdpi、drawable-xhdpi…等目录下至少包含一个这个图标;
(2)确保您的项目引入了android suuport-v4包。

二、登录说明

应用包名:您的应用包名
签名MD5:您的应用签名MD5
用户合法性校验接口地址:我们后台收到sdk登录请求后会访问此地址校验用户合法性(推荐用HTTPS)
openid:第三方用户唯一标识
login_token:您的应用调用sdk登录时提供,用于校验用户合法性
sdk_token:根据应用包名及签名MD5生成,用于校验客户端的合法性,服务器端根据此字段决定调用哪一个用户合法性校验接口地址

登录流程:
1、 第三方调用SDK登录接口,提供openid、login_token及用户昵称、头像url性别
2、 SDK读取应用包名及签名MD5,生成sdk_token
3、 SDK调用游戏约后台的登录接口(openid、login_token及sdk_token)
4、 游戏约后台根据sdk_token找到用户合法性校验接口地址,并以openid及login_token为参数调用此接口
5、 第三方后台返回openid及login_token是否有效
6、 如果有效,游戏约后台根据sdk_token及openid查找对应的游戏约账号信息
7、 如果游戏约账号信息已存在,则返回账号相关信息并登录成功
8、 如果游戏约账号信息不存在(首次登录游戏约),则创建此账号信息,返回账号相关信息及首次登录标识并登录成功
9、 如果是首次登录,Sdk用爱拍提供的用户头像及昵称更新此账号信息

三、接口说明

1、CocoSdk.java

  • getInstance()
  • init()
  • uninit()
  • login()
  • logout()
  • showVoiceRoomActivity()
  • leaveVoiceRoom()
  • getLoginStatus()
  • postGetUserInfoByUid()
  • postGetUserGiftCountByUid()
  • sendGift()
  • postGetCurrentRoomUid()
  • postGetCurrentRoomMemberNum()
  • getSettings()
  • setSettings()
  • setSubscribeButtonStyle()
    /**     * 获取一个接口操作单实例对象     * @return CocoSdk     */    public static CocoSdk getInstance()    /**     * 初始化SDK,初始化结果会回调{@link SDKCallback#onInitCallback(int, String)}     * @param context 上下文     * @param sdkLoadingStateCallback 回调接口     */    public void init(Context context, SDKCallback sdkLoadingStateCallback)    /**     * 反初始化SDK,这将清除所有SDK运行环境;激活SDK需再次调用{@link #init(Context, SDKCallback)}     * @param context 上下文     */    public void uninit(Context context)    /**     * 登录接口,结果会回调{@link SDKCallback#onLoginCallback(int, String, int)}     * @param openId openID     * @param token token     * @param userInfo JSONObject String值,该JSONObject对象必须包含这些Key-Value:{"nickName":"用户昵称","thumb":"用户头像url","gender":"用户性别,1为男,2为女"}。     * @throws RemoteException     */     //TODO (此参数项较为繁琐,在V1.0+版本将会调整此接口参数,使之更优雅)    public void login(String openId, String token, String userInfo) throws RemoteException    /**     * 退出登录,会回调{@link SDKCallback#onLogoutCallback()}     * @throws RemoteException     */    public void logout() throws  RemoteException    /**     * 启动语聊房间的Activity     * @param rid 房间RID     * @param pwd 房间密码,可为null     */    public void showVoiceRoomActivity(String rid, String pwd)    /**     * 退出语聊房间     * @param rid 房间RID     * @throws RemoteException     */    public void leaveVoiceRoom(String rid) throws RemoteException    /**     * 获取当前登录状态     * @return 登录状态码     * @see CocoSdkConstant#STATUS_LOGINED     * @throws RemoteException 如果SDK没有初始化,则抛之     */    public int getLoginStatus() throws RemoteException     /**     * 根据uid获取用户信息,会回调{@link SDKCallback#onGetUserInfo(int, String)}     * @param uid 用户uid     * @throws RemoteException     */    public void postGetUserInfoByUid(int uid) throws RemoteException    /**     * 获取用户收到的礼物数量,会回调{@link SDKCallback#onGetUserGiftCount(int, int, int)}     * @param uid 用户uid     * @throws RemoteException     */    public void postGetUserGiftCountByUid(int uid) throws  RemoteException    /**     * 给用户送礼     * @param uid 用户uid     * @param nickName 用户昵称     * @throws RemoteException     */    public void sendGift(int uid, String nickName) throws RemoteException    /**     * 获取当前房间的房主UID,即房间创建者UID。会回调{@link SDKCallback#onGetCurrentVoiceRoomUid(int)}     * @throws RemoteException     */    public void postGetCurrentRoomUid() throws  RemoteException    /**     * 获取当前房间内人数。会回调{@link SDKCallback#onGetCurrentVoiceRoomMemberNum(int)}     * @throws RemoteException     */    public void postGetCurrentRoomMemberNum() throws  RemoteException    /**     * 获取SDK SharedPreferences值     * @param key SharedPreferences Key     * @return SharedPreferences Value,如果不存在,则返回null     * @see CocoSdkConstant#COCO_APP_PREFERENCE     * @throws RemoteException     */    public String getSettings(String key ) throws RemoteException    /**     * 设置SDK SharedPreferences值     * @param key SharedPreferences Key     * @param value SharedPreferences Value     * @throws RemoteException     */    public void setSettings(String key, String value) throws RemoteException    /**     * 设置房间订阅按钮状态     * @param isSubscribed true为订阅,false为取消订阅     * @throws RemoteException     */    public void setSubscribeButtonStyle(boolean isSubscribed) throws RemoteException

2、SDKCallback.java

  • onInitCallback
  • onLoginCallback
  • onLogoutCallback
  • viewContactDetail
  • onGetUserInfo
  • onGetUserGiftCount
  • shareImage @deprecated
  • shareVoiceRoom
  • recharge
  • onEnterVoiceRoom
  • onExistVoiceRoom
  • onGetCurrentVoiceRoomUid
  • onGetCurrentVoiceRoomMemberNum
  • onSetSubscribeCallBack
    /**     * 初始化结果回调     * @param result 0为成功     * @param message 附带消息     */    public void onInitCallback(int result, String message) {}    /**     * 登录回调     * @param result 状态码。{@link CocoSdkConstant#STATUS_LOGINED}...     * @param message 附带消息     * @param uid 用户uid     */    public void onLoginCallback(int result, String message, int uid) {}    /**     * 退出登录回调     */    public void onLogoutCallback() {}    /**     * 用户点击进入他人主页时的回调     * @param uid 目标用户uid     */    public void viewContactDetail(int uid){}    /**     * 查看联系详细信息后触发,返回联系人基础信息     * @param result 状态码,0为成功,-1为失败     * @param jsonObject eg: {"uid":161183,"sex":2,"nickname":"窃风い小妖精","city":"","headimgurl":"http://xxx.jpeg","birthdate":"2015-01-01","sign":"","id":"161403"}     */    public void onGetUserInfo(int result, String jsonObject) {}    /**     * 调用{@link CocoSdk#postGetUserGiftCountByUid(int)}后回调     * @param result 状态码     * @param uid 目标用户uid     * @param count 目标用户收到的礼物数量     */    public void onGetUserGiftCount(int result, int uid, int count) {}    /**     * 分享图片,弃用     * @deprecated     */    public void shareImage() {}    /**     * 分享房间的回调     * @param jsonObject     * example : {"rid":"2d4a6d98b4504559a612fb24e683b720","roomid":100040,"uid":160123,"headImgUrl":"http:\/\/group1.cdn.yxyue.com\/group1\/M00\/03\/BB\/wKgKU1b4mayAXk1xAAEPK0yWm_Q973.jpg","nickname":"www","title":"www的娱乐房间","memberNum":1}     */    public void shareVoiceRoom(String jsonObject) {}    /**     * 充值钻石的回调     */    public void recharge() {}    /**     * 调用{@link CocoSdk#showVoiceRoomActivity(String, String)}进入房间的回调     * @param code 0 成功,2 房间不存在,12 目前不允许进入(msg 剩余时间),14 密码错误     * @param msg     * @param rid 房间rid     * @param roomid roomId     * @param uid 房主uid,即房间创建者uid     */    public void onEnterVoiceRoom(int code, String msg, String rid,String roomid,String uid) {}    /**     * 退出房间的回调     * @param rid 房间RID     * @param roomid roomID     * @param uid 房主uid,即房间创建者uid     */    public void onExistVoiceRoom(String rid,String roomid,String uid) {}    /**     * 调用{@link CocoSdk#postGetCurrentRoomUid()}获取当前房主uid后的回调     * @param uid 房主uid,即房间创建者     */    public void onGetCurrentVoiceRoomUid(int uid) {}    /**     * 调用{@link CocoSdk#postGetCurrentRoomMemberNum()}获取当前房间人数的回调     * @param memberNum 当前房间人数     */    public void onGetCurrentVoiceRoomMemberNum(int memberNum) {}    /**     * 房间订阅状态变化的回调     * @param isSubscribe true为已经订阅,false为没有订阅     */    public void onSetSubscribeCallBack(boolean isSubscribe){}
0 0