要集成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);
将权限设置变为做好测试准备。 截屏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... 。