最近公司做一个国外的项目,需要集成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. DataGrid/DataList
  2. CVPR 2020 | 基于多智能体RL实现多轮连续交互,IteR-MRL使图像分割算法达到医用标准...
  3. JVM优化之调整大内存分页(LargePage)
  4. 编辑器制作的一些资源
  5. beanutils工具类_Apache Commons 工具类介绍及简单使用
  6. kirin710f是什么处理器_麒麟710a与麒麟710f哪个好?对比区别哪款性能更好一些
  7. 有关 MyEclipse-export runnable jar file选项 launch configuration里面没有可以选择的东西的解决方法...
  8. java naive方法_朴素贝叶斯方法(Naive Bayes Method)
  9. kd树介绍(KNN算法引出)
  10. numpy 基础 —— np.linalg
  11. FIO压测-SSDvsHDD
  12. java开源项目-六个经典的 SpringBoot 练手项目
  13. JobScheduler布置后台任务以及实现进程保活?
  14. 丧钟为谁而鸣:AI步步逼近,华尔街23万人将失业
  15. 【转载】Saas模式
  16. 解决Docker镜像缺少字体的问题
  17. 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪
  18. 【mysql】 踩坑记录之derived(派生表)
  19. [区块链技术] 吐血推荐!区块链从入门到放弃(区块链入门汇总整理)
  20. Android4.4监听耳机插入处理方法

热门文章

  1. Centos7:su - username 切换用户不成功
  2. python_for_hrm:基于腾讯企业邮箱SMTP服务发送员工工资条(竖表)
  3. 离线下载、安装stata外部命令
  4. PTA-7-1 统计大写字母、小写字母、数字
  5. 传统制造业如何拥抱互联网?
  6. 损失2亿美元后续,Euler正与黑客进行链上谈判
  7. selinux 是什么 (Linux)
  8. DirectX数学介绍
  9. Android app 的提醒功能
  10. REACT HOOKS实现离开页面、刷新页面的时候,强制提醒