Android 版 SDK 新手入门

Android 版 Facebook SDK 是将 Android 应用与 Facebook 集成的最简便方法。其中包括:

要使用 Facebook SDK,有两种应用设置方法:

  • 使用快速入门。
  • 使用 Facebook SDK 设置项目。

快速入门

要获取 Facebook 应用编号、配置应用设置、导入 Facebook SDK,请点击下方按钮并遵循在线说明操作。

Android 快速入门

 

相关指南:

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.添加以下内容到 build.gradle (Project) 文件的 buildscript { repositories {}} 部分:

mavenCentral() 

5.添加以下内容到 build.gradle (module: app) 文件的 dependencies {} 部分以便编译最新版本的 Facebook SDK:

应删除此对象。联系 Arsenio Locsin 了解更多信息。

您使用 Facebook SDK 时,如果未禁用事件自动记录功能,应用事件将被自动记录和收集,用于 Facebook 分析。关于哪些信息会被收集以及如何禁用事件自动记录的详细信息,请参阅应用事件自动记录

6.构建项目。然后即可将 com.facebook.FacebookSdk 导入应用。

添加 Facebook 应用编号

然后向项目的字符串文件添加您的 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) 返回的值获得散列。如需获取详细说明,请参阅运行示例应用


后续步骤

安装 Android 版 Facebook SDK 并配置 Facebook 应用编号后,将激活以下功能:


设置发布密钥散列

要验证您的应用与 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=

开发者资料页保存密钥散列。重新运行示例,验证是否可以成功登录。