您的位置:首页 > 移动开发 > Android开发

Android接入Twitter第三方登录完整教程

2017-12-03 14:00 260 查看

Android接入Twitter第三方登录完整教程

本文的主要目的是介绍如何通过Twitter官方的Twitter Kit依赖库进行第三方应用自定义的登录流程实现,下面我们来逐一介绍。

一、Twitter Kit是什么?

Twitter Kit就是Twitter工具包,它旨在与Twitter进行无缝和高效的交互。使用Twitter Kit的组件,显示推文,登录Twitter或者从你的应用程序发送推文都变得容易了。Twitter Kit提供了对推文和实时时间线的视图,还有从你的应用里分享推文都可以通过几行代码来实现。(ps:翻译自官方文档,蹩脚英语还望各位海涵)

Twitter工具包主要由以下3个工具包组成,分别是:

1.TwitterCore

主要用于实现用户登录Twitter,加载和获取用户的Twitter个人信息。

2.TweetUi

主要用于展示Twitter各项组件。

3.TweetComposer

主要用于从你的应用程序分享推文到Twitter中。

二、Android应用接入Twitter sdk的具体步骤

1.添加Twitter库的依赖

compile 'com.twitter.sdk.android:twitter:3.1.1'


如果只用到了某个特定的功能模块,也可只添加特定的依赖,分
compile 'com.twitter.sdk.android:twitter-core:3.1.1'
compile 'com.twitter.sdk.android:tweet-ui:3.1.1'
compile 'com.twitter.sdk.android:tweet-composer:3.1.1'
在依赖仓库里添加jcenter声明:
repositories {
jcenter()
}


2.在你的自定义application类中添加初始化语句

默认的初始化方式:

public class CustomApplication {
public void onCreate() {
Twitter.initialize(this);
}
}


默认的初始化方式要在资源文件里声明CONSUMER_KEY和CONSUMER_SECRET:

<resources>
<string android:name="com.twitter.sdk.android.CONSUMER_KEY">XXXXXXXXXXX</string>
<string android:name="com.twitter.sdk.android.CONSUMER_SECRET">XXXXXXXXXXX</string>
</resources>


自定义的初始化方式:

public void onCreate() {
TwitterConfig config = new TwitterConfig.Builder(this)
.logger(new DefaultLogger(Log.DEBUG))
.twitterAuthConfig(new TwitterAuthConfig("CONSUMER_KEY",           "CONSUMER_SECRET"))
.debug(true)
.build();
Twitter.initialize(config);
}


两种初始化方式根据个人需求而选择,自定义初始化方式可以不用在资源文件中声明CONSUMER_KEY和CONSUMER_SECRET。在https://apps.twitter.com/上登录后,找到你的已经创建的应用,在设置页面中可以找到对应该应用的CONSUMER_KEY和CONSUMER_SECRET。

注意:

https://apps.twitter.com/上登录后,要在Permissions该页面下的Access栏目中勾选你需要的对应权限。

在settings页面下,如果需要实现在你的应用里登录Twitter,要填上重定向地址Callback URL,可以填公司的主页地址。还需要在Allow this application to be used to Sign in with Twitter选项上打勾。

3.登录的方式

(1)使用TwitterLoginButton:这是官方文档推荐的方式,但是最明显的缺点就是Button的样式是由官方规定的,而且按钮的宽度还比较长,这个方法比较简单,就不详细讲了,详情可参考官方文档。

(2)自定义按钮样式:不少需要集成第三方登录的app的登录页面上只有一行空间用于显示登录按钮,这其中需要登录的应用可能包括:Facebook、Twitter、Gmail、Instagram等等,显然如果采取官方推荐的按钮样式是满足不了这样的需求的,按钮的具体显示很多都要自定义,下面就讲如何实现该方法,我们先来了解以下几个和登录流程相关的几个关键类。

TwitterAuthClient:查看TwitterLoginButton的源码可以知道,它是实现请求授权的工具类,它的构造函数需要传递一个Callback,负责监听请求授权的成功与失败回调。

TwitterSession:该类是用于保存用户授权的认证信息的,只有用户授权了,Twitter才认证你的应用可以获取用户的个人信息,而证明你的应用已经被认证的途径就是通过TwitterSession,它的实例可以通过以下代码获得:

TwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();


TwitterApiClient:这个类从名字看就能猜到它的作用,它是用于进行用户授权后各种Twitter api的http请求工具类。注意,该工具类只有在用户授权,Twitter官方认证之后才能使用。

使用方法范例如下:

TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
StatusesService statusesService = twitterApiClient.getStatusesService();
Call<Tweet> call = statusesService.show(user_id, null, null, null);
call.enqueue(new Callback<Tweet>() {
@Override
public void success(Result<Tweet> result) {
//Do something with result
}
public void failure(TwitterException exception) {
//Do something on failure
}
});


获取到TwitterApiClient实例,可以通过它的get方法获取Service类,在Service类的对应方法传入api请求的参数,就可以实现http请求获取用户信息,每个Service类的名字已经表明了它能获取到的用户信息。如果TwitterApiClient里默认实现的Service类不足以满足你的需求,你可以自定义TwitterApiClient实现类,在里面添加你要实现的Service接口,范例如下:

class MyTwitterApiClient extends TwitterApiClient {
public MyTwitterApiClient(TwitterSession session) {
super(session);
}
/**
* Provide CustomService with defined endpoints
*/
public CustomService getCustomService() {
return getService(CustomService.class);
}
// example users/show service endpoint
interface CustomService {
@GET("/1.1/users/show.json")
Call<User> void show(@Query("user_id") long id);
}


关键代码在于实现Service接口,因为Twitter库是使用Retrofit来封装网络请求的,所有Service接口用于声明http请求的风格需与Retrofit一致。

注意:自定义MyTwitterApiClient时,构造方法需要传入TwitterSession参数。

好,介绍完以上3个关键类,相信大家都已经知道具体怎么去实现自定义的登录流程了。具体的流程为先创建一个TwitterAuthClient类来进行请求授权操作,当用户登录并授权应用成功后,监听TwitterAuthClient的success方法回调,在success方法中再通过TwitterApiClient来获取用户的个人信息。

下面是部分关键代码,仅供参考:

public interface LoginCallback {
void onSuccess();
void onFailure();
}
public void loginTwitter(Activity activity, final LoginCallback callback) {
if (mTwitterAuthClient == null) {
mTwitterAuthClient = new TwitterAuthClient();
}
mTwitterAuthClient.authorize(activity, new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
String name = result.data.getUserName();
long userId = result.data.getUserId();
getTwitterUserInfo(userId, callback);
}
@Override
public void failure(TwitterException e) {
callback.onFailure();
}
});
}
private void getTwitterUserInfo(final long userId, final LoginCallback callback) {
final TwitterSession activeSession = TwitterCore.getInstance().getSessionManager().getActiveSession();
TwitterApiClient client = new TwitterApiClient(activeSession);
AccountService accountService = client.getAccountService();
Call<User> show = accountService.verifyCredentials(false, false, false);
show.enqueue(new Callback<User>() {
@Override
public void success(Result<User> result) {
User data = result.data;
String profileImageUrl = data.profileImageUrl.replace("_normal", "");
String name = data.name;
callback.onSuccess();
}
@Override
public void failure(TwitterException exception) {
exception.printStackTrace();
callback.onFailure();
}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: