Android使用Twitter登录应用

官方文档地址:

https://developer.twitter.com/en/docs/publisher-tools/twitterkit/overview
https://github.com/twitter/twitter-kit-android/wiki

接入Twitter

具体查看官方提供的说明文档

创建应用

1、创建应用
进入网址:https://apps.twitter.com/ 创建应用,获得key,secret,勾选
Allow this application to be used to Sign in with Twitter

2、在Callback URLs添加"twittersdk://"
不然没有安装Twitter App的时候会返回错误。

工程配置

1、build.gradle(app)引入库文件

dependencies {
  compile 'com.twitter.sdk.android:twitter-core:3.1.1'
}

2、build.gradle(project) 配置jcenter()

repositories {
  jcenter()
}

3、strings添加consumer_key和consumer_secret

<string  name="twitter_consumer_key">xxxxxxxxxx</string
<string  name="twitter_consumer_secret">xxxxxxxxxx</string>

代码调用

一、使用TwitterLoginButton

1、初始Twitter

private void initTwitter() {
    String key = getString(R.string.twitter_consumer_key);
    String secret = getString(R.string.twitter_consumer_secret);
    
    TwitterConfig config = new TwitterConfig.Builder(this)
    .logger(new DefaultLogger(Log.DEBUG))
    .twitterAuthConfig(new TwitterAuthConfig(key, secret))
    .debug(true)
    .build();
    Twitter.initialize(config);
}

2、配置XML文件

<com.twitter.sdk.android.core.identity.TwitterLoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"/>

3、设置login和回调

private void twitterButton () {
    loginButton = (TwitterLoginButton) findViewById(R.id.login_button);
    loginButton.setCallback(new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {
            // Do something with result, which provides a TwitterSession for making API calls
            // result里面包含了用户的信息,我们可以从中取出token,tokenSecret
            // 如果我们有自己的后台服务器,发送这两个到我们自己的后台,后台再去验证)
            TwitterAuthToken authToken = result.data.getAuthToken();
            
            String token = authToken.token;
            String tokenSecret = authToken.secret;
            String userName = result.data.getUserName();
            String userId = result.data.getUserId()+"";
            
            Log.i("token",token);
            Log.i("tokenSecret",tokenSecret);
            Log.i("userName",userName);
            Log.i("userId",userId);
            
        }
        
        @Override
        public void failure(TwitterException exception) { // Do something on failure
            exception.printStackTrace();
        }
    });
}

4、处理onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    // Pass the activity result to the login button.
    if(loginButton!=null) {
        loginButton.onActivityResult(requestCode, resultCode, data);
    }
}

使用自定义Button

1、初始化同上面

2、配置xml
设置一个自定义的Button

3、设置调用和回调

private void customerButton () {
    mbutton = (Button)findViewById(R.id.login_customer_button);
    mbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            authTwitter();
        }
    });
}
private void authTwitter() {
    
    mTwitterAuthClient = new TwitterAuthClient();
    mTwitterAuthClient.authorize(this, new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {
            TwitterAuthToken authToken = result.data.getAuthToken();
            
            String token = authToken.token;
            String tokenSecret = authToken.secret;
            String userName = result.data.getUserName();
            String userId = result.data.getUserId()+"";
            
            Log.i("token",token);
            Log.i("tokenSecret",tokenSecret);
            Log.i("userName",userName);
            Log.i("userId",userId);
        }
        
        @Override
        public void failure(TwitterException exception) {
            exception.printStackTrace();
        }
    });
    
}

4、处理onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(mTwitterAuthClient!=null) {
        mTwitterAuthClient.onActivityResult(requestCode,resultCode,data);    
    }
}

详情请参考demo工程

常见问题

一、返回错误:Callback URL not approved for this client application

Invalid json:?xml version="1.0" encoding="UTF-8"?Callback URL not approved for this client application.
Approved callback URLs can be adjusted in your application settings

这个是在没有安装Twitter App的时候,调用登录会默认加载网页版的登录页面。

解决方法:在App设置那边的Callback URLs添加:"twittersdk://"

4F4A5044-70AD-4681-9CCC-EE873E87B47B.png

问题参考地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,793评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,115评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,856评论 25 709
  • 谁没有一个童年梦想呢?我的童年梦想首先是长大后读清华北大,然后是成为一名超级明星,站在舞台上接受灯光的照耀和台下观...
    子耳子耳阅读 3,892评论 0 1
  • 以后应该换个路线跑步,这个路线男生太多,跟着跑越跑越快T﹏T不行呐不行呐
    王逆逆阅读 1,696评论 0 0