Facebook登陆SDK接入(Android)

梁研
2023-12-01

官方文档

Android 版 Facebook 登录 — 快速入门

接入准备

1】首先去Facebook开发者平台创建自己的应用,这里一般是运营的工作。本文主要讲解接入过程以及遇到的一些问题,其他不赘述。

集成SDK

1】Maven方式:
项目级的build.gradle

repositories {
      jcenter()  //添加
   }

应用级的build.gradle

dependencies {
   implementation 'com.facebook.android:facebook-login:[5,6)'  //添加

2】jar包导入方式
下载Facebook最新的SDK的 jar包,放到项目的libs文件夹下。
下载地址在上方官方文档中有

编辑您的资源和清单

1】打开您的 /app/res/values/strings.xml 文件。
添加如下所示的代码:

<resources>
    <string name="facebook_app_id">后台有</string>
    <string name="server_client_id">后台有</string>
</resources>

2】打开 /app/manifest/AndroidManifest.xml 文件。
在 application 元素后添加以下 uses-permission 元素:

<uses-permission android:name="android.permission.INTERNET" />

3】在 application 元素中添加以下 meta-data 元素。 官方文档添加内容比这多,可以看下。我的项目只添加以下meta-data(添加Facebook的activity会有奇怪的报错…)

<meta-data 
    android:name="com.facebook.sdk.ApplicationId" 
    android:value="@string/facebook_app_id"/>

将包名填入FB后台

正确填入即可

生成密钥散列

官方文档很坑,直接给了一个debug的生成命令,疏忽的小朋友如果照着文档执行,测试包不会有问题,但是一旦上线,玩家手机中装有Facebook应用后,就无法进入游戏,
提示:登陆错误:将你登陆到此应用程序时错误,请稍后再试。
所以这里生成散列要生成两个,并都填入后台。

每个 Android 开发环境都将会有一个唯一的开发密钥散列
打开mac的终端,输入以下命令就会生成28个字符串的一个散列。
Mac – Debug的:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Mac – 正式的:

keytool -exportcert -alias **YOUR_RELEASE_KEY_ALIAS** -keystore **YOUR_RELEASE_KEY_PATH** | openssl sha1 -binary | openssl base64

YOUR_RELEASE_KEY_ALIAS:看下你的keyAlias是多少,填入
YOUR_RELEASE_KEY_PATH:你的keystore文件路径

Windows

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

以上,在后台输入包名,散列后就可以后面愉快的代码接入了
1】在onCreate()方法中添加回调

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // facebook registerLoginCallback
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code, 登陆成功,自己编写成功后的方法
						//获取FB返回的uid:loginResult.getAccessToken().getUserId();
                    }

                    @Override
                    public void onCancel() {
                         // App code, 登陆取消,自行编写
                    }

                    @Override
                    public void onError(FacebookException exception) {
                         // App code  
                        Log.e(TAG, "exception: " + exception);
                    }
        });
        
        //检测登陆状态,可选功能。 在官方文档中也有介绍,判断本地是否有登陆缓存,直接登陆
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        isFBLoggedIn = accessToken != null && !accessToken.isExpired();

2】需要登陆的地方添加以下代码

LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));

3】最后,在 onActivityResult 方法中调用 callbackManager.onActivityResult,通过 callbackManager 将登录结果传递至 LoginManager

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }

至此,接入完成。

遇到的问题

1】第一个问题玩家无法登陆Facebook账号,在生成散列中已经说明了。
2】如果提示:“xxxxxxxFacebook-login 5.9.0 in AndroidManifest”,就把清单中的FacebookActivity注释掉。
3】编译过程遇到的问题可在其他文章中找到解决方案。

 类似资料: