Facebook三方登陆流程

Facebook三方登陆流程Facebook 三方登陆流程准备工作注册一个 facebook 账号 注册流程就不说了 需要科学上网 正篇进入 FacebookDeve 官方网站 登录 Facebook 账号 ps 如果第一次登陆进来图中框起来的地方是

大家好,欢迎来到IT知识分享网。

Facebook三方登陆流程

准备工作

  • 注册一个facebook账号(注册流程就不说了,不懂百度)

正篇

  • 进入Facebook Developer官方网站,登录Facebook账号

在这里插入图片描述

ps:如果第一次登陆进来图中框起来的地方是“新手xx”忘记截图记不太住了,反正一点进去是一个注册成为Developer,按照步骤注册就行了,注册好之后,就是图中这样,点击我的应用。

  • 点击创建应用

在这里插入图片描述

  • 按图中所示操作

在这里插入图片描述

在这里插入图片描述

  • 创建好之后就可以看到这样的界面,点击Facebook登录对应的设置

在这里插入图片描述

  • 点击Android

在这里插入图片描述

在这里插入图片描述

这里一步一步的跟着做,就可以实现Facebook三方登录了。

ps:第一步这个下载SDK不下载也行。需要边在AS中编写边在上面的截图每一步中增加一些东西,他会一步一步指导怎么操作

比如这种(后面也还有一些,后面实践中会具体介绍):在这里插入图片描述

实践

实际操作一下,记录下每个步骤。

  1. 在这里我新建了一个FaceBookDemo项目,包名为:com.askey.dvr.facebookdemo
  2. build中加入:
    repositories { google() jcenter() mavenCentral() } 
    implementation 'com.facebook.android:facebook-android-sdk:[4,5)' 
    implementation 'com.facebook.android:facebook-android-sdk:[8,9)' //目前最新的 
  3. 在网站上的第三步中填写信息:

在这里插入图片描述

在这里插入图片描述

  1. 这里需要填入一个密匙散列:

在这里插入图片描述

这里提供一种简单的方式获取(java代码方式):

public void getKeyHash() { 
    try { 
    PackageInfo info = getPackageManager().getPackageInfo("你的包名", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { 
    MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KEYHASH","KEYHASH------" + Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { 
    } catch (NoSuchAlgorithmException e) { 
    } } 
  1. 这里选择是或者否,根据需要选择

在这里插入图片描述

  1. 根据提示加入代码到相应位置

在这里插入图片描述

 * 在string.xml文件下添加: ```xml <string name="facebook_app_id">app id</string> <string name="fb_login_protocol_scheme">fb+app id</string> ``` 建议直接从网站上复制 
  • 在AndroidManifest.xml中加入网络权限
    <uses-permission android:name="android.permission.INTERNET" /> 
  • 在application中加入
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> //配置对应的FacebookActivity,用于登录跳转Facebook应用 <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> //配置无安装Facebook时,网页跳转界面 <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> 
  1. 初始化
    FacebookSdk.sdkInitialize(this); AppEventsLogger.activateApp(this); 
  2. 使用Facebook原生的button(当然也可以自己定义,都一样),用户点击按钮后,就会以LoginManager中设置的权限开始登录,按钮随登录状态变化,并根据用户的身份验证状态显示正确的文本。
    <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" /> 
  3. java代码,直接贴代码,解释我也解释不来
    public class MainActivity extends AppCompatActivity { 
          private static final String TAG = "MainActivity"; private LoginButton loginButton; private CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FacebookSdk.sdkInitialize(this); AppEventsLogger.activateApp(this); //注册callback callbackManager = CallbackManager.Factory.create(); //官网定义fb按钮的做法 loginButton = findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_friends")); loginButton.setReadPermissions("email"); // If using in a fragment // loginButton.setFragment(this); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
          @Override public void onSuccess(LoginResult loginResult) { 
          // App code Log.d(TAG, "onSuccess:-----------"); } @Override public void onCancel() { 
          // App code Log.d(TAG, "onCancel: -----------"); } @Override public void onError(FacebookException exception) { 
          // App code Log.d(TAG, "onError: -----------"); } }); //用户自定义fb按钮的做法 LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
          //为了响应登录结果,您需要使用 LoginButton 注册回调. //如果登录成功,LoginResult 参数将拥有新的 AccessToken 及最新授予或拒绝的权限。 @Override public void onSuccess(final LoginResult loginResult) { 
          GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
          @Override public void onCompleted(JSONObject object, GraphResponse response) { 
          if (object != null) { 
          String email = object.optString("email"); String firstname = object.optString("first_name"); String lastname = object.optString("last_name"); Log.e("log", "LoginActivity - email----" + email); Log.e("log", "LoginActivity - getLoginInfo::---" + object.toString()); Log.e("log", "LoginActivity - getLoginInfo::---" + response.toString()); AccessToken accessToken = loginResult.getAccessToken(); String fbuserId = accessToken.getUserId(); String token = accessToken.getToken(); Log.e("log", "LoginActivity - accessToken:::" + accessToken); Log.e("log", "LoginActivity - userid:::" + fbuserId); if (accessToken != null) { 
          //如果登录成功,跳转到登录成功界面,拿到facebook返回的email/userid等值,在我们后台进行操作 // FbLogin(); } } } }); //这一段也不知道干嘛 Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale," + "updated_time,timezone,age_range,first_name,last_name"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { 
          // Toast.makeText(LoginActivity.this, "facebook_account_oauth_Cancel", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException e) { 
          // Toast.makeText(LoginActivity.this, "facebook_account_oauth_Error", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 
          callbackManager.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); } } 

简单的使用登录就这样了。

ps:如果你的应用没有上架,那么只能用你申请facebook开发者的那个账号登录,不然会提示没有权限

还有一些

在这里插入图片描述

对于这段,在实际运用中是这样的。自己写一个button。这时候有一个自己写的button和Facebook官方定义的LoginButton,实现自定义登陆

button.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
    AccessToken accessToken = AccessToken.getCurrentAccessToken(); boolean isLoggedIn = accessToken != null && !accessToken.isExpired(); if (isLoggedIn){ 
    Log.d(TAG, "onClick: ==============="); LoginManager.getInstance().logOut(); }else{ 
    Log.d(TAG, "onClick: --------------------"); LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile")); } } }); 

我对这段代码的理解就是,简单说就是这两个button的功能其实就是一样的,没登录,点击就是登陆,登陆了,点击就是退出。如果登陆了就会把缓存进AccessToken。

  • 获取用户信息
    profileTracker = new ProfileTracker() { 
          @Override protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
          String id = currentProfile.getId(); String name = currentProfile.getName(); Log.d(TAG, "onCurrentProfileChanged: id is : " + id + "name is : " + name); } }; 

参考博文:facebook第三方登录,看了你不会后悔

​ Facebook第三方登录

对代码进行封装请参考:Android 第三方登录集-FaceBook 登录集成

以为这就完了?不还没有
还有一些其他东西
接着看
  • 你还可以申请获取用户的其他信息

在这里插入图片描述

  • 应用及流量限制

在这里插入图片描述

  • 增加测试用户在这里插入图片描述

差不多就这些了吧,官方文档写的都很清楚。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137602.html

(0)
上一篇 2025-06-19 15:00
下一篇 2025-06-19 15:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信