android Twitter第三方登陆

作者: android01 发布时间: 2022-10-22 浏览: 1447 次 编辑

创建app:https://apps.twitter.com

官方DEMO:https://github.com/twitter-archive/twitter-kit-and...

1、接入的第一步还是要在官方后台创建一个app,按照提示一步步添加,此过程就是为了得到key和secret,别忘了callback_url也要添加

2、开始集成:

在app/build.gradle里添加

dependencies {
    compile ‘com.twitter.sdk.android:twitter-core:3.1.1’
    compile ‘com.twitter.sdk.android:tweet-composer:3.1.1’
}

如果需要获取用户的信息的时候,这里实际还用到了compile ‘com.google.code.gson:gson:2.7’,

初始化

Twitter.initialize(this);放在你的 application的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);

注意:自己实测,此方法根本行不通,
最终是通过第一种初始化,这里你会发现好像初始化和key/secret没啥关系,难道是后续的登陆接口用到,带着疑问又继续集成,

登陆

使用官方定义的登陆按钮

<com.twitter.sdk.android.core.identity.TwitterLoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
loginButton = (TwitterLoginButton) findViewById(R.id.login_button);
登陆监听
loginButton.setCallback(new Callback() {
@Override
public void success(Result result) {
// Do something with result, which provides a TwitterSession for making API calls
}

@Override
public void failure(TwitterException exception) {
// Do something on failure
}
});

使用自己的按钮
mTwitterAuthClient = new TwitterAuthClient();
mTwitterAuthClient.authorize(activity, new Callback() {
    @Override
    public void success(Result result) {
        TwitterAuthToken authToken = result.data.getAuthToken();
            String token = authToken.token;
            String tokenSecret = authToken.secret;
            String userName = result.data.getUserName();
            long userId = result.data.getUserId();
            getTwitterUserInfo(userId);
            Log.i("main","authorize.token="+token);
            Log.i("main","authorize.tokenSecret="+tokenSecret);
            Log.i("main","authorize.userName="+userName);
            Log.i("main","authorize.userId="+userId+"");
    }

    @Override
    public void failure(TwitterException exception) {
        exception.printStackTrace();
        Log.i("main","authorize.failure="+exception.toString());
        mDologinResult.doLoginFail();
    }
});

结果返回

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


获取用户信息


private static void getTwitterUserInfo(final long userId){
    // AccessToken.getCurrentAccessToken()
    final TwitterSession activeSession = TwitterCore.getInstance().getSessionManager().getActiveSession();
    final String twitterSecret = activeSession.getAuthToken().secret;
    final String twitterToken = activeSession.getAuthToken().token;
    MyTwitterApiClient client = new MyTwitterApiClient(activeSession);
    client.getCustomService().show(userId).enqueue(new Callback() {
        @Override
        public void success(Result result) {
            User data = result.data;
            // data.name,data.profileImageUrl
            Log.i(“main”,“authorize.getTwitterUserInfo=”+data.name+“,url=”+data.profileImageUrl);
        }
        @Override
        public void failure(TwitterException e) {
            e.printStackTrace();
            Log.i("main","authorize.getTwitterUserInfo.failure="+e.getMessage());
            mDologinResult.doLoginFail();
        }
    });
}
<span class="redactor-invisible-space">
</span>
static 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> show(@Query("user_id") long id);
    }
}


以上登陆的接口官方给的都挺详细,看着好像一切很顺利,好了开始测试,发现一直登陆失败,nnd,到底哪里出了问题,困扰了好久想想还是因为key和secret一直没配置好的问题,反反复复的看官方的文档和api,结果还是一直返回授权失败,和官方给的demo相比较代码的接入上也没有任何问题,最后还是仔细看了他们的demo才发现了问题,原来他的demo里多了一个文件twitter.properties里面就有key和secret的配置信息啥的,这…太nm坑了,官方文档从头到尾都没提到过这么文件,好吧,加上试试看吧,日了,成功了,

最后贴上改文件的内容

twitterConsumerKey=自己的key

twitterConsumerSecret=自己的secret