最近公司做一个国外的项目,需要集成Twitter、Facebook登录,所以在此记录下集成的过程。由于Twitter、Facebook是国外软件,需要翻墙,这个自行解决。

Twitter登录的集成

首先需要在https://apps.twitter.com/这个网站创建你的APP,创建完之后可以获取到Consumer Key、Consumer Secret 。如下图:

集成步骤

1.在gradle中集成SDK

compile 'com.twitter.sdk.android:twitter-core:3.1.1'

这里是登录所需的SDK,需要用其他功能可以查看官方的文档https://github.com/twitter/twitter-kit-android/wiki

2.在Application中用如下代码初始化SDK

@Overridepublic void onCreate() {super.onCreate();//Twitter初始化Twitter.initialize(getApplicationContext());}

3.添加你的Consumer Key、Consumer Secret到资源文件中

 <string name="com.twitter.sdk.android.CONSUMER_KEY">你的Consumer Key</string>
<string name="com.twitter.sdk.android.CONSUMER_SECRET">Consumer Secret</string>

到这一步前期工作基本完成,接下来编写代码了。代码我这里已经封装好了。

/***先写个接口,Facebook集成也要用* Created by 刘信 on 2018/3/9.*/public interface Platform {//登录void  Login();//登出void  loginOut();//是否已经登录boolean isLogin();//监听回调void  setPlatformListener(PlatformListener platformListener);//需要在Activity中回调这个void onActivityResult(int requestCode, int resultCode, Intent data);}
/***回调监听* Created by 刘信 on 2018/3/9.*/public interface PlatformListener {//登录成功 hasUserMessage 是否获取到用户信息了void onSuccess(boolean hasUserMessage,UserBean userBean);//登录取消void  onCancel();//登录失败void onError(Throwable throwable,String errorMsg);
}

Twitter的全部逻辑功能在下面这个类中:

/*** Created by 刘信 on 2018/3/9.*/public class Twitter implements Platform {public static final String NAME = Twitter.class.getSimpleName();PlatformListener platformListener;volatile TwitterAuthClient authClient;WeakReference<Activity> activityRef;Callback<TwitterSession> callback;public Twitter(Activity activity) {activityRef = new WeakReference<Activity>(activity);callback = new Callback<TwitterSession>() {@Overridepublic void success(Result<TwitterSession> result) {Logger.i(NAME, Thread.currentThread().getName());Logger.i(NAME, result.data.getUserName());getTwitterInfo();}@Overridepublic void failure(TwitterException exception) {Logger.i(NAME, exception.getMessage());if(platformListener!=null){platformListener.onError(exception,exception.getMessage());}}};}@Overridepublic void Login() {Activity activity = activityRef.get();if (activity == null) {Logger.e(NAME, "activiy is null,is Activity destroyed?");return;}getTwitterAuthClient().authorize(activity, callback);}@Overridepublic void loginOut() {try {SessionManager<TwitterSession> sessionManager = TwitterCore.getInstance().getSessionManager();if (sessionManager != null) {sessionManager.clearActiveSession();}} catch (Exception e) {e.printStackTrace();}}@Overridepublic boolean isLogin() {return TwitterCore.getInstance().getSessionManager().getActiveSession()!=null;}@Overridepublic void setPlatformListener(PlatformListener platformListener) {this.platformListener = platformListener;}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == getTwitterAuthClient().getRequestCode()) {getTwitterAuthClient().onActivityResult(requestCode, resultCode, data);}}private TwitterAuthClient getTwitterAuthClient() {if (authClient == null) {synchronized (Twitter.class) {if (authClient == null) {authClient = new TwitterAuthClient();}}}return authClient;}/***获取用户信息接口文档https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-    users/api-reference/get-users-show*获取用户信息*/private void getTwitterInfo() {TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();Call<User> call=twitterApiClient.getAccountService().verifyCredentials(false,true,false);call.enqueue(new Callback<User>() {@Overridepublic void success(Result<User> result) {//返回的照片48*48 好小 性别没返回啊if(platformListener!=null) {if (result.response.isSuccessful()) {User user = result.data;if (user != null) {UserBean userBean = new UserBean();userBean.setName(user.name);userBean.setAvatar(user.profileImageUrl);platformListener.onSuccess(true,userBean);}else {platformListener.onSuccess(false,null);}}else {platformListener.onSuccess(false,null);}}}@Overridepublic void failure(TwitterException exception) {Logger.i(NAME,exception.getMessage());if(platformListener!=null){platformListener.onSuccess(false,null);}}});}}

接下来在Activity中调用即可,如下面代码

   @Overrideprotected void click(View view) {switch (view.getId()) {case R.id.ib_facebook:thirdLogin(FaceBook.NAME);break;case R.id.ib_twitter:thirdLogin(Twitter.NAME);break;}}
private void thirdLogin(String name){platform=LoginSDk.getPlatFrom(this,name);if(!platform.isLogin()) {platform.setPlatformListener(new PlatformListener() {@Overridepublic void onSuccess(boolean hasUserMessage, UserBean userBean) {//登录成功回调}@Overridepublic void onCancel() {//登录取消}@Overridepublic void onError(Throwable throwable, String errorMsg) {//登录失败}});platform.Login();}else {platform.loginOut();}}//需要重写这个@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(platform!=null) {platform.onActivityResult(requestCode, resultCode, data);}super.onActivityResult(requestCode, resultCode, data);}

Facebook的集成

facebook开发者网站https://developers.facebook.com/,首先你需要在这个网址按照它的提示创建应用。

集成步骤

1.添加gradle依赖

 //facebookcompile 'com.facebook.android:facebook-login:4.31.0'

2.编辑资源文件和配置清单

在string.xml中添加

 <string name=你的AppId</string><string name="fb_login_protocol_scheme">你的登录协议</string>

在配置清单添加

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/><activity android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /><activity
        android:name="com.facebook.CustomTabActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="@string/fb_login_protocol_scheme" /></intent-filter></activity>

到这一步前期工作准备完成了,现在编写登录逻辑代码

/*** Created by 刘信 on 2018/3/9.*/public class FaceBook implements Platform {public static final String NAME = FaceBook.class.getSimpleName();CallbackManager callbackManager;PlatformListener platformListener;WeakReference<Activity> activityRef;public FaceBook(Activity activity) {activityRef = new WeakReference<Activity>(activity);callbackManager = CallbackManager.Factory.create();LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>() {@Overridepublic void onSuccess(LoginResult loginResult) {// App codeLogger.i(NAME, Thread.currentThread().getName());Logger.i(NAME, loginResult.getAccessToken().getUserId());getUserInfo(loginResult.getAccessToken());}@Overridepublic void onCancel() {// App codeif(platformListener!=null){platformListener.onCancel();}Log.i(NAME, "取消登录");}@Overridepublic void onError(FacebookException exception) {// App codeLogger.i(NAME, "登录失败");if(platformListener!=null){platformListener.onError(exception,exception.getMessage());}}});}@Overridepublic void Login() {Activity activity = activityRef.get();if (activity == null) {Logger.e(NAME, "activiy is null,is Activity destroyed?");return;}LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile"));}@Overridepublic void loginOut() {LoginManager.getInstance().logOut();}@Overridepublic boolean isLogin() {return AccessToken.getCurrentAccessToken() != null;}@Overridepublic void setPlatformListener(PlatformListener platformListener) {this.platformListener = platformListener;}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {callbackManager.onActivityResult(requestCode, resultCode, data);}private void getUserInfo(AccessToken accessToken){Bundle parameters = new Bundle();parameters.putString("fields", "id,name,gender,picture");GraphRequest graphRequest= GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {@Overridepublic void onCompleted(JSONObject object, GraphResponse response) {//这里获取的头像是50*50try {if (platformListener != null) {if (object != null) {String name = object.optString("name");String gender = object.optString("gender");String picture="";JSONObject jsonObject = object.optJSONObject("picture");if(jsonObject!=null){JSONObject data=jsonObject.optJSONObject("data");if(data!=null){picture=data.optString("url");}}UserBean userBean = new UserBean();userBean.setName(name);userBean.setSex(gender);userBean.setAvatar(picture);platformListener.onSuccess(true, userBean);}else {platformListener.onSuccess(false, null);}}}catch (Exception e){if(platformListener!=null) {platformListener.onSuccess(false, null);}e.printStackTrace();}}});graphRequest.setParameters(parameters);graphRequest.executeAsync();}}

在Activity调用方式如上面的Twitter,这里就不在讲了。最后这里贴下LoginSDK的代码,很简单


public class LoginSDk {@NonNullpublic static Platform getPlatFrom(Activity activity,String platform){if(FaceBook.NAME.equals(platform)){return  new FaceBook(activity);}else if(Twitter.NAME.equals(platform)){return new Twitter(activity);}return null;}
}

Twitter、Facebook的集成就介绍到这里了,有什么问题欢迎留言。

快速集成Twitter、Facebook登录并获取用户信息相关推荐

  1. iOS第三方登录之Twitter(登录,获取用户信息)含demo

    一.  登录twitter和创建应用 1.打开twitter的官网https://dev.twitter.com,如果还没有注册账号的,需要先注册账号,已经注册账号的,请先登录. 2.选择,My ap ...

  2. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)

    微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...

  3. php把微信一键登录,PHP微信第三方实现一键登录及获取用户信息的方法(实例详解)...

    这篇文章主要介绍了PHP版微信第三方实现一键登录及获取用户信息的方法,较为详细的分析了微信第三方登陆的相关注意事项与实现技巧,需要的朋友可以参考下 注意,要使用微信在第三方网页登录是需要"服 ...

  4. 小程序:登录页获取用户信息并传递用户数据到个人中心页

    步骤一:个人中心页添加"立即登录"按钮跳转至登录页 一.个人中心页的me.wxml代码 <view class="userinfo"><but ...

  5. java支付宝网页授权登录界面_支付宝开发平台之第三方授权登录与获取用户信息...

    对于第三方登录,我们常见了,很多应用可以进行第三方登录,我常用的有:QQ.微信.新浪.支付宝等等,今天我们就一起来简单学习一下支付宝第三方授权登录. 打开支付宝开发平台,注册成为开发者,点击开发者中心 ...

  6. Unity接入越南社交软件Zalo登录之获取用户信息

    根据Unity接入越南社交软件Zalo登录(Android)之SDK接入接入SDK后,需要获取用户name,id,头像,性别的信息,这一篇文章教你如何获取 根据官网文档获取用户信息API ZaloSD ...

  7. 小程序登录授权获取用户信息

    一  登录 时序图如下: wx.login() 获取js_code 示例代码: App({ onLaunch: function() { wx.login({ success: function(re ...

  8. 关于网页版微信扫码登录以及获取用户信息

    由于我只研究了1天时间,可能有些地方认知错误 1:网页版微信扫码登录的流程 ① 点击扫码登录按钮 ② qrAuthorize(访问微信接口,如果微信接口判断有权限生成二维码的话,跳转到二维码页面.) ...

  9. 微信公众号授权登录,获取用户信息openid(亲测有效)

    需求:客户登录微信公众号进行账号注册,绑定微信openid,下次根据openid验证自动登录. 详细代码:https://download.csdn.net/download/yaya_jn/7492 ...

最新文章

  1. 我是架构师--设计模式-单例模式
  2. 面试算法经典书籍--编程之美
  3. etcd集群部署与遇到的坑(转)
  4. Appium进行iOS自动化测试时遇到的问题及解决办法
  5. 重磅解读 | 赵义博:量子密码的绝对安全只存在于理论
  6. Android BaseAdapter应用基础
  7. MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(5)
  8. Linux 通过关键字查询文档内容
  9. TPA6100A2DGKR立体声音频功率放大器
  10. 编译原理 词法分析实验 流程图传不上去,不传了
  11. MATLAB直方图均衡化函数的计算及使用
  12. 华科计算机系统结构研究生就业,华中科技大学这四个“王牌”专业,堪比金字招牌,考上就是“香饽饽”...
  13. Ping计算机名和Ping网站域名都是由DNS解析吗?
  14. putty 下载地址
  15. java技术晨讲可以讲什么内容,晨讲和晨测都是提升郑州达内小伙们技能的好方法...
  16. 普利姆算法解决最短修路问题
  17. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)
  18. 健身体训练课程营销活动宣传视频PR模板 MOGRT
  19. 【CET4四级英语】【单词】英语四级高频词汇(3)
  20. Android动态创建快捷方式

热门文章

  1. Mysql学习——行与列的多种转换
  2. hivesql行转列和列转行
  3. JavaScript使用MQTT
  4. 刺激战场显示战斗服务器未响应,绝地求生刺激战场显示版本不行怎么办 版本不行不能玩解决方法...
  5. 让烦人的弹窗广告消失操作
  6. 海洋单元格到离它最近的陆地单元格的距离
  7. gromacs 选区用法
  8. 图像修补Rapid Frequency Selective Reconstruction (FSR)算法(局部相关性)
  9. mysql身份证号出生年月计算年龄(周岁)
  10. PDF删除页面怎么操作?这几个方法推荐给你