2012-02-21 67 views
9

我想張貼圖片到Facebook頁面,id = 226338660793052,但它始終在/我/照片。我究竟做錯了什麼?圖片發佈到Facebook最終在錯誤的地方

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            imageToSend, @"source", 
            facebookMessageTextView.text, @"message", 
            nil]; 
[facebook requestWithGraphPath:@"/226338660793052/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

我沒有收到任何錯誤消息。我什麼都沒有得到,除了照片在我自己的專輯,我/照片中,而不是在226338660793052 /照片的專輯中。

但是,當我剛剛發佈消息到該頁面,我得到的頁面的時間軸上一個成功的崗位:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            @"http://www.bitsonthego.com", @"link", 
            @"my profile", @"name", 
            facebookMessageTextView.text, @"message", 
            nil]; 
[facebook requestWithGraphPath:@"/226338660793052/feed" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

缺少什麼我在這裏?我知道這一定是可能的,因爲我可以使用瀏覽器將圖片上傳到所需的頁面,作爲隨機的非管理員用戶。我似乎無法從圖形API中做到這一點。

UPDATE:

我已經解決了問題的一部分。您必須使用目標頁面的access_token。這是你如何得到它:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            @"access_token", @"fields", 
            nil]; 
    FBRequest *request = [facebook requestWithGraphPath:@"226338660793052" andParams:params andDelegate:self]; 

當你得到的結果,那麼你將它添加到交易上面:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            image, @"source", 
            [result objectForKey:@"access_token"], @"access_token", 
            facebookMessageTextView.text, @"message", 
            nil]; 

    FBRequest *request = [facebook requestWithGraphPath:[[result objectForKey:@"id"] stringByAppendingString:@"/photos"] andParams:params andHttpMethod:@"POST" andDelegate:self]; 

但是,這不會起作用,因爲Facebook.m將取代本用默認的用戶新的access_token的access_token,所以我在大約166進行了更改Facebook.m,從:

if ([self isSessionValid]) { 
     [params setValue:self.accessToken forKey:@"access_token"]; 
    } 

到:

if ([self isSessionValid]) { 
    if ([params valueForKey:@"access_token"] == nil) 
     [params setValue:self.accessToken forKey:@"access_token"]; 
    } 

保留一個您指定爲params的一部分的訪問代碼,使其免遭Facebook.accessToken的破壞。現在,這將張貼圖片到我感興趣的頁面。

但是,這是有效的,因爲我是有問題的頁面上的管理員。其他用戶將無法發佈圖片,並且圖片會重新顯示在他們自己的相冊中,因爲獲取該頁面的access_token的調用將返回nil。

根據Facebook的文檔,如果頁面是不受限制的,因爲這個頁面,那麼它應該是可以將圖片張貼到它:

注:

對於需要連接一個訪問令牌,如果頁面是公共的而不是受限制的,你可以使用任何有效的訪問令牌 。 限制頁面上的連接需要用戶訪問令牌,並且只有滿足在頁面上設置的限制條件(例如,年齡)的 用戶才能看到。

我提到我的網頁是公開的而不是限制嗎?

頁面訪問令牌

要執行以下操作的頁面,而不是當前 用戶,則必須使用頁面的訪問令牌,而不是用戶訪問令牌 常用的讀圖API對象。此訪問令牌可以是 ,通過向具有 manage_pages權限的HTTP GET發送到/ USER_ID /帳戶來檢索。這將返回用戶具有管理訪問權限的頁面列表(包括 應用程序概要文件頁面), 以及這些頁面的access_tokens。或者,您可以通過向具有manage_pages權限的/ PAGE_ID?fields = access_token發送HTTP GET (如上面描述的 ),爲單個特定頁面獲取 頁訪問令牌。除非另有說明,發佈到頁面也需要publish_stream 權限。

那麼如何將圖片發佈到公共/無限制頁面?我可以通過任何瀏覽器來完成,所以這是可能的,但是如何使用Graph API來完成?鑑於我可以在沒有access_token shenanigans的情況下發布到feed,發佈圖片的情況有什麼不同?

總之,我想要做的是使用Graph API將圖片發佈到公共/非限制頁面,而不僅僅是縮略圖URL。

+1

嘗試發佈到指定相冊使用「ALBUM_ID /照片」 – SVGreg 2012-02-21 22:51:58

+0

@mahboudz如果幫你http://stackoverflow.com/a/6712526/1083859 – 2012-02-25 11:51:19

+0

@RA一週在這個問題之後,2011年7月22日,Facebook發佈了這個問題:https://developers.facebook.com/blog/post/526/: 本週,我們發佈了將用戶相冊中現有Facebook照片到他們的牆上的新職位。爲此,請使用Post對象參數向USER_ID/feed發出HTTP POST。包含一個object_attachment參數,該參數指定您希望附加到該帖子的照片的照片ID。用戶必須是照片的所有者,並且照片不能成爲消息附件的一部分。 – mahboudz 2012-02-27 04:25:51

回答

0

嘗試發佈到PAGE /帖子而不是PAGE /照片,並向帖子添加圖片屬性。照片連接用於由頁面管理員創建的照片。有關帖子連接的完整屬性列表,請參見https://developers.facebook.com/docs/reference/api/page/#posts

+0

這不適合我。 1)圖片必須首先上傳到其他地方2)點擊圖片會將您帶到帖子中的鏈接,而不是在Facebook中向您顯示更大版本的圖片。 3)我需要圖像最終在頁面的相冊。 – mahboudz 2012-02-21 19:36:24

+0

我無法使用我個人的Facebook相冊中的圖片鏈接。 – mahboudz 2012-02-22 19:46:01

0

對不起,如果我理解你的問題wrong.You不能直接發佈到wall.there是沒有方法在facebook API來實現。檢查出這個鏈接。

https://developers.facebook.com/docs/reference/api/

和下面的截圖從該鏈接服用。 enter image description here

+0

您可以直接張貼到牆上: https://developers.facebook.com/docs/reference/api/post/ ,您可以直接發佈到網頁: https://developers.facebook.com/docs/reference/api/page/ 「照片: 創建 您可以通過向PAGE_ID /照片發佈HTTP POST請求,並使用publish_stream和manage_pages權限以及以下參數將照片發佈到頁面的牆上......」 – mahboudz 2012-02-27 04:16:48

+0

另外,您可以使用瀏覽器或面向FaceBook的移動應用程序將圖片發佈到頁面(和牆壁)。這似乎不是一個「私人」API調用,因爲它們描述了我在上面粘貼的鏈接中的過程。發佈到牆上是問題所在,儘管API調用應該是相同的。如果我這樣做,「USER_ID/photos」適用於頁面和牆,但如果某人不是管理員,則不適用。 – mahboudz 2012-02-27 04:23:30

4

我的問題也在這一刻!我相信問題在於你重寫的框架中的行,這是因爲Facebook SDK現在是靜態庫,無法編輯。不過,我已經想通了如何創建照片的帖子,而無需更改SDK - 我創造新的令牌數據與令牌字符串我從一個應用程序獲得:

FBAccessTokenData *tokenData = [FBAccessTokenData createTokenFromString:tokenString permissions:[FBSession activeSession].accessTokenData.permissions expirationDate:[FBSession activeSession].accessTokenData.expirationDate loginType:FBSessionLoginTypeFacebookApplication refreshDate:nil]; 

然後創建新FBSession FB應用標識(和nullCacheInstance,不知何故,似乎是很重要):

FBSession *sessionFb = [[FBSession alloc] initWithAppID:appID permissions:[NSArray arrayWithObjects: @"publish_stream", @"manage_pages", nil] urlSchemeSuffix:nil tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]]; 

,然後我打開與tokenData新創建的會話創建時,設置這個新的會話是活動會話,和它的作品!

[sessionFb openFromAccessTokenData:tokenData completionHandler:^(FBSession *session, FBSessionState status, NSError *error) 
{ 
}]; 

[FBSession setActiveSession:sessionFb]; 

然後呼籲PageAppID /照片與後置參數和源圖像作品的請求,並在Facebook頁面牆貼圖像作爲本身是!

[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos", PageAppID] parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
}]; 

我認爲activeSession的改變是類似於改變Facebook的行。米

希望這可以幫助別人今天

+0

謝謝..有幫助的 – 2013-12-30 07:06:02