`
836811384
  • 浏览: 548894 次
文章分类
社区版块
存档分类
最新评论

iOS 端第三方联合登陆分析, 非SDK版本

 
阅读更多

之前我们在自己的程序中使用新浪微博进行分享时,在没有服务器的情况下,(单机版应用通常都没有服务器), 需要在加入新浪微博SDK才能进行, 虽然各个分享SDK已经做得比较完善,但是使用起来门槛还是挺高的。 使用SDK的好处就在于支持SSO。

如果你的应用不需要使用SSO的情况下,且有服务器的支持情况下, 则可以使用webview的方式登陆, 这样来说对客户端的工作量会大大减少。

下面主要描述两种方式来进行webview的方式登陆

方式一:

客户端先发送一个request 向自己的服务器,去请求uiwebview即将加载的url地址,发起的请求类似:

http://xxx.com/staging/client/connect/loginrequest?name=sina&app=movie&client=iphone&apiver=2.0.0&version=3.0.1&udid=8e7c7936e4b066d7d49b7e7e785a77ac&userid=-1&channel=com_dot_apple&loc=MTE2LjQ3MDc0MSwzOS45NjA4MDg=&width=640&height=960&openudid=69eb80bdc32e35f919557712449ac11298347eef&systemversion=6.0&gzip=0


服务器返回一个供uiwebview加载的地址如下,并进行加载

https://api.weibo.com/oauth2/authorize?client_id=4087175723&redirect_uri=http://xxx.com/staging/client/connect/loginconfirm/sina?udid=8e7c7936e4b066d7d49b7e7e785a77ac&apiver=2.0.0&client=iphone&channel=com_dot_apple&width=640&height=960&systemversion=6.0&loc=MTE2LjQ3MDc0MSwzOS45NjA4MDg=&version=3.0.1&response_type=code&display=mobile

然后在这个登陆的UIViewController中实现UIWebView的回调方法,

- (void)webViewDidFinishLoad:(UIWebView *)webView{},

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {}

当然,这里客户端的这个webview就会显示出新浪微博的登陆界面,让用户输入用户名和密码,用户输入完成后,

UIWebView会自动进行跳转, 先转向https://api.weibo.com/oauth2/authorize,

然后再 向:

http://xxx.com/staging/client/connect/loginconfirm/sina?udid=8e7c7936e4b066d7d49b7e7e785a77ac&code=5b0d59aa2d90c17d58bda3287333a4e0

然后在我们实现的

webView:shouldStartLoadWithRequest方法中,可以对上面这个url进行解析,当其中出现了code,即是我们所要的东东,客户端把这个code拿到后,通过同步或者异步上传到自己的服务器上, (因为当前的位置是在webview的回调方法中,所以使用同步调用更好一点),通常我们可以直接把上面的这个url直接用httprequest到自己的服务器上。

然后服务器会去向新浪微博服务器进行确认,确认完成后, 会有回复的数据显示用户登陆成功还是失败。

用户就完成了登陆的过程。


方式二:上面这种使得客户端还是需要做一些编程,并且因为使用了一些同步的调用,使得客户端服务器都在等着,为解决上面的情况,所以有下面这种更加方便的方式。

客户端启动一个uiwebview来向服务器发起请求,这个url是事先和自己服务器商量好的一下url,如

http://xxx.com/staging/client/connect/loginrequest?name=sina&app=movie&client=iphone&apiver=2.0.0&version=3.0.1&udid=8e7c7936e4b066d7d49b7e7e785a77ac&userid=-1&channel=com_dot_apple&loc=MTE2LjQ3MDc0MSwzOS45NjA4MDg=&width=640&height=960&openudid=69eb80bdc32e35f919557712449ac11298347eef&systemversion=6.0&gzip=0

这个url到服务器后, 服务器直接使这个url进行重定向到新浪微博服务器, 这时webview会因为重定向到api.weibo.com/xxxx, 而显示给用户一个登陆界面, 用户在这个界面中输入用户名和密码, 新浪收到这个用户的数据后,会看用户是否是微博用户,如果是, 则新浪微博继续使用这个webview进行转向,转到自己的服务器,并带上用户的tokenid, 自己的服务器收到这个后,再通过webview的重定向带上用户在自己服务器上的信息进行转向, 而这个时候的转向其实已经没有意义,只是想通过这个重定向把数据让客户端获取。

客户端由于实现了方法

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {}

所以客户端能收到服务器回来的数据,然后判定出自己登陆成功,判断成功后,在shouldStartLoadWithRequest中返回NO,使这个webview不再继续加载,然后提示给用户。


分析上面两种情况的区别,实际上是在于服务器,如果服务器做的事情较多,就像第二种情况一样,客户端就可以减少逻辑复杂度。 若服务器做的事情少,则需要像第一种方式那样,客户端做的事情就多。





分享到:
评论

相关推荐

    java开源包8

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包1

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包11

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包2

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包3

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包6

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包5

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包10

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包4

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包7

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包9

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    java开源包101

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    Java资源包01

    同时,任何第三方都可以使用OAUTH认证服务,任 何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间...

    JAVA上百实例源码以及开源项目源代码

    第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在html中 各种EJB之间的调用示例 7个目标文件 摘要:Java源码,初学实例,EJB调用实例  各种EJB之间的调用源码...

    JAVA上百实例源码以及开源项目

    第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在html中 各种EJB之间的调用示例 7个目标文件 摘要:Java源码,初学实例,EJB调用实例  各种EJB之间的调用源码...

Global site tag (gtag.js) - Google Analytics