Facebook android 第三方登录 android平台使用Facebook账号登录自己的app - 前期准备 - 注册Facebook开发者账号,添加自己的应用,按照官方文档的指引完成需要的步骤 - 按照官方的文档进行android客户端的配置 地址:https://developers.facebook.com/docs/facebook-login/android . 在文档中先完成第一步,按照指引没有问题 . 完成项目对Facebook的依赖 打开刚刚在Facebook上注册的项目 . 在build.gradle中添上对Facebook SDK dependencies{ compile 'com.facebook.android:facebook-android-sdk:[4,5)' . 在/res/values/strings.xml<string name="facebook_app_id">149416002205054</string> 下面这个是对没有安装Facebook客户端的登录(新的SDK可以允许不下载Facebook客户端)<string name="fb_login_protocol_scheme">fb149416002205054</string>. 使用官方的LoginButton做测试 //TODO 后期改为自定义Button 在res/layout/xxx.xml中添上. 在manifests.xml中进行配置添加对上面两个值的依赖<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tao.chongba"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"/> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <activity android:name=".chongba"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <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" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </manifest<com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp" /> . 最后开始activity的编写 activity类继承了FragmentActivity类 使用loginManager进行注册回调 override onCreate(),首先要先对Facebook的sdk进行初始化FacebookSdk.sdkInitialize(getApplicationContext()); 下面开始进行set view 和 注册回调 最后通过onActivityResult
方法将回调结果传给callbackManager
完成的代码如下package com.example.tao.chongba; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; public class chongba extends FragmentActivity { CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_chongba); callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code System.out.println("SUCCESS"); System.out.println("AccessToken :"+loginResult.getAccessToken().getToken()); } @Override public void onCancel() { // App code System.out.println("CANCEL"); } @Override public void onError(FacebookException exception) { // App code System.out.println("ERROR"); } }); // LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile")); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); System.out.println("data : "+data.toString()); callbackManager.onActivityResult(requestCode, resultCode, data); } } 最后在登录成功里面获取到AccessToken 得到AccessToken后可以使用Graph API 来获取用户的资料 这里是在server端进行获取userInfo的 创建需要的userInfo的信息实体类 public class FBUserInfoEntity { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 利用HttpClient获取API返回的UserInfo package com.pet.util.thirdparty; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.StatusLine; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class FBUserInfoUtil { public FBUserInfoEntity getFBUser(String accessToken) throws IOException{ StringBuilder sb = new StringBuilder(); sb.append("https://graph.facebook.com/v2.8/me?access_token=") .append(accessToken); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet HG = new HttpGet(sb.toString()); CloseableHttpResponse response = httpClient.execute(HG); try{ StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if(statusCode == 200){ HttpEntity entity = response.getEntity(); return new ObjectMapper().readValue(EntityUtils.toString(entity), FBUserInfoEntity.class); }else{ return new FBUserInfoEntity(); } }finally{ response.close(); } } } 这样就获取到Facebook用的信息最后进行数据处理,处理完之后由client端访问API进行数据访问 //TODO 后期补上Client端直接获取用户的资料并在view中显示 //因为第一次接触android,好多不是很懂,先记下来,后期对每个点进行学习
- 列表内容
Facebook android 第三方登录
最新推荐文章于 2020-11-13 16:04:18 发布