Android 版 Facebook SDK 入门指南

本文档介绍了如何使用 Android 版 Facebook SDK,着手集成 Android 应用与 Facebook。Android 版 Facebook SDK 的当前版本为 12.0.0,并且需要使用 Android API 15。如需了解版本和功能的更多相关信息,请参阅 Android 版 Facebook SDK

使用 Facebook SDK 时,如果您未禁用自动记录事件功能,系统会自动记录和收集应用中的部分事件。如要详细了解系统会收集哪些信息以及如何禁用自动记录事件功能,请参阅自动记录应用事件

您可以设置应用,以通过以下方式使用 Android 版 Facebook SDK:

  • 使用“快速入门”。
  • 借助 Android 版 Facebook SDK 设置项目。

快速入门

要获取 Facebook 应用编号,请配置应用设置并导入 Android 版 Facebook SDK,然后点击下方按钮,按照说明进行操作。

Android 版快速入门

了解广告编号权限

从 13.0.0 版开始,使用 Android 版 Facebook SDK 创建的每个应用都会自动为应用添加广告编号权限。如需了解更多信息,请参阅广告编号:Play 管理中心帮助

在某些情况下,您可能不希望应用提供广告编号权限。例如,如果应用的客户为儿童和家庭,则广告编号权限可能与他们无关。要停止使用应用的广告编号权限,请按照本文档的后续说明进行操作。

Android Studio 设置

创建项目

要在 Android Studio 项目中使用 Facebook SDK,请将 Facebook SDK 添加为构建依赖项,并加以导入。

  1. 前往 Android Studio > 新项目 > 支持的最低 SDK 版本

  2. 选择 API 15:Android 4.0.3 (IceCreamSandwich) 或更高版本,然后创建新项目。

  3. 打开 Gradle Scripts | build.gradle (Project: <your_project>) 文件并添加以下代码:

    mavenCentral()
    
  4. 保存然后关闭 build.gradle (Project: <your_project>) 文件。

  5. 打开 Gradle Scripts | build.gradle (Module: app) 文件,将以下代码添加到 dependencies 部分:

    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    

  6. 保存然后关闭 build.gradle (Module: app) 文件。

  7. 构建项目。现在您可以将 com.facebook.FacebookSdk 导入应用。

更新清单

应用编号客户端口令添加到项目的字符串文件,然后更新清单文件。执行以下操作:

  1. 打开应用项目中的 /app/res/values/strings.xml 文件。

  2. 添加名称为 facebook_app_id 以及 facebook_client_tokenstring 元素,并将值相应设置为应用编号客户端口令。例如,如果您的应用编号为 1234,并且客户端口令为 56789,则您的代码格式如下所示:

    <string name="facebook_app_id">1234</string><string name="facebook_client_token">56789</string>
  3. 打开应用项目中的 /app/manifests/AndroidManifest.xml 文件。

  4. application 元素中,针对应用编号和客户端口令添加 meta-data 元素:

    <application android:label="&#064;string/app_name" ...>
        ...
        <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>
  5. 在清单中 application 元素的后面添加 uses-permission 元素:

    <uses-permission android:name="android.permission.INTERNET"/>
  6. (可选)要停止使用广告编号权限,请在清单中 application 元素的后面添加 uses-permission 元素:

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
  7. 构建项目。

启用分享

要分享应用中的链接、图片或视频,请在清单中声明 FacebookContentProvider 权限。执行以下操作:

  1. 打开应用项目中的 /app/manifests/AndroidManifest.xml 文件。

  2. 在清单中,针对 FacebookContentProvider 授权,添加 provider 元素。在 authorities 值的末尾附加应用编号。例如,如果应用编号为 1234,则声明如下:

    <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
    
  3. 构建项目。

运行示例应用

Android 版 Facebook SDK 随附以下示例:

您可以将 Facebook SDK 导入 Android Studio 项目,以试验这些示例。这些示例拥有项目依赖项,而不是借助 mavenCentral 或 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 中,您需要具备以下条件:

在 Java SDK 文件夹的命令提示符中运行以下命令。这会生成一个包含 28 个字符的字符串。

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

前往 Facebook 开发者网站。登录 Facebook,然后通过右上方的下拉菜单前往开发者设置

在开发者设置中,选择菜单中的示例应用,然后将密钥哈希添加至个人主页并保存:

如果使用多个计算机进行开发,您可以添加多个密钥哈希。

您现在可以编译和运行所有示例应用,包括使用 Facebook 登录的应用。

创建开发密钥哈希

Facebook 通过密钥哈希验证您的应用和 Facebook 应用之间的互动。如果您运行使用 Facebook 登录的应用,则您需要将 Android 开发密钥哈希添加到 Facebook 开发者个人主页中。

针对那些您发布的应用版本,您也需要生成和设置发布密钥哈希

无论是在 OS X 还是 Windows 中,您都可以通过生成的方式或者利用 Settings.getApplicationSignature(Context) 返回的值来获取密钥哈希。如需相关说明,请参阅运行示例应用

创建发布密钥哈希

要验证您应用与 Facebook 之间的信息交流,您需要生成发布密钥哈希,并将其添加至 Facebook 应用编号的 Android 设置。否则,在将应用发布至商店时,您的 Facebook 集成可能会无法正常运作。

在上一个步骤中,您应该已经使用开发环境密钥哈希更新 Facebook 开发者设置

在发布应用时,通常会使用与开发环境不同的签名完成签名。因此,您需要确保自己创建了发布密钥哈希,并将其添加至 Facebook 应用编号的 Android 设置。

要生成发布密钥哈希,请在 Mac 或 Windows 中运行以下命令,并替换您的发布密钥别名和密钥库路径。

在 Mac OS 中运行以下命令:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

在 Windows 中,您需要具备以下条件:

在 Java SDK 文件夹的命令提示符中运行以下命令:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

请务必使用您在首次创建发布密钥时设置的密码。

此命令应该会生成一个包含 28 个字符的字符串。复制此发布密钥哈希,并将其粘贴至 Facebook 应用编号的 Android 设置。

您也应该确认 Facebook 应用编号的 Android 设置是否还包含 Android 程序包的正确程序包名称和主要活动类。

将 Android 版 Facebook SDK 与 Maven 结合使用

您可以使用 Android 版 Facebook SDK 的最新可用版本声明 Maven 依赖项。

<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=

将密钥哈希保存至开发者个人主页。重新运行示例,验证您能否成功登录。