編輯:關於Android編程
文檔版本:V1.1.1
修訂日期:2016-08-16
O、更新日志
2016-08-16 V1.1.1更新日志:
1、AndroidMenifest.xml增加新權限:
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:
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){}
最近做的類似於微博的項目中,有個Android功能要使用到listview的向下拉刷新來刷新最新消息,向上拉刷新(滑動分頁)來加載更多。新浪微博就是使用這種方式的典型。當
很多Android系統手機都或多或少出現過信號不穩的問題,其實很多時候不是手機自身的質量不佳,而是我們沒有對其進行合理的網絡配置。以聯通WCDMA制式的An
不得不說,當不了解一件事情的時候,就會像當然的認為,其很神秘。但是當真正的接觸到了這些神秘的item,就不會有這種感覺了。作為一個android開發新手的我,剛接觸到了V
AsyncTask 資料上寫是android提供的輕量級的異步類 可以直接繼承AsyncTask 在類中實現異步操作 並提供接口反饋當
在前不久的谷歌2015 I/O大會上,發布了Android新