Android开发之集成Twitter登陆以及分享,文后有源码。

目录

1、APP build

2、sdk初始化

3、按钮样式(布局文件)

3.1官方按钮登陆

3.2自定义按钮登陆

4、Twitter分享

5、源码传送:点我点我点我


1、APP build 

    //推特登陆和分享相关
    implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
    implementation 'com.twitter.sdk.android:tweet-ui:3.1.1'
    implementation 'com.twitter.sdk.android:tweet-composer:3.1.1'

2、sdk初始化

初始化建议放在Application中。

我把twitter_comsumer_key以及twitter_comsumer_secret这两个key值放在了strings下了,你们根据需要放置。

private void initTwitter() {
        TwitterConfig config = new TwitterConfig.Builder(this)
                .logger(new DefaultLogger(Log.DEBUG))
                .twitterAuthConfig(new TwitterAuthConfig(getApplicationContext().getString(R.string.twitter_comsumer_key),getApplicationContext().getString(R.string.twitter_comsumer_secret)))
                .debug(true)
                .build();
        Twitter.initialize(config);
    }

3、按钮样式(布局文件)

  • 可以使用官方的Twitter按钮,样式不可以更改。
  • 使用自定义的按钮,但是必须是button才行。
  • 3.1官方按钮登陆

          (1)、布局文件

 <com.twitter.sdk.android.core.identity.TwitterLoginButton
        android:id="@+id/btn_login_by_twitter"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="推特官方按钮" />

           (2)、java代码

    /**
     * 官方按钮登陆Twitter
     */
    private void loginByTwitterButton() {
        //官方按钮登陆
        TwitterLoginButton twitterLoginButton = findViewById(R.id.btn_login_by_twitter);
        
        Log.e(TAG, "step1");
        twitterLoginButton.setCallback(new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                isMySelfButton = false;
                Log.e(TAG, "step2");
                TwitterSession session = result.data;
                final String userName = session.getUserName();
                Call<User> user = TwitterCore.getInstance().getApiClient().getAccountService().verifyCredentials(false, true, false);

                user.enqueue(new Callback<User>() {
                    @Override
                    public void success(Result<User> result) {
                        Log.e(TAG, "step3");
                        User userInfo = result.data;
                        String email = userInfo.email;
                        String description = userInfo.description;

                        Log.e(TAG, "userMessage--->" + userInfo.profileImageUrl);
                        StringBuilder sb = new StringBuilder();
                        sb.append("userName: " + userName);
                        sb.append("\n");
                        sb.append("eMail: " + email);
                        sb.append("\n");
                        sb.append("description: " + description);
                        sb.append("\n");

                        tvShowUserMessage.setText(sb.toString());
                        Log.e(TAG, "sb.toString():" + sb.toString());
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        Log.e(TAG, "step4");
                    }
                });
            }

            @Override
            public void failure(TwitterException exception) {
                Log.e(TAG, "step5");
                Log.e(TAG, "login fail:", exception);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == TwitterAuthConfig.DEFAULT_AUTH_REQUEST_CODE) {
            Log.e(TAG, "step6");
            twitterLoginButton.onActivityResult(requestCode, resultCode, data);
        }
    }
  • 3.2自定义按钮登陆

(1)布局文件

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="推特自定义按钮登陆" />

(2)java文件

   private void initView() {
        btnLogin = findViewById(R.id.btn_login);
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginByMyButton();
            }
        });
    }

    /**
     * 自定义按钮登陆Twitter
     */
    private void loginByMyButton() {
        Log.e(TAG, "step1");
        twitterLoginUtils = new TwitterLoginUtils(this);
        twitterLoginUtils.setOnLoginByTwitterClick(new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                Log.e(TAG, "step2");
                TwitterSession session = result.data;
                final String userName = session.getUserName();
                Call<User> user = TwitterCore.getInstance().getApiClient().getAccountService().verifyCredentials(false, true, false);

                user.enqueue(new Callback<User>() {
                    @Override
                    public void success(Result<User> result) {
                        Log.e(TAG, "step3");
                        User userInfo = result.data;
                        String email = userInfo.email;
                        String description = userInfo.description;

                        Log.e(TAG, "userMessage--->" + userInfo.profileImageUrl);
                        StringBuilder sb = new StringBuilder();
                        sb.append("userName: " + userName);
                        sb.append("\n");
                        sb.append("eMail: " + email);
                        sb.append("\n");
                        sb.append("description: " + description);
                        sb.append("\n");

                        tvShowUserMessage.setText(sb.toString());
                        Log.e(TAG, "sb.toString():" + sb.toString());
                    }

                    @Override
                    public void failure(TwitterException exception) {
                        Log.e(TAG, "step4");
                        Log.e(TAG, "login fail:", exception);
                    }
                });
            }

            @Override
            public void failure(TwitterException exception) {
                Log.e(TAG, "step5");
                Log.e(TAG, "login fail:", exception);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == TwitterAuthConfig.DEFAULT_AUTH_REQUEST_CODE) {
            Log.e(TAG, "step6");
            twitterLoginUtils.onActivityResult(requestCode, resultCode, data);
        }
    }

(3)TwitterLoginUtilse.java文件

/**
 * @author whr
 * @date 2019/5/27
 */
public class TwitterLoginUtils {
    static final String ERROR_MSG_NO_ACTIVITY = "TwitterLoginButton requires an activity."
            + " Override getActivity to provide the activity for this button.";

    final WeakReference<Activity> activityRef;
    Callback<TwitterSession> callback;

    volatile TwitterAuthClient authClient;

    public TwitterLoginUtils(Activity activity) {
        this.activityRef = new WeakReference<>(activity);
        TwitterCore.getInstance();
    }

    public void setOnLoginByTwitterClick(Callback<TwitterSession> callback) {
        this.callback = callback;

        checkCallback(callback);
        checkActivity(activityRef.get());
        getTwitterAuthClient().authorize(activityRef.get(), callback);
    }

    TwitterAuthClient getTwitterAuthClient() {
        if (authClient == null) {
            synchronized (TwitterLoginButton.class) {
                if (authClient == null) {
                    authClient = new TwitterAuthClient();
                }
            }
        }
        return authClient;
    }

    private void checkCallback(Callback callback) {
        if (callback == null) {
            CommonUtils.logOrThrowIllegalStateException(TwitterCore.TAG,
                    "Callback must not be null, did you call setCallback?");
        }
    }

    private void checkActivity(Activity activity) {
        if (activity == null || activity.isFinishing()) {
            CommonUtils.logOrThrowIllegalStateException(TwitterCore.TAG, ERROR_MSG_NO_ACTIVITY);
        }
    }

    /**
     * Call this method when {@link Activity#onActivityResult(int, int, Intent)}
     * is called to complete the authorization flow.
     *
     * @param requestCode the request code used for SSO
     * @param resultCode  the result code returned by the SSO activity
     * @param data        the result data returned by the SSO activity
     */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == getTwitterAuthClient().getRequestCode()) {
            getTwitterAuthClient().onActivityResult(requestCode, resultCode, data);
        }
    }
}

4、Twitter分享

/******************************以下为推特分享********************************/
    /**
     * 分享到Twitter
     * 若未安装twitter客户端,则会跳转到浏览器
     *
     * @throws MalformedURLException
     */
    private void shareToTwitter() {
        uri = resourceIdToUri(R.mipmap.bg);
        Log.e("--->whr", "--->Uri:" + uri);
        Intent intent = null;
        try {
            intent = new TweetComposer.Builder(this)
                    .text("百度链接:")
                    .url(new URL("https://www.baidu.com/"))
                    .image(uri)
                    .createIntent();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        startActivityForResult(intent, TWEET_COMPOSER_REQUEST_CODE);
    }

    public static final String ANDROID_RESOURCE = "android.resource://";
    public static final String FOREWARD_SLASH = "/";

    private Uri resourceIdToUri(int resourceId) {
        return Uri.parse(ANDROID_RESOURCE + getPackageName() + FOREWARD_SLASH + resourceId);
    }
    /******************************以上为推特分享********************************/

5、源码传送:点我点我点我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值