https://blog.csdn.net/github_2011/article/details/54316008
unionid的獲取
unionid的獲取很簡單
:
String unionid =
.getDb().get("unionid");
unionid的獲取
unionid, 其實 QQ 也有
.getDb().exportData();//獲取到db里面所有的內容我們下面來看看,exportData里面都有什么內容:
其實exportData是一個json數據,格式化后如下圖所示:
我們發現里面並沒有unionid,那我們怎么獲得QQ的unionid呢 ?
天無絕人之路,有一個接口可以獲取QQ的unionid,需要QQ的token作為參數,token我們是可以拿到的,上圖選中的就是token
- 接口:
- https://graph.qq.com/oauth2.0/me
- 請求方式:GET
- 請求參數:
- access_token QQ的token
- unionid 傳1即可
代碼如下 :
/**
* 獲取QQ的unionid
* @param plat
*/
private void getQQUnionid(Platform plat) {
Request request = new Request(Request.Method.GET, "https://graph.qq.com/oauth2.0/me?access_token=" + plat.getDb().getToken() + "&unionid=1", new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {}}) {
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
byte[] data = response.data;
String s = new String(data);
String[] split = s.split(":");
s = split[split.length - 1];
split = s.split("\"");
s = split[1];
unionid = s;
return Response.success(s, HttpHeaderParser.parseCacheHeaders(response));
}
@Override
protected void deliverResponse(Object response) {
}
@Override
public int compareTo(Object another) {
return 0;
}
};
NetworkManager.addRequest(request);
}
通過 String s = new String(data);
我們可以得到返回的字符串信息如下:
返回的並不是json數據,但幸運的是里面有unionid,我通過字符串切割的方法把它取了出來。
---------------------
作者:github_2011
來源:CSDN
原文:https://blog.csdn.net/github_2011/article/details/54316008
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
ShareSDK 退出第三方登錄和登錄分享里面的一些注意事項
https://www.jianshu.com/p/895b94f8da0d
2018.8.17 微信登錄時,授權一次過后會返回refresh_token ,為用戶授權第三方應用的長效憑證,refresh_token擁有較長的有效期(30天),當refresh_token失效的后,需要用戶重新授權。期間就算是取消授權(用ShareSDK提供的取消授權)也不會出現確定授權界面而是會直接返回用戶信息。
這幾天在做有關第三方登錄和分享相關的內容,然后出現了各種問題有一些網上可以解決,但是有一個怎么也沒有查到。
這兒我遇到最大的問題是 怎樣讓用戶在登錄第三方后退出,也就是用戶每一次第三方登錄都能到授權界面!
其實就一句代碼就能實現,就是取消分享平台的授權。其中后面的參數是平台類型。
這兒是退出QQ第三方登陸
[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ];
給效果圖,程序還在編寫階段所以很丑不要介意。
其中我點擊登錄過后再點擊退出,就會再次進入授權界面。如果點擊退出再點擊登錄就會直接返回用戶信息給我,這與我們的需求是不同的。
這兒我們通常結合[ShareSDK hasAuthorized:SSDKPlatformTypeQQ],來判斷用戶是否退出第三方登錄。
比如:判斷QQ是否退出第三方登錄
[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ];
BOOL isAuthorizedWithQQ = [ShareSDK hasAuthorized:SSDKPlatformTypeQQ]; if (!isAuthorizedWithQQ) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"退出成功" message:@"" preferredStyle: UIAlertControllerStyleAlert]; UIAlertAction *a = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alert addAction:a]; [self presentViewController:alert animated:true completion:nil]; } else { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"退出失敗" message:@"" preferredStyle: UIAlertControllerStyleAlert]; UIAlertAction *a = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { }]; [alert addAction:a]; [self presentViewController:alert animated:true completion:nil]; }
根據返回的BooL進行判斷
其實我們想要同樣的效果 可以在調起第三方登錄的時候,取消響應平台的授權再調起第三方登錄。這時候就會想退出登錄怎么辦,我們用第三方的話只是給用戶一個快捷登錄注冊一個接口,我們自己的后台服務器同樣也有用戶的數據。我們只需要把自己后台服務器登錄狀態改為未登錄狀態。
效果圖……
調起的時候
[ShareSDK cancelAuthorize:SSDKPlatformTypeWechat]; //這兒就是取消授權 [ShareSDK getUserInfo:SSDKPlatformTypeWechat onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) { if (state == SSDKResponseStateSuccess) { //獲取用戶的信息 (可以上傳到自己后台服務器上/本地緩存) } }];
退出登錄
CHECK_NETWORK_STATUS
REFRESHSATR
NSDictionary *dic = @{@"id":USERID,@"type":@"1"}; //我這兒就是自己的后台退出登錄 [NetworkingRequest POST:LOGOUT_URL parameters:dic sucess:^(id responseObject) { REFRESHSTOP if ([responseObject[@"code"] integerValue] == 1) { PRMOPT(@"退出登陸成功"); LOGOUT; [[NSNotificationCenter defaultCenter]postNotificationName:@"logOut" object:nil]; BACK; } if ([responseObject[@"code"] integerValue] == 106) { PRMOPT(@"退出登陸失敗"); } } failure:^(NSError *error) { REFRESHSTOP if (error.code == -1001) { PRMOPT(@"請求超時"); return ; } if (error.code == - 1004 ){ PRMOPT(@"服務器連接失敗"); return; } PRMOPT(@"退出登陸失敗"); }];
我們在配置QQ的第三方登陸和分享URL Schemes的時候,容易犯了一個小錯誤。
QQ登陸的Schemes是以tencent + APPId 這兒的Id是你在QQ開發者平台上申請的。
而QQ分享時Schemes 卻需要QQ+轉換成16進制的APPId。
而其他的好像就沒有 比如微博就是wb + APPId
當然微信直接就是申請的APPId
作者:吃貨_X
鏈接:https://www.jianshu.com/p/895b94f8da0d
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。
