2012-07-03 32 views
6

Tôi đã dành hàng giờ để thực hiện điều này và không thể làm việc đó. Về cơ bản tôi chỉ muốn một nút trong ứng dụng của tôi sẽ tự 'Like' trên Facebook. Tôi đã tạo ứng dụng trên dev Facebook và có Trang ứng dụng được liên kết. Trong mã của tôi, tôi yêu cầu các điều khoản:Không thể nhận được quyền publish_action trên Facebook trên iOS

_permissions = [NSArray arrayWithObjects:@"publish_stream", @"publish_actions", @"user_birthday", nil]; 

tôi có thể lấy một hình ảnh cá nhân tốt, nhưng khi tôi cố gắng 'Like' sử dụng mã này:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             _facebook.accessToken, @"access_token", 
             nil]; 
     [_facebook requestWithGraphPath:@"329756493773381/og.likes" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

tôi nhận được phản ứng lỗi này:

(facebookErrDomain error 10000.)" UserInfo=0x20090590 {error={ 
    code = 200; 
    message = "(#200) Requires extended permission: publish_actions"; 
    type = OAuthException; 
}} 

Khi đăng nhập vào ứng dụng, Facebook yêu cầu tôi cho phép xem sinh nhật của tôi và cho tôi biết nó sẽ đăng thay mặt cho tôi nhưng có vẻ như không nhận được quyền publish_actions.

Có điều gì tôi thiếu mà tôi cần phải làm không?

Tôi thấy Temple Run có nút Thích trên Facebook và cung cấp tiền thưởng để nhấn nút. Đây là những gì tôi muốn đạt được.

EDIT -------

Tôi đã thay đổi quyền của tôi để chỉ @ "publish_actions", @ "user_birthday" và bây giờ là đối thoại auth nói

"Ứng dụng này có thể gửi thay cho bạn, bao gồm cả đối tượng mà bạn thích và hơn"

mà có vẻ là sự cho phép publish_actions, tuy nhiên tôi vẫn nhận được lỗi

message = "(# 200) Yêu cầu quyền mở rộng: publish_actions";

Tôi đã thay đổi dòng này:

[_facebook requestWithGraphPath:@"329756493773381/og.likes" andParams:params andHttpMethod:@"POST" andDelegate:selrf]; 

này:

[_facebook requestWithGraphPath:@"329756493773381/og.likes" andDelegate:self]; 

và bây giờ tôi nhận được một phản ứng trở lại, mặc dù nó không viết 'như'

Đây là kết quả trả lời:

{ 
    data =  (
    ); 
    paging =  { 
     next = "https://graph.facebook.com/329756493773381/og.likes?sdk=ios&sdk_version=2&access_token=BAAGeAp3ZBGwoBAPICjlgB5zK0YECyP8yElf8hJoMrx8Qs4vjeZAK5PlXFAVbGM1JyXHE0wZBvU0aBeCzCUTZBejQgoJ44CAIQsrG64TfrHdxjMqWD&format=json&offset=25&limit=25"; 
    }; 
} 

Bất kỳ ý tưởng nào cần thử tiếp theo?

CHỈNH SỬA 2 --------------- Tôi đang tiến bộ với điều này. Tôi đã thêm người sử dụng id để yêu cầu đồ thị như thế này

NSString *graphPath = [NSString stringWithFormat:@"%@/og.likes",facebookID]; 

và sử dụng các thông số

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             @"AAAGeAp3ZBGwoBABvKjsPZAoQQNG9cDPJI2v2TI8acyyPSNtm9ZBkfydHqVZAjSKWSbLuvFwxyxSrCts7kFZCnh7Y6f5PFNlWb6smF8XF33wlRZBgfLyhT1", @"access_token", 
             @"http://samples.ogp.me/329756493773381", @"object", 
             nil]; 

và bây giờ tôi nhận được một giống như hiển thị trên dòng thời gian của tôi :-) Tôi đã sử dụng access-token được cung cấp bởi thông tin đăng nhập Facebook, nhưng có vẻ như mã được cung cấp bởi đối tượng đồ thị là khác nhau.

Bây giờ, như thế tôi thấy có mô hình này:

Darren thích đối tượng trên MyApp

Là nó thậm chí có thể có nó như

Darren thích MyAPP với liên kết tới trang ứng dụng Facebook?

Cảm ơn

+0

Loại ứng dụng được đặt thành 'Gốc/Máy tính để bàn' trong cài đặt ứng dụng FB -> nâng cao -> xác thực? – borisdiakur

+0

Vâng. Bây giờ tôi không nghĩ rằng điều này là có thể. Bạn có thể thích những thứ trong ứng dụng của mình, như một công thức trong ứng dụng công thức nhưng bạn không thể thích trang người hâm mộ, v.v. – Darren

+0

Bạn đã đúng. [Docs] (https: //developers.facebook.com/docs/opengraph/actions/builtin/likes /) nói rằng các điều kiện sau phải đúng để xuất bản một hành động giống như được tích hợp sẵn: Nội dung trong ứng dụng có trang đối tượng Open Graph được đánh dấu đúng cách bằng Mở thẻ meta biểu đồ và người xem đã cố tình nhấp vào nút "nút thích" trong ứng dụng tùy chỉnh ** được liên kết với nội dung trong ứng dụng **. Tuy nhiên bạn luôn có thể chuyển hướng đến trang Facebook của bạn. – borisdiakur

Trả lời

5

Kiểm tra xem bạn đã làm các bước dưới đây:

https://developers.facebook.com/docs/opengraph/tutorial/

"Lưu ý: Người dùng nhắc cho phép này sẽ được hiển thị trong màn hình đầu tiên của Auth Enhanced Hộp thoại và không thể bị thu hồi như một phần của luồng xác thực. " - Liên kết

Hãy thử điều này nếu bạn havent đã:

Auth Dialog -> Cấu hình như thế nào Facebook đề cập người dùng ứng dụng của bạn -> Add publish_actions quyền.

https://developers.facebook.com/docs/opengraph/authentication/

"Để kích hoạt Auth Dialog mới, đi đến Bảng điều khiển ứng dụng, và cho phép các Auth Dialog Tăng cường thiết lập trong phần nâng cao của ứng dụng của bạn." -link

Hy vọng điều này sẽ hữu ích!

+1

Tôi đã thử đặt lại trình mô phỏng. Tôi đã xóa ứng dụng khỏi cài đặt tài khoản Facebook của tôi, điều này buộc nó phải xin phép lại. Nó hỏi tôi và nói với tôi rằng nó sẽ được đăng trên danh nghĩa của tôi, nhưng tôi vẫn không nhận được quyền publish_actions! – Darren

+0

Tìm thấy ở những nơi khác trên SO: "Tôi nghĩ fb sẽ thay đổi hành vi này trong tương lai gần, nhưng hiện tại có vẻ như ứng dụng phải nằm trong hạng mục 'trò chơi' để yêu cầu sự cho phép 'publish_actions' ... (tôi đang trong chế độ hộp cát) " –

+0

Ứng dụng của tôi nằm trong danh mục Trò chơi, mặc dù tôi nghĩ rằng được nhắc đến khi publish_actions nằm trong thử nghiệm BETA. Nó có bản phát hành đầy đủ ngay bây giờ. – Darren

0

Đây dường như là cùng một vấn đề tôi đã có về vấn đề này SO câu hỏi: Facebook iOS SDK 3.0, implement like action on a url?

Nhưng nếu bạn muốn giống như bạn trang Facebook trong ứng dụng, không có cách nào để làm điều đó trong Objective C. Chỉ với nút Like javascript mà bạn có thể tạo ở đây: https://developers.facebook.com/docs/reference/plugins/like/

Cách Temple Run hiển thị nút Thích trong chế độ xem web, vì vậy nút tương tự trên máy chủ của họ, điều này có lẽ là xấu -hack nhưng sẽ làm việc cho thích một trang.

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