Android应用添加Facebook登录

要集成Facebook登录,我们要先了解官方网站developers.facebook.com/ 。

首先,你要先注册一个开发者账号。

然后实现facebook登录的官方sdk。

kts 复制代码
implementation("com.facebook.android:facebook-login:4.42.0")

在strings.xml文件中定义三个字段,然后在AndroidManifest.xml中引用。

xml 复制代码
<string name="facebook_app_id">1234</string>
<string name="fb_login_protocol_scheme">fb1234</string>
<string name="facebook_client_token">56789</string>
xml 复制代码
<application>
     <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">
     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
     <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
</application>

接下来,查看app设置。 facebook_app_id就是App ID,fb_login_protocol_scheme则是在facebook_app_id的开头加上fb,facebook_client_token是App secret。

它需要jks文件的SHA1指纹。

MacOS执行

bash 复制代码
keytool -exportcert -alias key0 -keystore /Users/dora/Desktop/dorachat-android/dorachat.jks   | openssl sha1 -binary | openssl base64

Windows执行

bash 复制代码
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME.android\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" base64

就可以填入输出的key hash。

在Application的onCreate中初始化sdk。

java 复制代码
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);

自定义Use cases

将权限设置变为做好测试准备。 截屏2023-10-25 02.36.12.png 添加登录按钮

xml 复制代码
<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" /> 

这个是facebook官方提供的控件,你也可以不用它的,自己实现登录逻辑。后面是一些常用的操作的实现代码。

注册一个回调

java 复制代码
callbackManager = CallbackManager.Factory.create();

登录

java 复制代码
 private static final String EMAIL = "email";
      
![截屏2023-10-25 02.36.12.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/84deadfd277044428b82f5b75612fe58~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2006&h=1268&s=974523&e=png&b=fcfcfc)
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });

检测登录状态

java 复制代码
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
java 复制代码
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

快速登录

xml 复制代码
<queries>
  <package android:name="com.facebook.katana" />
</queries> 
java 复制代码
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() {
    @Override
    public void onCompleted(AccessToken accessToken) {
        // User was previously logged in, can log them in directly here.
        // If this callback is called, a popup notification appears that says
        // "Logged in as <User Name>"
    }
    @Override
    public void onFailure() {
        // No access token could be retrieved for the user
    }
    @Override
    public void onError(Exception exception) {
        // An error occurred
    }
});

另外,Google登录请看另一篇文章,juejin.cn/post/718363... 。

相关推荐
思想觉悟21 分钟前
SEAndroid实战
android·linux·c++
思想觉悟41 分钟前
Aosp开发磨刀石之ADB速查
android·c++
应用市场3 小时前
用本机跑的开源音乐模型,给安卓小游戏做 20 秒无缝循环背景音乐
android·python·游戏开发·soundpool·音频处理
企业数字化笔记3 小时前
表单发布前怎么验收?版本引用、字段兼容和历史数据回归
android·数据挖掘·回归
生信分析笔记3 小时前
Nature 正刊 GPN-Star 基因组语言模型
android
渣渣盟3 小时前
Flink 状态管理深度剖析:从 KeyedState 到 RocksDB,状态如何存储、恢复与扩缩容
android·大数据·flink
avi91113 小时前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
OxYGC3 小时前
[工程] PHP2Shell 漏洞解析:两条 PHP 内核 RCE,为什么应用层的防护全部失效
android·开发语言·php
拥小抱19 小时前
Compose 知识点
android
文章永久免费只为良心19 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南