海外sdk开发篇之推特twitter授权登录

本文介绍安卓接入推特授权登录以及一些坑

推特因为不再维护sdk,所以在根据文档接入的时候碰到了SSL Certificate Pinning Error,按照网上的修改注释源代码也会出现ssl相关的报错,

也就是以下这段授权登录代码:

TwitterAuthClient.authorize(activity, new Callback<TwitterSession>());

所以后来采用的方案是用http请求推特的服务端,部分依赖sdk相关的接口。

____________________________________________________________________________________________________________________

文档链接

接入文档

接口说明

github的开源代码

____________________________________________________________________________________________________________________

1.请求oauthToken和oauthTokenSecret

首先需要准备推特的参数:ConsumerKey, ConsumerSecret

在请求之前需要先准备好几个方法生成相关的参数:

生成请求头Authorization值

参考代码:com\twitter\sdk\android\core\internal\oauth\OAuth1aParameters.java

可以参考它的重新写一个管理推特参数相关的单例。

其中OAuth1aParameters需要设置的参数为:

TwitterAuthConfig->new TwitterAuthConfig(ConsumerKey, ConsumerSecret)

TwitterAuthToken->null

callback->twittersdk://callback    //应该需要在后台也设置下

method->POST

url->https://api.twitter.com/oauth/request_token

postParams->null

http post请求头需要设置2个键值对:Content-TypeAuthorization

String head = constructAuthorizationHeader(nonce, timestamp, signature);

其中nonce,timestamp和signature参考示例代码中的getAuthorizationHeader()方法

Content-Type:application/x-www-form-urlencoded

Authorization:head 

请求地址:https://api.twitter.com/oauth/request_token

请求成功的话会返回oauth_token=xxx&oauth_token_secret=yyy,这两个值会在后面用到

2.打开用户授权登录界面

需要打开的url:https://api.twitter.com/oauth/authenticate?oauth_token=xxx

打开后会在浏览器中显示一个推特用户授权登录的网页

这里需要重写一个webview,实现webView.setWebViewClient,用户授权登录成功后会在shouldOverrideUrlLoading里返回一个url

url中包含oauth_verifier的值,如果url里包含denied则说明是用户取消了,也可以中断后续的步骤

3.获取校验登录用的值发给服务端验证登录

类似第一步,OAuth1aParameters需要设置的参数为:

TwitterAuthConfig->new TwitterAuthConfig(ConsumerKey, ConsumerSecret)

TwitterAuthToken->new TwitterAuthToken(oauthToken, oauthTokenSecret)

callback->twittersdk://callback    //应该需要在后台也设置下

method->POST

url->https://api.twitter.com/oauth/access_token

postParams->null

http post请求头需要设置3个键值对:Content-TypeAuthorization和Content-Length

String head = constructAuthorizationHeader(nonce, timestamp, signature);

其中nonce,timestamp和signature参考示例代码中的getAuthorizationHeader()方法

String body = String.format("oauth_verifier=%s", oauthVerifier);    //这个是请求体中的值,不是请求头的,请求头只需要知道它的长度是几位的

Content-Type:application/x-www-form-urlencoded

Authorization:head 

Content-Length:String.valueOf(body.length())

请求地址:https://api.twitter.com/oauth/access_token

请求成功的话会返回oauth_token=xxx&oauth_token_secret=yyy&user_id=zzz

拿到这里的token、secret和uid后,就可以发给服务端去推特服务器那边校验结果,通过的话就可以回调给cp登录结果了

完事收工!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容