此文档基于 FaceBook 官方文档
在 Android 平台分享,以后会推出Facebook登录
本指南详细介绍如何通过 Android 应用将内容分享到 Facebook。用户通过您的应用分享时,相关内容会在其时间线上显示,并且可能在其好友的动态消息中显示。
用户还可通过您的应用将内容分享到 Facebook Messenger。
Android Studio 设置
要在项目中使用 Facebook SDK,请将其添加为构建依赖项,然后导入。
1.前往 Android Studio | New Project(新项目)| MinimumSDK(最低 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 之前,需要先进行初始化。添加调用 FacebookSdk.sdkInitialize或onCreate 内 Activity中的 Application:
// Add this to the header of your file:import com.facebook.FacebookSdk;
// Updated your class body:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
// Initialize the SDK before executing any other operations,
// especially, if you're using Facebook UI elements.
}
添加 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>
使用登录或分享功能
要使用 Facebook 登录或分享功能,还需要将 FacebookActivity
添加到清单:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
发送图片或视频
如果要通过 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 Tools Project Site 的 Running ProGuard 部分。
创建开发密钥哈希
Facebook 使用密钥哈希验证您的应用和 Facebook 应用之间的互动。如果运行使用 Facebook 登录功能的应用,则您需要向 Facebook 开发者资料页添加 Android 开发密钥哈希。
对于您发布的应用版本,也需要生成和设置发布密钥哈希。
在 OS X 或 Windows 内,您可以直接生成密钥哈希,也可以使用Settings.getApplicationSignature(Context)
返回的值获得哈希。如需获取详细说明,请参阅运行示例应用。
后续步骤
安装 Android 版 Facebook SDK 并配置 Facebook 应用编号后,将激活以下功能:
Android 版 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=
在开发者资料页保存密钥哈希。重新运行示例,验证是否可以成功登录。