最近接入Facebook 分享,按照官方文檔一步步接入,也可以分享成功,但是遇到一個奇怪的問題。本地有安裝Facebook app的情況下打開facebook原生對話框進(jìn)行分享,點擊左上角返回鍵結(jié)果發(fā)現(xiàn)回調(diào)了onSuccess,而不是onCancle,十分不解,查了很多資料發(fā)現(xiàn)了很多坑。
坑1:返回鍵回調(diào)onCancle沒有回調(diào)onSuccess是設(shè)計如此
相關(guān)連接:https://developers.facebook.com/support/faq/
https://developers.facebook.com/support/bugs/890116221030179/?disable_redirect=0
為什么總是收到 onSuccess() 回調(diào),即使用戶已經(jīng)取消了對話框?
如果用戶打開移動分享對話框或移動動態(tài)發(fā)布對話框,但通過取消來關(guān)閉這些對話框,您的應(yīng)用就會通過 onSuccess() 回調(diào)方法獲得通知。 您可以將 onSuccess() 回調(diào)看作是一種機(jī)制,用于表示對話框以某種方式成功關(guān)閉,但您無法使用這種機(jī)制確定某內(nèi)容實際是否發(fā)布。 如果用戶還向您的應(yīng)用授予“publish_actions”權(quán)限范圍,系統(tǒng)就會在取消時調(diào)用 onCancel() 回調(diào)方法。
如需查看 FacebookCallback 類的完整詳情,請參閱參考文檔。
這是官方對這個問題的回答,好吧可能就是這樣設(shè)計的,于是乎我就開始找“publish_actions”權(quán)限要如何配置云云,然后發(fā)現(xiàn)第二個坑
坑2:“publish_actions”權(quán)限已不再使用
相關(guān)連接:https://developers.facebook.com/docs/facebook-login/android/permissions?locale=zh_TW
https://developers.facebook.com/docs/graph-api/changelog/breaking-changes#login-4-24
取得發(fā)佈權(quán)限
您可在登入期間要求任意數(shù)量的讀取權(quán)限和發(fā)佈權(quán)限。但如果要求超過四項權(quán)限的話,完成登入的次數(shù)會大幅降低。
截至 2018 年 4 月 24 日,pubish_actions?權(quán)限已移除。如需詳細(xì)資訊,請參閱變更紀(jì)錄的重大變更。若要為應(yīng)用程式用戶提供方法,將內(nèi)容分享到 Facebook,我們鼓勵您改用分享產(chǎn)品功能。
如果在登入期間要求使用?publish_actions?來發(fā)佈權(quán)限,會在登入 UI 中產(chǎn)生第二個步驟。因此,您應(yīng)該在登入期間要求最低數(shù)量的讀取權(quán)限,然後在用戶確實需要時才要求其他任何權(quán)限或發(fā)佈權(quán)限。如需最佳化權(quán)限要求,請參閱最佳化權(quán)限。
這是官方的說法,“pubish_actions?權(quán)限已移除”,重大變更中也說到2018年“pubish_actions?權(quán)限就沒有了,我的天哪onCancel()怎么回調(diào)的?
坑3:onSuccess回調(diào)Sharer.Result?postId =null?
查了資料了解到postId 要在配置了publish_actions 并且用戶登錄的情況下(似乎是使用Feed模式)才會返回,具體在哪里看到的由于查的資料太多沒有保存下來。
解決?(待議)
最后的解決方案讓我哭笑不得,先說一下我嘗試的兩點
1.查看了gradle的配置,發(fā)現(xiàn)android的簽名配置在release版本上,而我開發(fā)一直使用的是debug,申請facebook的appkey是需要簽名的,因此簽名的正誤是會影響到分享的成功和失敗的,這太奇怪了如果是這個問題應(yīng)該在debug上打出來的包是無法分享成功的,然后我測試時是可以分享的,有疑惑不解,最后我還是切換到了release版本進(jìn)行測試,然后還是出現(xiàn)一樣的問題,于是覺得可能不是簽名的問題。
2.手上的項目中對facebook除了分享還有facebook登錄,但由于業(yè)務(wù)上的原因允許用戶在沒有登錄的情況下(包括沒有使用facebook登錄)進(jìn)行分享,我查看了資料后發(fā)現(xiàn)分享返回的postId 和是否有facebook登錄認(rèn)證有關(guān)系,因此嘗試了一下先在應(yīng)用中第三方登錄facebook,然后再分享,在對話框中點擊返回鍵竟然回調(diào)了onCancle!??!我的天,難道一定要先第三方登錄再分享才能正常使用?思前想后覺得不可能,官方和其他途徑的文檔都沒有說明這一點,應(yīng)該不會是這樣。
嘗試:
遇到上面這樣的怪事然后很意外,于是我開始測試。第一刪除App重新安裝,在release版本情況下看能否正?;卣{(diào)onCancle,結(jié)果竟然可以?。?!難道是我腦子抽風(fēng)選錯了沒有使用release版本?
于是我把版本調(diào)回到debug,再次打包,結(jié)果竟然還是可以??我就蒙了,不是debug和release簽名的問題,也不是先第三方登錄再分享導(dǎo)致那是什么原因呢??我找來另一臺之前沒有安裝過facebook的手機(jī) 使用的是之前的包(debug版本),這個包是前幾天打包而成和今天測試的沒有任何瓜葛。結(jié)果還是正常回調(diào)onCancle,(黑人問號臉),這到底是怎么回事??
猜測:
1.和簽名配置有關(guān),一定要使用申請facebook appkey時的簽名
2.和緩存有關(guān),可能在facebook SDK或者系統(tǒng)中有一些配置緩存造成,在使用第三方先登錄的情況下再分享可能清理了過往該賬號的緩存??
可能的解決方案
可以在分享前判斷是否用戶是否已經(jīng)facebook第三方登錄,如果沒有可以先登錄但是不要求結(jié)果成功,之后再調(diào)用分享
點擊返回按鈕回調(diào)onSuccess問題不在出現(xiàn)我也沒辦法繼續(xù)跟蹤問題,暫且將問題留下,待有緣人解答