Android之海外第三方登录

本文主要记录海外应用第三方登录: facebook(登录/分享), twitter(登录/分享), google(登录), Line(登录/分享),instagram(分享),属于记录流水账型的啦,谨希望后人少踩坑
当然这个需要科学上网,如何上网就不属于本文的讨论范围啦,如果你说点击不开官方教程,可以点击这个,输入框输入网址,就可以打开我能帮的只有这些了

Twitter-登录

  • twitter 资源引入,官方教程
    就是引入一个module,然后初始化twitter
  • 上一步需要注册一个twitter开发者账号(先创建一个twitter账号,然后转为开发者账号),然后新建一个项目,新建项目的地址
    新建项目很简单,但是项目需要配置一下,我测试时一直是com.twitter.sdk.android.core.TwitterException: Request Failure 就是手贱了一下,没有配置好,勾选了Enable Callback Locking
    附上正确的配置的截图
    这里写图片描述
    这里写图片描述

  • 开始登录,官方教程
    按照官方的登录教程来,处理好上面的坑,就可以了
    这里写图片描述

  • 登录成功就可以在回调里拿到登录成功用户的部分信息

    mTwitterLoginButton.setCallback(new Callback<TwitterSession>() {
                @Override
                public void success(Result<TwitterSession> result) {
                    String name = result.data.getUserName();
                    long userId = result.data.getUserId();
                    long id = result.data.getId();
                    TwitterAuthToken token = result.data.getAuthToken();
                    String secret = token.secret;
                    String strToken = token.token;
                    D.i("slack", "success name: " + name + " ,userId: " + userId + " ,id: " + id + " ,secret: " + secret + " ,token: " + strToken);
                    // 如果需要获取用户的详细信息,可以使用API :GET users/show
    
                }
    
                @Override
                public void failure(TwitterException exception) {
                    exception.printStackTrace();
                    D.i("slack", "failure:" + exception.getMessage());
                }
            });
  • 但是这里不能获取用户的详细信息,比如用户的头像,翻阅API,发现一个请求GET users/show 这里可以只要传上一步获取到的参数,就可以获取用户信息啦

Twitter-分享

  • 分享还是必不可少的 官方文档
  • 推特目测可以分享纯文字,图片,视频链接,提供两种分享方式
    • TweetComposer.Builder
      • 安装了客户端,直接打开客户端
      • 没有安装客户端,打开系统浏览器
    • ComposerActivity.Builder().createIntent(); 不依赖于是否安装了客户端,在应用打开一个新分享界面
  • 推特的分享结果是已广播的形式回调的
    这里写图片描述
    twitter 登录(testLoginClick() 是不使用提供的按钮实现的登录)和分享部分代码

    /**
     * Created by slack
     * on 17/9/26 上午11:33
     * 官网上 登录示例 : https://dev.twitter.com/twitterkit/android/log-in-with-twitter
     * 查询用户的详细信息: https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-show
     * 分享: https://dev.twitter.com/twitterkit/android/compose-tweets
     */
    
    public class TwitterLoginActivity extends BaseOldActivity {
         
    
        public void registerTwitter(Context context) {
            TwitterConfig config = new TwitterConfig.Builder(context)
                    .logger(new DefaultLogger(Log.DEBUG))
                    .twitterAuthConfig(new TwitterAuthConfig("ECTbYYuCdGuLDdUPbK9H80qvu", "csLq80NLKmbVoQIzEi2nS8PUhUqJHABSvxNsMuBIjKAloHvIHJ"))
                    .debug(true)
                    .build();
            Twitter.initialize(config);
        }
    
        TwitterLoginButton mTwitterLoginButton;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            registerTwitter(this);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            this.getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.acitvity_third_twitter_login);
            mTwitterLoginButton = (TwitterLoginButton) findViewById(R.id.test_login_twitter);
            mTwitterLoginButton.setCallback(mTwitterCallback);
        }
    
        private Callback<TwitterSession> mTwitterCallback = new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                String name = result.data.getUserName();
                long userId = result.data.getUserId();
                long id = result.data.getId();
                TwitterAuthToken token = result.data.getAuthToken();
                String secret = token.secret;
                String strToken = token.token;
                D.i("slack", "success name: " + name + " ,userId: " + userId + " ,id: " + id + " ,secret: " + secret + " ,token: " + strToken);
                // 如果需要获取用户的详细信息,可以使用API :GET users/show
    
            }
    
            @Override
            public void failure(TwitterException exception) {
                exception.printStackTrace();
                D.i("slack", "failure:" + exception.getMessage());
            }
        };
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            mTwitterLoginButton.onActivityResult(requestCode, resultCode, data);
            if (mTwitterAuthClient != null && (requestCode == mTwitterAuthClient.getRequestCode())) {
                mTwitterAuthClient.onActivityResult(requestCode, resultCode, data);
            }
        }
    
        /**
         * share ,没有客户端,打开的是系统的浏览器,用户的登录session ,暂时无法传
         * 不知道是不是没有客户端的缘故,无法发图片
         * 图片uri : the image Uri should be a Uri using the content:// scheme.
         */
        public void testShareClick(View view) {
            URL url;
            try {
                url = new URL("https://www.google.com");
            } catch (MalformedURLException e) {
                e.printStackTrace();
                url = null;
            }
            Uri uri = obtainUri();
            TweetComposer.Builder builder = new TweetComposer.Builder(this)
                    .text("this is a test");
            if (uri != null) {
                builder.image(uri);
            }
            if (url != null) {
                builder.url(url);
            }
            builder.show();
    
        }
    
        public void testShareClick2(View view) {
            Uri uri = obtainUri();
            TwitterSession session = TwitterCore.getInstance().getSessionManager()
                    .getActiveSession();
            ComposerActivity.Builder builder  = new ComposerActivity.Builder(this)
                    .session(session)
                    .text("Love where you work")
                    .hashtags("#twitter");
            if(uri != null) {
                builder.image(uri);
            }
            Intent intent  = builder.createIntent();
            startActivity(intent);
        }
    
        private Uri obtainUri() {
            String filePath = new File(Environment.getExternalStorageDirectory(), "test.jpg").getAbsolutePath();
            Uri mUri = Uri.parse("content://media/external/images/media");
            Uri imageUri = null;
    
            Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null,
                    null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                String data = cursor.getString(cursor
                        .getColumnIndex(MediaStore.MediaColumns.DATA));
                if (filePath.equals(data)) {
                    int ringtoneID = cursor.getInt(cursor
                            .getColumnIndex(MediaStore.MediaColumns._ID));
                    imageUri = Uri.withAppendedPath(mUri, ""
                            + ringtoneID);
                    break;
                }
                cursor.moveToNext();
            }
            return imageUri;
        }
    
        public void testSessionClick(View view) {
            TwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();
    
            String name = session.getUserName();
            
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值