2010-11-18 15 views
5

Tôi đã sử dụng api còn lại cũ để hiển thị Hộp thoại cho phép trong Facebook trước đây. Bây giờ, với API biểu đồ mới, tôi có thể làm gì? (Tôi đang sử dụng Ứng dụng IFrame).Làm thế nào để hiển thị hộp thoại mở rộng quyền trong FB bằng cách sử dụng API đồ thị mới?

Tôi biết rằng tôi có thể lừa gạt và bật lên sự cho phép trong một cửa sổ riêng biệt:

FB.login(function(response) { 
        if (response.session) { 
        if (response.perms) { 
         // user is logged in and granted some permissions. 
         // perms is a comma separated list of granted permissions 
        } else { 
         // user is logged in, but did not grant any permissions 
        } 
        } else { 
        // user is not logged in 
        } 
       }, {perms:'offline_access'}); 

như thế .. gọi FB.login một lần nữa (chúng ta hãy nói rằng tôi muốn mọi người click vào một nút khác nhau và kích hoạt hộp thoại tán thành mở rộng)

Tuy nhiên, trông có vẻ xấu xí và trông không giống hộp thoại.

Có cách nào để tạo hộp thoại không? Tôi cố gắng tìm hiểu xem FB.ui có thể giúp đỡ hay không nhưng chỉ có rất ít thông tin về điều đó.

Ngoài ra, tôi không cho rằng cuộc gọi lại 'trả lời' đã từng thực thi. Tôi không nhấp vào "Không cho phép" hoặc "cho phép", sẽ không kích hoạt bất kỳ cuộc gọi nào trở lại. bất kỳ ý tưởng?

hihih..anyone có thể giúp tôi không?

Trả lời

21

Cuối cùng. tìm ra giải pháp từ một trang web khác. trước tiên. sau FB.init (...); làm điều đó:

FB.provide("UIServer.Methods", 
    { 'permissions.request' : { size : {width: 575, height: 300}, 
    url: 'connect/uiserver.php', 
    transform : FB.UIServer.genericTransform } 
    }); 

Sau đó, bất cứ khi nào bạn cần phải gọi hộp thoại permssion, làm điều đó:

FB.ui({method: "permissions.request", "perms": 'email,offline_access'}, 
    callBack); 

Tôi đã mất quá lâu để tìm ra bằng cách nhìn vào đối tượng FB và tìm hiểu có UIServer với permission.request sau đó từ đó, tôi tiếp tục tìm kiếm và tìm thấy giải pháp này. và FB.ui không nói gì về nó .. và FB.provide không được ghi chép. THANKS facebook.

+1

Cảm ơn một tấn !!! Facebook rất cần tài liệu hướng dẫn tốt hơn về API mới của họ. – Nixarn

+0

Theo văn bản này, FB.provide() + FB.ui() như mô tả ở trên không có gì - điều này không đáng ngạc nhiên vì điều này tận dụng các tính năng không có giấy tờ. – ObscureRobot

+0

Nhiều tính năng của Facebook không có giấy tờ. Cảm ơn Chúa vì SO. – Frans

3

Bạn không cần phải sử dụng javascript hoặc bất kỳ SDK nào cho điều này mặc dù nó sẽ giúp bạn dễ dàng hơn. Bạn chỉ cần chuyển hướng người dùng đến một url như thế này:

https://graph.facebook.com/oauth/authorize? 
    client_id=...& 
    redirect_uri=http://www.example.com/callback& 
    scope=user_photos,user_videos,publish_stream 

Bạn nên luôn chuyển hướng người dùng đến cửa sổ trên cùng bằng javascript hoặc liên kết.

window.top.location = <login_url> or <a href=<login_url> target="_top">Login</a> 

Nếu bạn đang sử dụng SDK PHP hoặc SDK C#, bạn có thể tạo sdk tạo url cho bạn, nhưng quá trình này giống nhau.

Ngoài ra, không phải chuyển hướng_uri phải nằm trên cùng miền với url của ứng dụng iFrame của bạn. Điều này sẽ khiến Facebook chuyển hướng người dùng của bạn bên ngoài Facebook đến trang web của bạn, sau đó bạn nên chuyển hướng người dùng quay lại ứng dụng bên trong facebook. Ví dụ:

  1. Người dùng nhấp chuột đăng nhập
  2. dùng đi đến trang đăng nhập Facebook
  3. Người dùng nhấp chuột cho phép
  4. Facebook chuyển hướng người dùng đến http://www.example.com/callback
  5. Ứng dụng của bạn chuyển hướng người dùng đến http://apps.facebook.com/myapp/loggedin
+0

Tôi biết về liên kết và php. nhưng yêu cầu của tôi là sử dụng JS và làm cho nó trông giống như hộp thoại FBML. Cảm ơn bạn đã trả lời tho. :) – murvinlai

+1

cũng chuyển hướng không hoạt động khi sử dụng ứng dụng Facebook Canvas. –

1

Một trong những câu trả lời cho thấy một hack mà bạn gọi FB.provide() và sau đó FB.ui() để bật lên hộp thoại quyền mở rộng. Giải pháp đó không hiệu quả đối với tôi, nhưng bây giờ có một giải pháp được ghi lại. Just call FB.login() để nhận các quyền bạn cần.

FB.login(function(response){ 
    if (response.authResponse) { 
     alert('success!'); 
    } else { 
     alert('fail!'); 
    } 
    },{scope: 'email'}); 

Thậm chí tốt hơn, bạn có thể ask for extended permissions with the login button.

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