我已將我的網站與Facebook Connect,授權/單點登錄集成在一起,效果很好。ASP.NET和Facebook連接 - 如何使用Graph API發佈到用戶的牆上?
現在我試圖發佈一些東西到用戶的牆上,即時通訊有一些問題。
首先,即時通訊使用「舊」JavaScript API(FeatureLoader.js)。
這些都是使用圖形API URL的IM:
private const string UserDetails_Url = @"https://graph.facebook.com/{0}?access_token={1}";
private const string Feed_Url = @"https://graph.facebook.com/{0}/feed?access_token={1}";
private const string TokenExchange_Url = @"https://graph.facebook.com/oauth/access_token?{0}";
我使用TokenExchange_Url
URL獲得唯一的用戶OAuth憑證,以與電話。
這是工作正常,因爲a)我收到令牌回來,和b)我可以發出HTTP獲取請求的圖形API(即UserDetails_Url
),它工作正常。
但是,我不能使用發佈到用戶的牆上。
我敢肯定,問題是我沒有得到適當的用戶權限發佈到牆上(即facebook側設置)。
現在,我意識到我可以使用fbPublish
API方法客戶端來做到這一點,但我想用Graph API做服務器端。因爲它非常直截了當(HttpWebRequest,set方法設置爲「POST」,設置內容類型/長度,將字節寫入Stream, 。等)
我認爲這個問題是我需要的用戶授予我aplpication「publish_stream」擴展權限
Facebook的圖形API doco說,要做到這一點在你的授權請求:
https://graph.facebook.com/oauth/authorize?
client_id=...&
redirect_uri=http://www.example.com/callback&
scope=user_photos,user_videos,publish_stream
因爲使用下列URL IM得到OAuth令牌其迷惑:我使用了錯誤的令牌交換的URL
https://graph.facebook.com/oauth/access_token?bunchofqsparams
是誰?爲什麼有兩個不同的URL似乎獲得相同的信息?
是的 - 我已閱讀Facebook API doco(無數次),是的,我已閱讀過其他類似的SO問題,但它們都導致使用客戶端API發佈到牆上,我想要做到這一點服務器側。
對於實際的「臉譜連接」按鈕,我使用的標準FBML:
<fb:login-button length="long" size="medium" autologoutlink="false" background="light" onlogin="facebookLogin('/login')" class=" fb_login_not_logged_in FB_login_button FB_ElementReady"><a id="RES_ID_fb_login" class="fbconnect_login_button"><img id="RES_ID_fb_login_image" src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif" alt="Connect"></a></fb:login-button>
當我點擊這個(而不是登錄到Facebook的),它會彈出,用戶可以登錄窗口。但它沒有「請求擴展權限」對話框 - 不應該嗎?或者是我需要手動觸發的另一個彈出窗口?
所以總結起來,這裏是我的問題:
- 如何授予權限擴展發佈到用戶的牆?
- 獲取OAuth令牌的正確URL是什麼?
- 是否有顯示如何使用服務器端Graph API調用發佈到用戶牆上的權威來源?