FaceBook 官方API Android 分享集成

此文档基于 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=

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,018评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,421评论 2 45
  • 题目: C++: 注意对int **二维数组的使用, 基数排序.
    贰拾贰画生阅读 906评论 0 0
  • 前些日子拜访桃花岛,听到浪拍礁石碧海潮生,总觉得黄药师站在哪块巨石上吹过箫。金书中的角色,人们都说杨过狂,窃以为那...
    小邪姑娘阅读 303评论 0 2