shareSDK 集成第三方登录
一.注册ShareSDK帐号并创建一个APP
ShareSDK官网:http://www.mob.com/#/
![](http://upload-images.jianshu.io/upload_images/80578-f91a5e2328d20ff2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/80578-2875726a47bb9403.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
得到App Key,App Secret(后面的代码整合中会用到)
![](http://upload-images.jianshu.io/upload_images/80578-89a20775c68cc3bc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
二.从微信开放平台获取AppID,AppSecret
参考博文:
http://www.jianshu.com/p/839dc30f2250
http://www.jianshu.com/p/c9b688fdb961
![](http://upload-images.jianshu.io/upload_images/80578-b834a1fdf83821f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
三.下载SDK
下载地址:
http://www.mob.com/#/downloadDetail/ShareSDK/ios
![](http://upload-images.jianshu.io/upload_images/80578-832a8fd725c2f14d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/80578-35e328fdd5cb2554.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
SDK下载完成后,得到如下的文件目录结构
![](http://upload-images.jianshu.io/upload_images/80578-5a2e33b9e7d7b428.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
四.代码整合
1.导入SDK
![](http://upload-images.jianshu.io/upload_images/80578-ffdef17d81dd8de3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2.设置支持HTTP请求
![](http://upload-images.jianshu.io/upload_images/80578-9c0259b1cfc75745.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
参考博文:http://www.jianshu.com/p/5935dff47e4f
3.设置sheme白名单
![](http://upload-images.jianshu.io/upload_images/80578-4a9415d644c1adb6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
参考博文:http://www.jianshu.com/p/f974f4cbba18
4.关闭bitcode
![](http://upload-images.jianshu.io/upload_images/80578-a19b92a84e23c33e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/80578-4678cd4425d43efe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.设置URL
![](http://upload-images.jianshu.io/upload_images/80578-904ba95d9e57fb2e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6.设置Build phases
![](http://upload-images.jianshu.io/upload_images/80578-02f33871fbdaf24f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
7.核心代码
[ShareSDK getUserInfo:SSDKPlatformTypeWechat
onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error)
{
if (state == SSDKResponseStateSuccess)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"已获取授权"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
NSLog(@"uid=%@" ,user.uid);
NSLog(@"%@" ,user.credential);
NSLog(@"token=%@" ,user.credential.token);
NSLog(@"nickname=%@" ,user.nickname);
}
else
{
NSLog(@"%@",error);
}
}];
效果图
![](http://upload-images.jianshu.io/upload_images/80578-84649f4f5793176d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
源码:
https://github.com/andli0626/wx_authlogin_by_sharesdk.git
五.项目实战
主要分2种情况:
第一种:APP有注册,登录功能
APP本身有一套自己的用户系统,微信登录只是一种登录方式,那么就需要实现原有用户与微信用户的绑定
![](http://upload-images.jianshu.io/upload_images/80578-384beca1220d89a6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
补充说明:
要数据,不要功能
如果你的应用拥有用户系统,就是说你的应用自己就有注册和登录功能,使用第三方登录只是为了拥有更多用户,那么你可以依照下面的步骤来做:
1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
参考示例:比如简书,网易云音乐的帐号绑定实现过程,都是值得借鉴的
第二种:APP无注册功能
APP本身没有自己的用户系统,微信登录是唯一的入口,只要授权通过,就可以进入APP
![](http://upload-images.jianshu.io/upload_images/80578-35067df29a52e2c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
补充说明:
要功能,不要数据
如果你的应用不具备用户系统,而且也不打算维护这个系统,那么你可以依照下面的步骤来做:
1、用户触发第三方登录事件
2、调用platform.getDb().getUserId()请求用户在此平台上的ID
3、如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize()
4、authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户
5、如果onComplete()方法被回调,表示授权成功,引导用户进入系统
6、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
建议
对于iOS应用,考虑到iOS应用商店审核指南中的相关规定,建议开发者接入微信登录时,先检测用户手机是否已安装微信客户端,对未安装的用户隐藏微信登录按钮,只提供其他登录方式(比如手机号注册登录、游客登录等)
参考资料
ShareSDK 第三方登录 官方文档
http://wiki.mob.com/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%99%BB%E5%BD%95/#h1-0
微信开放平台 登录授权整合 官方说明文档
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN