FaceBook 官方API Android 分享集成

此文檔基于 FaceBook 官方文檔

在 Android 平臺分享菩鲜,以后會推出Facebook登錄

本指南詳細(xì)介紹如何通過 Android 應(yīng)用將內(nèi)容分享到 Facebook驶忌。用戶通過您的應(yīng)用分享時,相關(guān)內(nèi)容會在其時間線上顯示座享,并且可能在其好友的動態(tài)消息中顯示。
用戶還可通過您的應(yīng)用將內(nèi)容分享到 Facebook Messenger旨袒。

Android Studio 設(shè)置

要在項目中使用 Facebook SDK瓣铣,請將其添加為構(gòu)建依賴項,然后導(dǎo)入碗旅。
1.前往 Android Studio | New Project(新項目)| MinimumSDK(最低 SDK)
2.選擇 API 15: Android 4.0.3或更高版本渡处,然后創(chuàng)建新項目。
3.創(chuàng)建新項目后祟辟,打開 your_app | build.gradle(您的應(yīng)用 | 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.構(gòu)建項目医瘫,然后即可將 com.facebook.FacebookSdk 導(dǎo)入應(yīng)用。
使用 Facebook SDK 之前旧困,需要先進(jìn)行初始化醇份。添加調(diào)用 FacebookSdk.sdkInitialize或onCreate 內(nèi) 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 應(yīng)用編號
然后向項目的 strings 文件添加您的 Facebook 應(yīng)用編號,并更新 Android 清單:
1.打開 strings.xml文件吼具。示例路徑:/app/src/main/res/values/strings.xml被芳。
2.添加新的字符串(名稱為 facebook_app_id,值為 Facebook 應(yīng)用編號)
3.打開 AndroidManifest.xml
4.將 uses-permission元素添加到清單:

<uses-permission android:name="android.permission.INTERNET"/>

5.將 meta-data元素添加到 application元素內(nèi):

<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" />


發(fā)送圖片或視頻
如果要通過 Android 版 Facebook 應(yīng)用分享鏈接畔濒、圖片或視頻,還需要在清單文件中聲明FacebookContentProvider锣咒。
在 authorities值的末尾添加您的應(yīng)用編號侵状。例如,如果 Facebook 應(yīng)用編號是 1234毅整,則聲明應(yīng)如下圖所示:


<provider 
android:authorities="com.facebook.app.FacebookContentProvider1234" 
android:name="com.facebook.FacebookContentProvider" 
android:exported="true" />

結(jié)合使用 SDK 和 ProGuard無需執(zhí)行任何其他步驟趣兄,即可對 Android 版 Facebook SDK 使用 ProGuard。如需獲取關(guān)于 Proguard 的說明悼嫉,請參閱 Android Tools Project Site 的 Running ProGuard 部分艇潭。

創(chuàng)建開發(fā)密鑰哈希

Facebook 使用密鑰哈希驗(yàn)證您的應(yīng)用和 Facebook 應(yīng)用之間的互動。如果運(yùn)行使用 Facebook 登錄功能的應(yīng)用,則您需要向 Facebook 開發(fā)者資料頁添加 Android 開發(fā)密鑰哈希蹋凝。
對于您發(fā)布的應(yīng)用版本鲁纠,也需要生成和設(shè)置發(fā)布密鑰哈希
在 OS X 或 Windows 內(nèi)鳍寂,您可以直接生成密鑰哈希改含,也可以使用Settings.getApplicationSignature(Context)
返回的值獲得哈希。如需獲取詳細(xì)說明迄汛,請參閱運(yùn)行示例應(yīng)用捍壤。
后續(xù)步驟
安裝 Android 版 Facebook SDK 并配置 Facebook 應(yīng)用編號后,將激活以下功能:
Android 版 Facebook 登錄
應(yīng)用事件
“分享”和“發(fā)送”對話框
設(shè)置發(fā)布密鑰哈希
要驗(yàn)證您的應(yīng)用與 Facebook 之間的信息交換鞍爱,您需要生成一個發(fā)布密鑰哈希鹃觉,并將它添加到 Facebook 應(yīng)用編號內(nèi)的 Android 設(shè)置。如果不執(zhí)行這個操作睹逃,當(dāng)應(yīng)用發(fā)布到商店后帜慢,應(yīng)用內(nèi)的 Facebook 集成可能不會正常運(yùn)行。
在之前的步驟中唯卖,您應(yīng)該已使用適用于您的開發(fā)環(huán)境的密鑰哈希更新 Facebook 開發(fā)者設(shè)置粱玲。
發(fā)布應(yīng)用后,應(yīng)用通常會簽上您的開發(fā)環(huán)境的不同簽名拜轨。所以抽减,請務(wù)必創(chuàng)建發(fā)布密鑰哈希,并將它添加到 Facebook 應(yīng)用編號的 Android 設(shè)置橄碾。
要生成發(fā)布密鑰哈希卵沉,請在 Mac 或 Windows 內(nèi)運(yùn)行以下命令,并替換您的發(fā)布密鑰別名和 keystore 路徑法牲。在 OS X 中運(yùn)行:

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

請務(wù)必使用您在首次創(chuàng)建發(fā)布密鑰時設(shè)置的密碼史汗。
此命令將生成包含 28 個字符的字符串。復(fù)制此發(fā)布密鑰哈希拒垃,并將其粘貼至 Facebook 應(yīng)用編號的 Android 設(shè)置停撞。


此外,還應(yīng)檢查 Facebook 應(yīng)用編號的 Android 設(shè)置是否還包括正確的包名和 Android 包的主要活動類別悼瓮。
結(jié)合使用 Facebook SDK 和 Maven
您可以聲明 Maven 與 Android 版 SDK 最新可用版本的依賴關(guān)系:

<dependency> 
<groupId>com.facebook.android</groupId> 
<artifactId>facebook-android-sdk</artifactId> 
<version>PUT_LATEST_VERSION_HERE</version>
</dependency> 

示例應(yīng)用疑難解答

如果無法正常運(yùn)行示例應(yīng)用戈毒,則可能與密鑰哈希有關(guān)。您可能會遇到以下情況:

顯示原生“登錄”對話框横堡,但在接受權(quán)限后埋市,您仍然處于退出狀態(tài)。同時命贴,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...”(..應(yīng)用的 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) { } ...

保存更改玷室,然后重新運(yùn)行示例代碼零蓉。檢查 Logcat 的消息輸出,應(yīng)與下圖相似:

12-20 10:47:37.747: D/KeyHash:(936): 
478uEnKQV+fMQT8Dy4AKvHkYibo=

開發(fā)者資料頁保存密鑰哈希穷缤。重新運(yùn)行示例敌蜂,驗(yàn)證是否可以成功登錄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末津肛,一起剝皮案震驚了整個濱河市章喉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌身坐,老刑警劉巖秸脱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異部蛇,居然都是意外死亡摊唇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門涯鲁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷查,“玉大人,你說我怎么就攤上這事抹腿〉呵耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵警绩,是天一觀的道長崇败。 經(jīng)常有香客問我,道長肩祥,這世上最難降的妖魔是什么僚匆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮搭幻,結(jié)果婚禮上咧擂,老公的妹妹穿的比我還像新娘。我一直安慰自己檀蹋,他們只是感情好松申,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布云芦。 她就那樣靜靜地躺著,像睡著了一般贸桶。 火紅的嫁衣襯著肌膚如雪舅逸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天皇筛,我揣著相機(jī)與錄音琉历,去河邊找鬼。 笑死水醋,一個胖子當(dāng)著我的面吹牛旗笔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拄踪,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蝇恶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惶桐?” 一聲冷哼從身側(cè)響起撮弧,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姚糊,沒想到半個月后贿衍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡救恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年舌厨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忿薇。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡裙椭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出署浩,到底是詐尸還是另有隱情揉燃,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布筋栋,位于F島的核電站炊汤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弊攘。R本人自食惡果不足惜抢腐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望襟交。 院中可真熱鬧迈倍,春花似錦、人聲如沸捣域。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迹鹅,卻和暖如春卦洽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斜棚。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工阀蒂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弟蚀。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蚤霞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粗梭。 傳聞我的和親對象是個殘疾皇子争便,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,524評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理级零,服務(wù)發(fā)現(xiàn)断医,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • afinalAfinal是一個android的ioc奏纪,orm框架 https://github.com/yangf...
    passiontim閱讀 15,401評論 2 45
  • 題目: C++: 注意對int **二維數(shù)組的使用, 基數(shù)排序.
    貳拾貳畫生閱讀 892評論 0 0
  • 前些日子拜訪桃花島鉴嗤,聽到浪拍礁石碧海潮生,總覺得黃藥師站在哪塊巨石上吹過簫序调。金書中的角色醉锅,人們都說楊過狂,竊以為那...
    小邪姑娘閱讀 297評論 0 2