2011-01-14 44 views
75

Tôi đang cố gắng tích hợp dự án của mình với Facebook. Tôi đang thực hiện các bước em bé lúc đầu và chỉ cố gắng để đăng nhập, có được một phiên Facebook, và nhận được một số dữ liệu người dùng. Tôi đang phát triển địa phương để cài đặt ứng dụng Facebook của tôi là:Lỗi API Facebook 191

site URL: http://127.0.0.1:8888/mySite/ 

URL canvas giống như trên. Tôi chưa chỉ định miền trang web.

Tuy nhiên, khi tôi bấm vào nút đăng nhập, tôi nhận được một lỗi:

API Error Code: 191 
API Error Description: The specified URL is not owned by the application 
Error Message: redirect_uri is not owned by the application. 

Tại thời điểm này tôi đã không viết bất kỳ mã server-side để đối phó với chuyển hướng, vv Tất cả tôi đã thực hiện là thêm SDK JavaScript dựa trên hướng dẫn trong Facebook for Websites.

Tôi đã làm gì sai? Nó rõ ràng là một cái gì đó để làm với cài đặt ứng dụng Facebook của tôi, nhưng tôi không thể nhìn thấy những gì!

+0

Đối với người đọc: hãy lưu ý rằng câu hỏi này và câu trả lời được chấp nhận áp dụng cho cả máy chủ cục bộ và phát triển/thử nghiệm cũng như máy chủ và url thực! – Stefano

Trả lời

87

UPDATE:
Để trả lời Bộ luật Lỗi API: 191
Các redirect_uri nên bằng nhau (hoặc người thân) vào URL trang web.
enter image description here

Mẹo: URL Sử dụng cơ sở thay vì URL đầy đủ trỏ đến các trang cụ thể.

KHÔNG NÊN: Ví dụ, nếu bạn sử dụng www.mydomain.com/fb/test.html như URL trang web của bạn và có www.mydomain.com/fb/secondPage.html như redirect_uri này sẽ cung cấp cho bạn những lỗi 191.

RECOMMENDED: Vì vậy, thay vào đó, URL trang web của bạn được đặt thành URL cơ sở như: www.mydomain.com/ HOẶC www.mydomain.com/fb/.


tôi đã đi qua Facebook Python sample application ngày hôm nay, và tôi đã sốc nó đã được nêu rõ rằng bạn có thể sử dụng http://localhost:8080/ như Site URL nếu bạn đang phát triển tại địa phương:

Configure the Site URL, and point it to your Web Server. If you're developing locally, you can use http://localhost:8080/

Trong khi tôi chắc chắn bạn không thể làm điều đó, dựa trên kinh nghiệm của riêng tôi (thử nghiệm rất cũ) có vẻ như bạn thực sự CAN kiểm tra ứng dụng Facebook của bạn tại địa phương!

Vì vậy, tôi nhặt một ứng dụng cũ của tôi và chỉnh sửa tên của nó, trang web URL và URL Canvas: URL Site: http://localhost:80/fblocal/

Tôi đã tải về mới nhất của Facebook PHP-SDK và ném nó trong thư mục xampp/htdocs/fblocal/ tôi.

Nhưng tôi gặp lỗi giống với lỗi của bạn!Tôi nhận thấy rằng XAMPP đang làm một chuyển hướng tự động để http://localhost/fblocal/ vì vậy tôi thay đổi cài đặt chỉ đơn giản là http://localhost/fblocal/ và lỗi đã biến mất NHƯNG tôi phải loại bỏ các ứng dụng (từ privacy settings) và cài đặt lại ứng dụng của tôi và đây là kết quả:
alt text

Sau đó, yêu cầu các publish_stream phép, và tôi đã có thể xuất bản vào hồ sơ của tôi (bằng cách sử dụng PHP-SDK):

$user = $facebook->getUser(); 
if ($user) { 
    try { 
     $post = $facebook->api('/me/feed', 'post', array('message'=>'Hello World, from localhost!')); 
    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
} 

Kết quả: alt text

+1

Um, vì vậy bây giờ tôi đang bối rối. Điều gì về câu trả lời này: http://stackoverflow.com/questions/4633846/facebook-app-development – musoNic80

+1

Tôi * GUESS * ý của anh ấy là bạn có thể thử nghiệm ứng dụng của mình tại địa phương, nhưng bất kỳ tương tác nào với facebook sẽ yêu cầu xuất bản trang web của bạn/miền. ví dụ nếu bạn có một trò chơi flash, bạn có thể thử nghiệm nó cục bộ trước khi thông qua nó trên vải FB. Đối với mã sau đó, anh ta giải thích cách bạn có thể bảo vệ trang web ** live ** của bạn khỏi bị truy cập cho đến khi quá trình phát triển kết thúc và bạn đã sẵn sàng phát trực tiếp. – ifaour

+2

Cho đến nay rất tốt! Tôi đã có như xa như hộp thoại đăng nhập và yêu cầu quyền truy cập! Tôi chưa có cơ hội thử nghiệm lấy một số dữ liệu thực tế, nhưng mong chờ câu trả lời được chấp nhận khi tôi làm! Woohoo! – musoNic80

8

Điều này chỉ vì lỗi URL.

Bất kể URL trang web nào được chỉ định phải chính xác.

Tôi đã đề cập URL trang web là http://localhost:3000/ và tên miền là máy chủ cục bộ, nhưng trong trình duyệt của tôi, tôi đang chạy http://0.0.0.0:3000/.

Khi tôi chạy máy chủ dưới dạng localhost:3000, nó đã giải quyết được sự cố. Như tôi đã đề cập, URL của trang web là localhost Facebook sẽ chuyển hướng đến cùng, nếu chúng tôi đang chạy 0.0.0.0:3000, nó sẽ tăng lỗi rằng "URL đã cho phép không được cấu hình Ứng dụng cho phép".

2

Tôi cũng gặp phải sự cố tương tự khi tôi đang sử dụng phương thức xác thực facebook. Nhưng tôi đã khắc phục vấn đề đó với những thay đổi sau trong Facebook api (Apps >> My App >> Basic).

  1. tôi loại bỏ các url mà tôi đã đưa ra trong ===>App trên Facebook (Canvas URL)
  2. Tôi đưa url trang web chỉ trong ===>Website với Facebook Đăng nhập tùy chọn

Sau đó, tôi đã cung cấp cho AppId và App Secret trong trang web của mình.

Vì vậy, bằng cách nhấp vào nút đăng nhập, Nó yêu cầu quyền truy cập sau đó nó chuyển hướng nó để cung cấp cho url (Trang web với Facebook Đăng nhập).

0

Đã cùng một vấn đề:

$params = array('redirect_uri' => 'facebook.com/pages/foobar-dev'); 
$facebook->getLoginUrl($params); 

Khi tôi thay đổi redirect_uri từ trang devloper vào trang trực tiếp, 191 Lỗi đã đưa ra.

Vì vậy, tôi xóa $ params:

$facebook->getLoginUrl(); 

Sau khi ứng dụng yêu cầu tại FB chuyển hướng đến url ứng dụng riêng của mình fe: my.domain.com

Những gì tôi làm bây giờ là kiểm tra chỉ số .php của ứng dụng của tôi nếu tôi đang ở trong khung nội tuyến FB hay không. Nếu không, tôi chuyển hướng đến trang FB trực tiếp f.e.:

$app = 'facebook.com/pages/foobar-live'; 
$rd = (isset($_SERVER['HTTP_REFERER'])) ? parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) : false; 
if ($rd == 'apps.facebook.com' || (!isset($_REQUEST['signed_request']))) { 
    echo '<script>window.parent.location = "'.$app.'";</script>'; 
    die(); 
} 
0

Tôi cũng nhận thấy rằng ngay cả khi bạn chỉ định trang web của mình dưới sự bảo mật - Trang web có đăng nhập Facebook -> URL trang web như ví dụ: http://example.com, nhưng nếu phần Miền ứng dụng của bạn trống và bạn mở trang web dưới dạng www.example.com, bạn cũng sẽ gặp lỗi này. Để tránh nó trong phần "Miền ứng dụng" viết example.com, điều này sẽ cho phép các tên miền phụ, như www.example.com, something.example.com, v.v.2

11

Đối với tôi, đó là miền ứng dụng bị thiếu. Đi vào ứng dụng và đảm bảo rằng bạn có gốc của trang web được thiết lập làm miền ứng dụng. Xem ảnh chụp màn hình.

app domains is in the basic settings of your app

+0

Câu trả lời này không liên quan đến câu hỏi vì áp phích gốc đang phát triển cục bộ và trường App Domains không cho phép localhost hoặc 127.0.0.1: http://flic.kr/p/kHqiny – Vince

+4

Câu hỏi của người hỏi đã được giải quyết. Câu trả lời này nhằm mục đích hữu ích cho những người có vấn đề tương tự, người nghĩ rằng câu hỏi này sẽ giúp họ dựa trên tiêu đề đậm lớn. Bây giờ nó có thể. –

0

trong facebook App Page, goto tab cơ bản. tìm tùy chọn "Trang web bằng Facebook Đăng nhập".

bạn sẽ tìm thấy URL của trang web: đầu vào có đặt URL đầy đủ (ví dụ: http://Mywebsite.com/MyLogin.aspx). đây là URL mà bạn có thể sử dụng với các cuộc gọi như Nếu ID APP là 123456789

https://graph.facebook.com/oauth/authorize?client_id=123456789&redirect_uri=http://Mywebsite/MyLogin.aspx&scope=publish_actions

0

Cái gì tôi muốn thêm, vì đây là lỗi 191 câu hỏi đầu tiên trên google:

Khi chuyển hướng Facebook thay vì trang web của riêng bạn cho một yêu cầu đã ký, bạn có thể gặp phải lỗi này nếu người dùng có duyệt web an toàn và ứng dụng của bạn chuyển hướng đến facebook mà không cần SSL.

0

Làm việc tại địa phương ... Tôi không thể nhận được api nguồn cấp dữ liệu để làm việc, nhưng api chia sẻ làm việc khá nhiều ngay lập tức mà không có vấn đề gì.