本文主要记录海外应用第三方登录: 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(); 不依赖于是否安装了客户端,在应用打开一个新分享界面
- TweetComposer.Builder
推特的分享结果是已广播的形式回调的
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();