Android 版 SDK 新手入门
Android 版 Facebook SDK 是将 Android 应用与 Facebook 集成的最简便方法。其中包括:
- Facebook 登录 — 通过 Facebook 凭证验证用户身份。
- Account Kit — 用户只需使用电话号码或电子邮箱即可登录。
- “分享”和“发送”对话框 — 实现从您的应用将内容分享到 Facebook。
- 应用事件 — 记录应用内事件。
- 图谱 API — 读写图谱 API。
要使用 Facebook SDK,有两种应用设置方法:
- 使用快速入门。
- 使用 Facebook SDK 设置项目。
Android Studio 设置
要在项目中使用 Facebook SDK,请将其添加为构建依赖项,然后导入。
1.前往 Android Studio | New Project(新项目)| Minimum SDK(最低 SDK)
2.选择 API 15: Android 4.0.3 或更高版本,然后创建新项目。
3.创建新项目后,打开
your_app | build.gradle(您的应用 | build.gradle)

4.将以下字符串添加到模块级 /app/build.gradle 的 dependencies 之前:
repositories {
mavenCentral()
}5.将配置最新版本 Facebook SDK 的 compile 依赖项添加到 build.gradle 文件:
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.+'
}6.构建项目,然后即可将 com.facebook.FacebookSdk 导入应用。
使用 Facebook SDK 之前,需要先进行初始化。在 Application 类的 onCreate 中,添加对 FacebookSdk.sdkInitialize 的调用:
// Add this to the header of your file:
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
public class MyApplication extends Application {
// Updated your class body:
@Override
public void onCreate() {
super.onCreate();
// Initialize the SDK before executing any other operations,
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
}
}添加 Facebook 应用编号
然后向项目的 strings 文件添加您的 Facebook 应用编号,并更新 Android 清单:
1.打开 strings.xml 文件。示例路径:/app/src/main/res/values/strings.xml。
2.添加新的字符串(名称为 facebook_app_id,值为 Facebook 应用编号)。
3.打开 AndroidManifest.xml。
4.将 uses-permission 元素添加到清单:
<uses-permission android:name="android.permission.INTERNET"/>
5.将 meta-data 元素添加到 application 元素内:
<application android:label="@string/app_name" ...>
...
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
...
</application>发送图片或视频
如果要通过 Android 版 Facebook 应用分享链接、图片或视频,还需要在清单文件中声明 FacebookContentProvider。
在 authorities 值的末尾添加您的应用编号。例如,如果 Facebook 应用编号是 1234,则声明应如下图所示:
<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />结合使用 SDK 和 ProGuard
无需执行任何其他步骤,即可对 Android 版 Facebook SDK 使用 ProGuard。如需获取关于 Proguard 的说明,请参阅 Android 开发者网站的“Shrink Your Code and Resources”(《精简代码和资源》)一文。
运行示例应用
以下示例均为 SDK 代码:
- HelloFacebookSample — 显示个人主页访问权限、状态更新和照片上传。
- RPSSample — 使用原生分享对话框、开放图谱发布工具、选择工具、邀请和深度链接。
- Scrumptious — 登录、请求、选择工具、照片上传和开放图谱发布工具。
按照示例操作,将 SDK 导入 Android Studio 项目。
上述示例为项目依赖关系,而不是 maven central 或 jcenter 中央存储库依赖关系。所以,当本地 SDK 副本更新时,示例将反映出相关更改。
如需快速运行示例应用,您可以生成适用于您的开发环境的密钥哈希。将这些密钥哈希添加到示例应用的 Facebook 开发者资料页。用于生成密钥哈希的 Keytool 随附于 Java SE 开发包 (JDK) 中,您在设置开发环境时需要安装这个开发包。OpenSSL 可以从 OpenSSL 下载。
在 OS X 中运行:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
在 Windows 系统中运行:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
系统将生成包含 28 个字符的字符串。
前往 Facebook 开发者网站。登录 Facebook,然后通过右上方的下拉菜单,前往开发者设置:

在开发者设置菜单中选择 Sample App(示例应用),然后添加密钥哈希并保存到资料页:

如果使用多个设备开发,则可以添加多个密钥哈希。
现在,您可以编写并运行所有示例 — 包括使用 Facebook 登录的示例。
创建开发密钥哈希
Facebook 使用密钥哈希验证您的应用和 Facebook 应用之间的互动。如果运行使用 Facebook 登录功能的应用,则您需要向 Facebook 开发者资料页添加 Android 开发密钥哈希。
对于您发布的应用版本,也需要生成和设置发布密钥哈希。
在 OS X 或 Windows 内,您可以直接生成密钥哈希,也可以使用 Settings.getApplicationSignature(Context) 返回的值获得哈希。如需获取详细说明,请参阅运行示例应用。
设置发布密钥哈希
要验证您的应用与 Facebook 之间的信息交换,您需要生成一个发布密钥哈希,并将它添加到 Facebook 应用编号内的 Android 设置。如果不执行这个操作,当应用发布到商店后,应用内的 Facebook 集成可能不会正常运行。
在之前的步骤中,您应该已使用适用于您的开发环境的密钥哈希更新 Facebook 开发者设置。
发布应用后,应用通常会签上您的开发环境的不同签名。所以,请务必创建发布密钥哈希,并将它添加到 Facebook 应用编号的 Android 设置。
要生成发布密钥哈希,请在 Mac 或 Windows 内运行以下命令,并替换您的发布密钥别名和 keystore 路径。在 OS X 中运行:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
在 Windows 中:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
请务必使用您在首次创建发布密钥时设置的密码。
此命令将生成包含 28 个字符的字符串。复制此发布密钥哈希,并将其粘贴至 Facebook 应用编号的 Android 设置。

此外,还应检查 Facebook 应用编号的 Android 设置是否还包括正确的包名和 Android 包的主要活动类别。
结合使用 Facebook SDK 和 Maven
您可以声明 Maven 与 Android 版 SDK 最新可用版本的依赖关系:
<dependency> <groupId>com.facebook.android</groupId> <artifactId>facebook-android-sdk</artifactId> <version>PUT_LATEST_VERSION_HERE</version> </dependency>
示例应用疑难解答
如果无法正常运行示例应用,则可能与密钥哈希有关。您可能会遇到以下情况:
- 显示原生“登录”对话框,但接受权限后仍处于退出状态。同时,Logcat 还包括一个异常:
12-20 10:23:24.507: W/fb4a:fb:OrcaServiceQueue(504): com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
- 显示非原生“登录”对话框,同时显示一条错误消息:“..App is Misconfigured for facebook login...”(..应用的 Facebook 登录配置错误...)。
检查密钥哈希,确保使用了正确的密钥哈希。I
您还可以手动将示例代码修改为正确的密钥哈希。例如,在 HelloFacebookSampleActivity 类中,暂时更改 onCreate():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
...保存更改,然后重新运行示例代码。检查 Logcat 的消息输出,应与下图相似:
12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=
在开发者资料页保存密钥哈希。重新运行示例,验证是否可以成功登录。