ShareSDK实现第三方登录(Android实现步骤)

在进入主题之前,我想先解释一下什么是“第三方登录”。所谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。而这里的第三方平台,一般是已经有大量用户的平台,如国内的新浪微博、QQ空间,外国的Facebook、twitter等等。第三方登录不是一个具体的接口,而是一种思想或者一套步骤。 
要实现第三方登录,首先你需要选择一个第三方平台。新浪微博和QQ空间都是好的选择,这些平台拥有大量的用户,而且还开放了API,供我们调用接入。但是同样开放API,微信却不是一个好选择,这是因为微信的API只支持分享,不支持授权验证或者获取用户资料。所以要实现第三方登录,你选择的平台至少需要具备:
1、开放了API
2、具备获取用户资料或至少可以进行授权验证
其实Share SDK已经支持了十几种这样子的平台,完全足够你选择使用。

选择好平台以后,现在思考下面的问题:
你的应用是否具备独立账户系统?
这个问题是第三方登录时接口选择的重要标准。如果你选择“是”,则意味着你的应用只是需要第三方平台的用户,而不是他们的账户验证功能——也就是“要数据,不要功能”。而如果你选择“否”,则表示你实际上是“要功能,不要数据(用户)”。对于Share SDK来说,前者你的入口方法是showUser(null),而后者是authorize()。那么下面我分情况解释两种接入方式的步骤。

从简单的说起。对于“要功能,不要数据”的情况,步骤如下:
1、用户触发第三方登录事件
2、调用weibo.getDb().getWeiboId()请求用户在此平台上的ID
3、如果用户ID存在,则认为用户是合法用户,允许进入系统;否则调用authorize()
4、authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户
5、如果onComplete()方法被回调,表示授权成功,引导用户进入系统
6、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据

然后是“要数据,不要功能”的步骤:
1、用户触发第三方登录事件
2、showUser(null)请求授权用户的资料(这个过程中可能涉及授权操作)
3、如果onComplete()方法被回调,将其参数Hashmap代入你应用的Login流程
4、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据
5、Login时客户端发送用户资料中的用户ID给服务端
6、服务端判定用户是已注册用户,则引导用户进入系统,否则返回特定错误码
7、客户端收到“未注册用户”错误码以后,代入用户资料到你应用的Register流程
8、Register时在用户资料中挑选你应用的注册所需字段,并提交服务端注册
9、服务端完成用户注册,成功则反馈客户端引导用户进入系统
10、否则提示错误,调用removeAccount()方法,删除可能的授权缓存数据

为了写这篇文章,我自己做了一个基于Share SDK 1.2.0的Demo,选择了新浪微博、QQ空间、Facebook和Twitter作为演示的平台。由于我没有可以使用的服务器和账户系统,因此只是演示了上述的“要功能,不要数据”。但是可以很容易看出来,这种情况,其实是第二种情况的简化,而第二种情况剩余的步骤,更多的是你应用的客户端和服务端之间的登录和注册操作,和Share SDK已经没什么关系了。

转载于:https://www.cnblogs.com/shfu/p/5005843.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 2 3 4 5 $sharesdk.shareContent($sharesdk.platformID.SinaWeibo, params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 一键分享 1 2 3 4 5 $sharesdk.oneKeyShareContent([$sharesdk.platformID.SinaWeibo, $sharesdk.platformID.TencentWeibo], params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 关于具体的分享参数名称,请参考“不同平台分享内容的详细说明”章节的说明。 用户授权 调用ShareSDK中的authorize方法可进行用户授权。代码如下: 1 2 3 4 5 $sharesdk.authorize($sharesdk.platformID.SinaWeibo, function (platform, state, error){ alert("state = " + state + "\nerror = " + error); }); 获取用户资料 调用ShareSDK中的getUserInfo来获取授权用户的信息。代码如下: 1 2 3 4 5 $sharesdk.getUserInfo($sharesdk.platformID.SinaWeibo, function (platform, state, user, error) { alert("state = " + state + "\nuser = " + user + "\nerror = " + error); }); iOS部分集成步骤(不发布iOS版本可略过此部分) 导入JS桥接的iOS版本组件 打开下载的JS包里的iOS/ShareSDKForJS/ShareSDKForJS.xcodeproj项目工程,选择ShareSDKForJS静态库运行Xcode,如图: 700px-js_doc_001.png 运行成功之后,请大家打开文件找到Build文件夹,然后进入文件中找到build/Products/Debug-iphonesimulato /libShareSDKForJS.a文件以及找到build/Products/Debug-iphonesimulator/usr/local /include/ShareSDKJSBridge.h这个文件,再将libShareSDKForJS.a和ShareSDKJSBridge.h这 2个文件导入到你的项目里,如图 700px-js_doc_002.png 注意:(如果在分享中弹不出分享的菜单,如果大家的ShareSDK.js文件是本地的,要把这个加到Build Phases里面的Copy Bundle Resources选项) 下载iOS版本ShareSDK,并导入到工程中。 登录ShareSDK的官方网站下载并解压最新版本的SDK。如果您还尚未下载,请 点击这里下载 或者访问 http://sharesdk.cn/Download 。解压后如图所示: 700px-js_doc_003 将ShareSDK导入工程中,并添加相应的依赖库。此步骤可以参考:《iOS快速集成指南》中的第一、第二步。执行完成后,如下图所示: 700px-js_doc_004.png 为UIWebView添加消息捕获 先导入ShareSDKJSBridge.h头文件。 1 #import "ShareSDKJSBridge.h" 然后给UIWebView设置一个委托对象,如: 1 webView.delegate = self; 注意:webView是UIWebView的对象实例。 最后实现shouldStartLoadWithRequest委托方法,并在方法中加入JSBridge的captureRequest方法,代码如下: 1 2 3 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return ![[ShareSDKJSBridge sharedBridge] captureRequest:request webView:webView]; } 添加完毕后就可以对工程进行运行测试。 Android部分集成步骤(不发布Android版本可略过此部分) 导入的步骤如下: 1、参考”安卓快速集成文档“章节的说明,导入ShareSDK for Android的jar库和图片、文字资源。 2、复制github上的jsdemo项目中”cn.sharesdk.js”包中的源代码复制到你的项目中。QQ截图20150304142013 3、在您WebView加载页面地址之前。调用ShareSDKUtils.prepare(webview, webviewClient); 请注意,ShareSDKUtils.prepare方法要在WebView.setWebViewClient(WebViewClinet);之后调用,而且此后不能再调用setWebViewClient方法,否则ShareSDK的初始化操作可能失败。 下面的代码来自github上的demo: Objective-C 1 2 3 4 5 6 7 8 9 10 11 12 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wvBody = new WebView(this); WebViewClient wvClient = new WebViewClient(); wvBody.setWebViewClient(wvClient); wvBody.setWebChromeClient(new WebChromeClient() { public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值