首页 > sdk没有登录什么意思_不需要接入SDK的第三方登录及分享

sdk没有登录什么意思_不需要接入SDK的第三方登录及分享

讲到第三方登录分享,第一反应大概就是友盟、ShareSDK之类。集成微信、QQ、微博三个平台的话,友盟的SDK有62.9M,ShareSDK的包有74M。如果直接集成最原始的三个平台的SDK,大小总共为51M。(关于集成前期的配置,可参考原生接入微博、微信和QQ的登录及分享)

WechatIMG286.jpeg

我们一般会在各个平台的授权登录回调里去获取需要的值。微信会返回code,QQ会返回accessToken和openId,微博会返回access_token,拿到这些值后传给自己的后台,后台再用这些值去对应的平台请求用户信息,并与自己的用户体系绑定。

// 微信授权登录回调

- (void)onResp:(id )resp {

if ([resp isKindOfClass:[SendAuthResp class]]) {

SendAuthResp *response = (SendAuthResp *)resp;

if (response.errCode == 0) {

SendAuthResp *aresp = (SendAuthResp *)resp;

NSString *code = aresp.code;

DLog(@"--- %@", code);

[MBProgressHUD showInfoMsg:@"登录成功"];

}else{

[MBProgressHUD showErrorMsg:@"登录失败"];

}

}

}

// 微博授权登录回调

- (void)didReceiveWeiboResponse:(WBBaseResponse *)response {

if ([response isKindOfClass:WBAuthorizeResponse.class]) {

if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {

NSDictionary *userInfo = response.userInfo;

NSString * access_token =[userInfo objectForKey:@"access_token"];

DLog(@"--- %@", access_token);

}else {

[MBProgressHUD showErrorMsg:@"登录失败"];

}

}

}

// QQ授权登录成功的回调

- (void)tencentDidLogin {

/* Access Token凭证,用于后续访问各开放接口*/

DLog(@"%@ -- %@",_tencentOAuth.accessToken, _tencentOAuth.openId);

/* 获取用户信息。调用这个方法,qq的sdk会自动调用

- (void)getUserInfoResponse:(APIResponse *)response*/

}

然而,用MonkeyKing就不需要那么复杂,也不用集成SDK。所有的请求都会在内部完成。

使用方法

1. 先注册各个平台。

MonkeyKing.registerAccount(.weChat(appID: KEY.kWX_APP_ID, appKey: KEY.kWX_APP_KEY, miniAppID: nil))

MonkeyKing.registerAccount(.qq(appID: KEY.kQQ_APP_ID))

/*微博的appID是AppKey,AppKey是AppSecret*/

MonkeyKing.registerAccount(.weibo(appID: KEY.kWB_APP_KEY, appKey: KEY.kWB_APP_SECRET, redirectURL: KEY.kWB_REDIRECT_URL))

2. 调用

MonkeyKing.weChatOAuthForCode(scope: nil, requestToken: nil) { (wxCode, error) in

// 微信授权登录

if let code = wxCode {

print(code)

}

}

MonkeyKing.oauth(for: .qq, scope: "get_simple_userinfo") { (info, response, error) in

// QQ授权登录

if let d = info {

if let openid = d["openid"], let token = d["access_token"] {

print("openid is (openid), token is (token)")

}

}

}

MonkeyKing.oauth(for: .weibo) { (info, response, error) in

// 微博授权登录

if let d = info {

if let token = d["accessToken"] {

print(token)

}

}

}

实现原理

微信登录

通过weixin://app/YourAppId/auth/?scope=snsapi_userinfo&state=Weixinauth授权获取微信code

拿到code值通过https://api.weixin.qq.com/sns/oauth2/access_token授权获取微信openId和access_token

拿到openId和access_token通过https://api.weixin.qq.com/sns/userinfo获取用户信息。(ps:这一步一般都是后台操作。)

QQ登录(xxx为你的AppId)

通过mqqOpensdkSSoLogin://SSoLogin/tencentXXX/com.tencent.tencentXXX?generalpastboard=1获取openId和access_token

拿到openId和access_token后通过https://graph.qq.com/user/get_user_info获取用户信息。(ps:这一步一般都是后台操作。)

微博登录

设置剪切版参数,再通过weibosdk://request?id=uuidString&sdkversion=003203000获取accessToken

let uuidString = UUID().uuidString

let transferObjectData = NSKeyedArchiver.archivedData(withRootObject: [

"__class": "WBAuthorizeRequest",

"redirectURI": redirectURL,

"requestID": uuidString,

"scope": scope ])

let userInfoData = NSKeyedArchiver.archivedData(withRootObject: [

"mykey": "as you like",

"SSO_From": "SendMessageToWeiboViewController"])

let appData = NSKeyedArchiver.archivedData(withRootObject: [

"appKey": appID,

"bundleID": Bundle.main.monkeyking_bundleID ?? "",

"name": Bundle.main.monkeyking_displayName ?? ""])

let authItems: [[String: Any]] = [

["transferObject": transferObjectData],

["userInfo": userInfoData],

["app": appData]]

UIPasteboard.general.items = authItems

拿到accessToken,通过https://api.weibo.com/2/users/show.json获取用户信息。(ps:这一步一般都是后台操作。)

MonkeyKing除了登录功能外,还有分享及支付功能等。而这些功能的实现不需要集成任何SDK,对App体积大小有要求的人来说,这个库相当棒。具体使用方法,详见github

更多相关:

  • 一、写在前面     关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了。我只能保证我的这个是我实现后才贴出来的,本文有看不懂的地方请结合官网看。(话说我感觉我写博客废话好多) 二、准备工作     通过以下官网获得相应AppI...

  • 什么是SSH? SSH对应 struts spring hibernatestruts 采用MVC模式,主要是作用于用户交互spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(...

  •  环境准备 本文使用Maven构建,因此需要一点Maven知识。首先准备环境依赖:  Java代码                   junit          junit       ...

  • 我一直在用Ubuntu发型版本的Linux系统,很喜欢把它做得更加的方便易用,特别是Ubuntu的Server版本,因为没有Desktop的 GUI界面,也没有自动登录设置,无法通过简单的点击鼠标方式来设置自动登录,在查阅了一些资料后,发现使用重定向就可以简单的解决这个问题。     其实想要在Ubuntu Server上自动登录非常...

  • 1. 申请合作伙伴ID (PID),Key (PKey)2. 发送请求  https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=100000353&redirect_uri=http://www.wodongni.com/loginReturn.asp...