2012-02-21 22 views
9

Tôi đang cố gắng đăng ảnh lên trang Facebook có id = 226338660793052, nhưng nó vẫn kết thúc trong/me/photos. Tôi đang làm gì sai?Ảnh bài đăng lên Facebook kết thúc ở sai địa điểm

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

Tôi không nhận được thông báo lỗi. Tôi không nhận được gì, ngoại trừ bức ảnh kết thúc trong album của riêng tôi, tôi/ảnh và không nằm trong album của 226338660793052/ảnh.

Nhưng khi tôi chỉ gửi một thông điệp tới trang đó, tôi nhận được một bài thành công trên timeline of the page:

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]; 

tôi đang thiếu gì ở đây? Tôi biết điều này là có thể, vì tôi có thể sử dụng trình duyệt để tải ảnh lên trang mong muốn, với tư cách người dùng không phải quản trị viên ngẫu nhiên. Tôi dường như không thể làm điều đó từ API đồ thị.

UPDATE:

tôi đã giải quyết một phần của vấn đề. Bạn phải sử dụng access_token của trang đích. Đây là cách bạn có được nó:

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

Khi bạn nhận được kết quả, sau đó bạn thêm nó vào giao dịch trên:

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]; 

Nhưng, điều này sẽ không làm việc vì Facebook.m sẽ thay thế này access_token mới với access_token người dùng mặc định, vì vậy tôi làm một sự thay đổi để Facebook.m khoảng dòng 166, từ:

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

tới:

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

Điều đó giữ mã truy cập bạn chỉ định làm một phần của các thông số, từ bị ghi đè bởi Facebook.accessToken. Bây giờ điều này sẽ đăng hình ảnh lên trang mà tôi quan tâm.

Tuy nhiên, điều này hoạt động vì tôi là quản trị viên trên trang được đề cập. Những người dùng khác sẽ không thể đăng ảnh và ảnh sẽ lại xuất hiện trong album của riêng họ, bởi vì cuộc gọi để nhận access_token cho trang sẽ trở lại không.

Theo tài liệu Facebook, nếu trang đó là không hạn chế, như trang này, sau đó chúng ta có thể để gửi một bức tranh với nó:

LƯU Ý:

Đối với các kết nối đòi hỏi mã thông báo truy cập, bạn có thể sử dụng bất kỳ mã thông báo truy cập hợp lệ nào nếu trang công khai và không bị hạn chế. Các kết nối trên các trang bị hạn chế yêu cầu mã thông báo truy cập của người dùng và chỉ hiển thị cho người dùng đáp ứng các tiêu chí hạn chế (ví dụ: tuổi) được đặt trên trang.

Tôi đã đề cập rằng trang của tôi là công khai và không bị hạn chế?

Trang truy cập Tokens

Để thực hiện các hoạt động sau đây như một trang, và không phải là người sử dụng hiện tại, bạn phải sử dụng thẻ truy cập của trang, không phải là người dùng truy cập thẻ thường được sử dụng cho việc đọc Graph Đối tượng API. Mã thông báo truy cập này có thể là được truy xuất bằng cách phát hành tài khoản HTTP GET đến/USER_ID/với quyền đối với manage_pages. Thao tác này sẽ trả về danh sách Trang (bao gồm trang tiểu sử ứng dụng) mà người dùng có quyền truy cập quản trị, cùng với access_tokens cho các Trang đó. Ngoài ra, bạn có thể nhận được mã thông báo truy cập trang cho một trang cụ thể, bằng cách phát hành quyền HTTP GET tới/PAGE_ID? Fields = access_token với quyền themanage_pages, như được mô tả ở trên. Xuất bản lên Trang cũng yêu cầu quyền publish_stream , trừ khi có ghi chú khác.

Vậy làm cách nào để đăng ảnh lên trang công khai/không bị giới hạn? Tôi có thể làm điều đó từ bất kỳ trình duyệt nào, vì vậy nó có thể, nhưng làm thế nào nó được thực hiện bằng cách sử dụng Graph API? Cho rằng tôi có thể đăng lên nguồn cấp dữ liệu mà không có shenanigans access_token, những gì về việc đăng một bức ảnh là khác nhau?

Tóm lại, những gì tôi đang cố gắng làm là đăng ảnh, không chỉ một URL hình thu nhỏ, đến trang công cộng/không bị giới hạn, sử dụng API đồ thị.

+1

cố gắng để gửi vào album quy định sử dụng "ALBUM_ID/ảnh" – SVGreg

+0

@mahboudz nếu sự giúp đỡ của bạn http://stackoverflow.com/a/6712526/1083859 –

+0

@RA một tuần sau câu hỏi SO đó, vào ngày 22 tháng 7 năm 2011, điều này đã được Facebook công bố: https://developers.facebook.com/blog/post/526/: Tuần này, chúng tôi đã phát hành khả năng đính kèm ảnh Facebook hiện có từ album của người dùng bài đăng mới trên Tường của họ. Để thực hiện việc này, hãy phát hành một HTTP POST tới USER_ID/nguồn cấp dữ liệu với các tham số đối tượng Bài đăng. Bao gồm tham số object_attachment chỉ định ID ảnh của ảnh bạn muốn đính kèm vào bài đăng. Người dùng phải là chủ sở hữu của ảnh và ảnh không thể là một phần của tệp đính kèm tin nhắn. – mahboudz

Trả lời

0

Thử đăng lên PAGE/bài đăng thay vì PAGE/ảnh và thêm thuộc tính ảnh vào bài đăng. Kết nối ảnh dành cho ảnh do quản trị viên trang tạo. Xem https://developers.facebook.com/docs/reference/api/page/#posts để có danh sách đầy đủ các thuộc tính trên kết nối bài đăng.

+0

Điều này không làm điều đó cho tôi. 1) Hình ảnh phải được tải lên một nơi nào khác trước tiên 2) Nhấp vào hình ảnh sẽ đưa bạn đến liên kết trong bài đăng thay vì hiển thị cho bạn phiên bản lớn hơn của hình ảnh trong Facebook. 3) Tôi cần hình ảnh để kết thúc trong album của Trang. – mahboudz

+0

Và tôi không thể sử dụng liên kết đến hình ảnh từ album ảnh cá nhân trên Facebook của tôi. – mahboudz

0

Xin lỗi nếu tôi hiểu câu hỏi của bạn sai. Bạn không thể trực tiếp đăng lên tường.không có phương pháp nào trong API facebook để đạt được điều đó.Check liên kết này.

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

và ảnh chụp màn hình dưới đây được lấy từ liên kết đó. enter image description here

+0

Bạn có thể đăng trực tiếp lên tường: https://developers.facebook.com/docs/reference/api/post/ Và bạn có thể đăng trực tiếp lên các trang: https://developers.facebook.com/docs/reference/api/page/ "ảnh: Tạo Bạn có thể đăng ảnh lên Tường của Trang bằng cách gửi yêu cầu HTTP POST tới PAGE_ID/ảnh với quyền publish_stream và manage_pages và các thông số sau ..." – mahboudz

+0

Ngoài ra, bạn có thể đăng ảnh lên Trang (và tường) bằng cả trình duyệt hoặc ứng dụng dành cho thiết bị di động cho FaceBook. Điều này dường như không phải là cuộc gọi API "riêng tư" vì chúng mô tả quy trình trong các liên kết tôi đã dán ở trên. Đăng lên tường là vấn đề, mặc dù cuộc gọi API được cho là giống nhau. "USER_ID/ảnh" hoạt động cho cả trang và tường nếu tôi làm điều đó, nhưng không phải nếu ai đó không phải là quản trị viên thực hiện. – mahboudz

4

Vấn đề của tôi cũng tại thời điểm này! Tôi tin rằng vấn đề là với các dòng trong khuôn khổ bạn viết lại, mà đã trở thành không thể kể từ khi SDK Facebook bây giờ là thư viện tĩnh mà không thể được chỉnh sửa. Tuy nhiên, tôi đã tìm ra cách để tạo ra những bức ảnh bài viết mà không phải thay đổi SDK - tôi có thể tạo dữ liệu thẻ mới với chuỗi dấu hiệu tôi nhận được từ ứng dụng:

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

sau đó tôi có thể tạo FBSession mới với fb AppID (và nullCacheInstance, bằng cách nào đó nó có vẻ là quan trọng):

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

và sau đó tôi mở phiên mới được tạo ra với tokenData tạo lên, thiết lập phiên làm việc mới này là phiên hoạt động, và nó hoạt động!

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

[FBSession setActiveSession:sessionFb]; 

Sau đó, yêu cầu gọi cho PageAppID/ảnh với thông số Bài đăng và hình ảnh nguồn hoạt động và đăng hình ảnh lên trang Facebook như đang ở chính nó!

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

Tôi nghĩ rằng việc thay đổi activeSession là điều tương tự như thay đổi dòng trên Facebook.m

hy vọng này sẽ giúp người ngày nay

+0

Cảm ơn .. hữu ích –

Các vấn đề liên quan