FacebookAccountKit接入
需求要接入FacebookAccountKit登录,整理了接入过程(需准备Facebook账号)附链接地址,用的是Facebook的原生页面,没有自定义, FacebookAccountKit手机号不需要绑定Facebook账号。https://developers.facebook.com/docs/accountkit/android
1. 选择应用或新建应用
2. 选择您的应用设置
接入FacebookAccountKit产品到自己的app项目
3. 导入 Account Kit SDK
项目目录下gradle文件添加
repositories {
jcenter()
}
modle目录下gradle文件添加
dependencies {
implementation 'com.facebook.android:account-kit-sdk:4.+'
}
4.添加 XML 字符串并编辑 Manifest 清单
strings.xml 文件
<string name="app_name">[AppName]</string>
<string name="FACEBOOK_APP_ID">应用编号</string>
<string name="ACCOUNT_KIT_CLIENT_TOKEN">[Account Kit 客户端口令]</string>
清单文件权限配置
<uses-permission android:name="android.permission.INTERNET"/>
<meta-data android:name="com.facebook.accountkit.ApplicationName"
android:value="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/FACEBOOK_APP_ID" />
<meta-data android:name="com.facebook.accountkit.ClientToken"
android:value="@string/ACCOUNT_KIT_CLIENT_TOKEN" />
<activity
android:name="com.facebook.accountkit.ui.AccountKitActivity" />
定义 AccountKitActivity,允许它在应用中启用。 如果您使用高级 UI 自定义元素,还应向 AccountKitActivity 添加@style/AppLoginTheme 和 android:theme,以自定义 UI 的配色方案
<activity
android:name="com.facebook.accountkit.ui.AccountKitActivity"
android:theme="@style/AppLoginTheme"
tools:replace="android:theme" />
确保 @style/AppLoginTheme 继承自 Theme.AccountKit。 如果想为您的 Account Kit 应用禁用应用事件,应向 AndroidManifest.xml 文件添加以下内容:
<meta-data android:name="com.facebook.accountkit.FacebookAppEventsEnabled"
android:value="false"/>
5.添加开发和发布密钥散列
首先获取OpenSSL工具https://code.google.com/p/openssl-for-windows/downloads/list
我的做法是解压到C盘根目录
debug.keystore默认路径:C:\Users\xxx\.android
默认密码:android
生成开发密钥散列,此处只讲 Windows 环境,运行以下命令:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
%HOMEPATH%:keystore路径
此命令将针对您的开发环境生成一个包含 28 个字符的唯一密钥散列。将其复制粘贴到下面的字段中。对于参与应用开发的每个人的开发环境,您必须分别提供开发密钥散列。
生成发布密钥散列
要生成发布密钥散列,运行以下命令,并替换您的发布密钥别名和 keystore 路径:
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
6.检查当前的会话
应用面板中的启用客户端访问口令流程开关为“开”,应该检查当前是否存在有效的口令:
import com.facebook.accountkit.AccountKit;
import com.facebook.accountkit.AccessToken;
AccessToken accessToken = AccountKit.getCurrentAccessToken();
if (accessToken != null) {
//Handle Returning User
} else {
//Handle new or logged out user
}
7.开始短信登录流程
调起Facebook API
public void phoneLogin() {
final Intent intent = new Intent(this, AccountKitActivity.class);
String[] countryList = new String[]{"CN", "ID"};//设置支持国家
AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
new AccountKitConfiguration.AccountKitConfigurationBuilder(
LoginType.PHONE,//登陆类型:手机短信类型(两种类型可选PHONE/EMAIL)
AccountKitActivity.ResponseType.CODE)// 务必设置与 Facebook 开发者门户网站面板中的应用授权设置相匹配的 AccountKitActivity.ResponseType:
// 如果应用面板的启用客户端访问口令流程开关设置为“开”,则指定为TOKEN,如果设置为“关”,则指定为 CODE
.setUIManager(new BaseUIManager(R.style.AppLoginTheme))//自定义属性
.setSMSWhitelist(countryList)
.setDefaultCountryCode("ID");//(可选)设置短信登录流程中默认显示的国家/地区代码);
// ... perform additional configuration ...
intent.putExtra(
AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
configurationBuilder.build());
startActivityForResult(intent, APP_REQUEST_CODE);
}
回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == APP_REQUEST_CODE) { // confirm that this response matches your request
AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
String toastMessage;
if (loginResult.getError() != null) {
toastMessage = loginResult.getError().getErrorType().getMessage();
showErrorActivity(loginResult.getError());
} else if (loginResult.wasCancelled()) {
toastMessage = "Login Cancelled";
} else {
if (loginResult.getAccessToken() != null) {
toastMessage = "Success:" + loginResult.getAccessToken().getAccountId();
} else {
toastMessage = String.format("Success:%s...", loginResult.getAuthorizationCode().substring(0, 10));
}
// If you have an authorization code, retrieve it from
// loginResult.getAuthorizationCode()
// and pass it to your server and exchange it for an access token.
// Success! Start your next activity...
goToMyLoggedInActivity(loginResult.getAuthorizationCode());
}
// Surface the result to your user in an appropriate way.
Toast.makeText(this, toastMessage, Toast.LENGTH_LONG).show();
}
}
最后设置截图