Chạy ứng dụng Facebook trên localhost


92

Tôi đang dự định kết nối với trò chuyện Facebook từ máy chủ cục bộ của mình. Tôi sẽ cần lấy khóa phiên từ Facebook. Khi tôi cung cấp URL của trang web làlocalhost:8080 hoặc ip-address:8080nó không hoạt động.

Tôi đã đọc về cách thiết lập hai ứng dụng với 2 khóa API khác nhau, một ứng dụng chạy trên dev m / c và ứng dụng khác trên localhost nhưng tôi không hiểu lắm.

Có ai có thể giải thích cách chạy ứng dụng Facebook trên localhost không?


@Kavya Bạn đang cố gắng tạo một ứng dụng trò chuyện facebook trên máy tính để bàn?
Searock

vâng ... tôi muốn truy cập máy chủ facebook từ m / c của mình ... đã thấy một bài đăng liên quan đến điều tương tự ở đây stackoverflow.com/questions/1877913/… tôi sẽ hiểu được ...
nhiệt tình vào

@Kavya Nếu bạn muốn tạo một ngôn ngữ lập trình, bạn chưa đề cập đến ngôn ngữ lập trình, bạn sẽ sử dụng ngôn ngữ nào?
Searock

2
Tôi đã viết một hướng dẫn về điều đó.
ifaour

5
@xoxoxo Vui lòng sử dụng dấu câu và chính tả thích hợp trong giao tiếp của bạn.
bart

Câu trả lời:


77

Tôi đã viết một hướng dẫn về điều này một thời gian trước đây.

Điểm quan trọng nhất là "URL trang web":

URL trang web: http: // localhost / app_name /

Trong đó cấu trúc thư mục giống như sau:

app_name
¦   index.php
¦
+---canvas
¦   ¦   index.php
¦   ¦
¦   +---css
¦           main.css
¦           reset.css
¦
+---src
        facebook.php
        fb_ca_chain_bundle.crt

CHỈNH SỬA:
Kavya : làm thế nào để máy chủ FB nhận ra localhost của tôi ngay cả khi không có IP hoặc cổng ??

Tôi không nghĩ điều này có liên quan gì đến Facebook, tôi đoánsrcthông số iframe được tải từ phía máy khách nên nó sẽ coi URL cục bộ của bạn như thể bạn đặt nó trực tiếp trên trình duyệt của mình.

Ví dụ: có một tệp trên máy chủ trực tuyến của bạn với nội dung (ví dụ online.php:):

<iframe src="http://localhost/test.php" width="100%" height="100%">
    <p>Not supported!</p>
</iframe>

Và trên thư mục gốc localhost của bạn, có tệp test.php:

<?php echo "Hello from Localhost!"; ?>

Bây giờ hãy truy cập http://your_domain.com/online.phpbạn sẽ thấy nội dung tệp localhost của bạn!

Đây là lý do tại sao đăng ký theo thời gian thực và hủy cấp phép gọi lại (chỉ cần đề cập) sẽ không hoạt động với URL localhost! bởi vì Facebook sẽ ping (gửi yêu cầu http) đến các URL này nhưng rõ ràng máy chủ Facebook sẽ không dịch các URL đó sang của bạn!


Tôi dường như không thể tìm thấy 'Url trang web' bất kỳ ý tưởng nào về vị trí / hoặc tab nào của nó?
user962206,

điều này có hoạt động cho cổng 8080 không? tôi vẫn nhận được lỗi với url trang web: http://localhost:8080/auth/index.htmlvà trang web cung cấp cho các lỗi là http://localhost:8080/auth/index.htmlvà dòng channelurl là:channelUrl : '//localhost:8080/auth/channel.html',
Necromancer

Tôi không hiểu phần 'cấu trúc thư mục'. Nếu bạn chỉ đăng nhập vào trang web của mình bằng Facebook để tải các bình luận Facebook trên trang của bạn, thì bạn có cần cấu trúc canvas đó không?
AlxVallejo

Có một số công cụ tạo đường hầm cho phép bạn đặt tên công khai cho máy chủ cục bộ của mình và hiển thị nó, để Facebook có thể ping lại. Tôi đã tạo một cái tên là PageKite , cũng có những cái khác.
Bjarni Rúnar

29

nếu bạn sử dụng localhost:

trong Facebook -> Cài đặt -> Cơ bản, trong trường "Miền ứng dụng" viết "localhost", sau đó nhấp vào "+ Thêm nền tảng" chọn "Trang web",

nó sẽ tạo ra 2 trường "Mobile Site URL" và "Site URL", trong "Site URL" viết lại "localhost".

làm việc cho tôi.


cảm ơn, tôi đã thử các giải pháp khác nhưng cuối cùng này là người mà làm việc,
rahulmishra

trong lĩnh vực Site Url tôi đã: localhost , nhưng đã không làm việc tôi cũng đã thêm localhost đến lĩnh vực ứng dụng tên miền như bạn đã đề cập, công trình này nhờ mỹ
RegarBoy

23

Bạn cũng có thể chỉnh sửa tệp 'máy chủ' và tạo biến thể cục bộ cho miền của mình.

Thí dụ

Nếu địa chỉ ứng dụng facebook thực của bạn là "example.com", bạn có thể tạo miền "localhost.example.com" (chỉ có thể truy cập từ máy tính của bạn) trong tệp "hosts" trỏ đến "localhost" và chạy trang web cục bộ của bạn theo miền này. Bạn có thể lừa Facebook theo cách này.


1
hoạt động như một sự quyến rũ, cảm ơn! Host FYI- nằm trên cửa sổ 7 tại C:/Windows/System32/drivers/etc/hostshoặc trên Ubuntu tại/etc/hosts
pztrick

Phương pháp luận tuyệt vời. Cảm ơn.
Jerad

Tôi đặt Tên miền ứng dụng và URL Canvas thành gì?
Craig

Tuy nhiên, điều này sẽ không cho phép bạn chỉ định cổng, vì vậy bạn sẽ phải sử dụng proxy ngược để cho phép phát triển trên cùng một miền. Xem stackoverflow.com/questions/10729034/…
MagicLAMP

7

Trong cài đặt cơ bản của ứng dụng của bạn ( https://developers.facebook.com/apps ) trong Cài đặt-> Cơ bản-> Chọn cách ứng dụng của bạn tích hợp với Facebook ...

Sử dụng "URL trang web:" và "URL trang web di động:" để giữ URL sản xuất và phát triển của bạn. Cả hai trang web sẽ được phép xác thực. Tôi chỉ đang sử dụng Facebook để xác thực nên tôi không cần bất kỳ tính năng chuyển hướng trang web di động nào. Tôi thường thay đổi "URL trang web dành cho thiết bị di động:" thành trang web "localhost: 12345" của mình trong khi tôi đang kiểm tra xác thực và sau đó đặt nó trở lại bình thường khi tôi hoàn tất.


6

2013 tháng 8. Facebook không cho phép đặt miền có cổng cho Ứng dụng, chẳng hạn như "localhost: 3000".

Vì vậy, bạn có thể sử dụng https://pagekite.net để đàolocalhost:port đến miền thích hợp.

Các nhà phát triển Rails có thể sử dụng http://progrium.com/localtunnel/ miễn phí.

  • Facebook chỉ cho phép một miền cho Ứng dụng vào thời điểm đó. Nếu bạn đang cố gắng thêm một cái khác, làm localhost, nó sẽ hiển thị một số loại lỗi khác nhau về miền. Đảm bảo chỉ sử dụng một miền để gọi lại và cho cài đặt miền ứng dụng vào thời điểm đó.

4

Vì vậy, tôi đã nhận nó để làm việc ngày hôm nay. URL của tôi là http://localhost:8888. Tên miền tôi đã cho facebook là localhost. Tôi nghĩ rằng nó không hoạt động vì tôi đang cố gắng lấy dữ liệu bằng FB.apiphương pháp này. Tôi liên tục nhận được một tên "không xác định" và một hình ảnh không có nguồn, vì vậy chắc chắn không có quyền truy cập vào Đồ thị.

Sau đó, tôi nhận ra rằng vấn đề của tôi thực sự là tôi chỉ chuyển một đối số đầu tiên /mecho FB.api, và tôi không có mã thông báo. Vì vậy, bạn sẽ cần sử dụng FB.getLoginStatushàm để lấy mã thông báo, mã này sẽ được thêm vào /međối số.


2

chỉ cần chỉ định url canvas của bạn là http: // localhost / app_path .


@ifaour i follwoed ur tutorial .. it givin me error Mã lỗi API: 191 Mô tả lỗi API: URL được chỉ định không thuộc sở hữu của ứng dụng Thông báo lỗi: redirect_uri không thuộc sở hữu của ứng dụng. Tôi không cần nó để chạy bên trong fb ...
nhiệt tình

@Kavya chỉ cần thêm url canvas làm localhost / app_path và mở ứng dụng fb, vì vậy ứng dụng này sẽ chạy ứng dụng của bạn từ localhost. Xin lỗi vì đã muộn, vì rất bận.
JustCoding

Một cách khác để làm điều này là ánh xạ địa chỉ URL trang web / canvas của bạn, thay vì chỉ định localhost. Sau đó, bạn có thể sử dụng miền mục tiêu của mình. Tôi không chắc bạn đang phát triển trên kiến ​​trúc nào nhưng dưới windows, bạn sẽ đạt được điều này bằng cách thiết lập cục bộ trang web IIS của mình với các ràng buộc chính xác và sau đó thêm bí danh vào tệp máy chủ của bạn trong C: \ Windows \ System32 \ drivers \ etc ví dụ: thêm dòng 127.0.0.1 yourproject.yourdomain.net
dreadledad

2

Được rồi, tôi không chắc có chuyện gì với những câu trả lời này nhưng tôi sẽ cho bạn biết điều gì phù hợp với tôi theo lời khuyên của một nhà phát triển cấp cao tại nơi làm việc của tôi. Tôi đang làm việc trong Ruby on Rails và sử dụng mã JavaScript của Facebook để nhận mã thông báo truy cập.

Vấn đề: Để thực hiện xác thực, Facebook đang lấy url từ thanh địa chỉ của bạn và so sánh url đó với những gì họ có trong hồ sơ. Họ không cho phép bạn sử dụnglocalhost:3000 vì bất kỳ lý do gì. Tuy nhiên, bạn có thể sử dụng một tên miền hoàn chỉnh như yoursite.devbằng cách chạy một máy chủ cục bộ và trỏ yoursite.devđến 127.0.0.1:3000hoặc bất cứ nơi nào mà máy chủ cục bộ của bạn đã trỏ đến.

Bước 1 : Cài đặt hoặc cập nhật Nginx

$ brew install nginx (cài đặt) hoặc $ brew upgrade nginx (cập nhật)

Bước 2 : Mở tệp cấu hình nginx của bạn

/usr/local/etc/nginx/nginx.conf (thường ở đây)

/opt/boxen/config/nginx/nginx.conf(nếu bạn sử dụng Boxen)

Bước 3 Thêm đoạn mã này vàohttp {} khối

Thay thế proxy_passbằng bất cứ nơi nào bạn muốn trỏ yoursite.devđến. Trong trường hợp của tôi, nó thay thế localhost: 3000 hoặc tương đương127.0.0.1:3000

server {
  listen       yoursite.dev:80;
  server_name  yoursite.dev;
  location / {
    proxy_pass http://127.0.0.1:3000;
  }
}

Bước 4 : Chỉnh sửa tệp máy chủ của bạn, /etc/hoststrên máy Mac để bao gồm

127.0.0.1   yoursite.dev

Tệp này hướng các miền đến localhost. Nginx lắng nghe trên localhost và chuyển hướng nếu nó khớp với một quy tắc.

Bước 5 : Mỗi khi bạn sử dụng môi trường nhà phát triển của mình trở đi, bạn sử dụng yoursite.devtrong thanh địa chỉ thay vì localhost:3000để Facebook đăng nhập bạn một cách chính xác.


1

Forward là một công cụ tuyệt vời để giúp phát triển các ứng dụng facebook cục bộ, nó hỗ trợ SSL nên điều chắc chắn không phải là vấn đề.

https://okenhq.com/in-use/facebook

KHUYẾN CÁO: Tôi là một trong những nhà phát triển


1
PageKite là một trong những đối thủ của Forward (Tôi đã thành công!). ;-)
Bjarni Rúnar

Sau khi thử mọi cách khác dưới ánh nắng mặt trời, điều này đã hiệu quả với tôi. Vấn đề duy nhất là tất cả chuyển tiếp thực sự chậm. Tốt hơn là không nhận được cuộc gọi lại của FB! Cảm ơn
Craig

0

Bạn cần thiết lập ứng dụng của mình để chạy trên https cho localhost

Bạn có thể làm theo các bước được cung cấp trong này để thiết lập HTTPS trên ubuntu

https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-12-04

Bạn cần thực hiện các bước sau:

cài đặt apache (nếu bạn chưa có)

sudo apt-get install apache2

Bước một — Kích hoạt mô-đun SSL

sudo a2enmod ssl
sudo service apache2 restart

Bước hai — Tạo một thư mục mới

sudo mkdir /etc/apache2/ssl

Bước ba — Tạo chứng chỉ SSL tự ký

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Với lệnh này, chúng ta sẽ vừa tạo chứng chỉ SSL tự ký và khóa máy chủ bảo vệ nó, vừa đặt cả hai vào thư mục mới. Dòng quan trọng nhất là "Tên chung". Nhập tên miền chính thức của bạn tại đây hoặc nếu bạn chưa có, hãy nhập địa chỉ IP trang web của bạn.

Tên chung (ví dụ: máy chủ FQDN hoặc tên BẠN) []: example.com hoặc localhost

Bước bốn — Thiết lập chứng chỉ

sudo vim /etc/apache2/sites-available/default-ssl

Tìm các dòng sau và chỉnh sửa các dòng đó với cài đặt của bạn

ServerName localhost hoặc example.com

SSLEngine trên SSLCertificateFile /etc/apache2/ssl/apache.crt

SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Bước năm — Kích hoạt máy chủ ảo mới

sudo a2ensite default-ssl
sudo service apache2 reload

0

Một thủ thuật:

Sử dụng MAMPPRO và tạo: tên máy chủ: địa chỉ CHÍNH XÁC của trang web của bạn (ví dụ: helloworld.com) cho trang web của bạn trên đĩa của bạn

Trên Facebook: Vì vậy, bạn cũng có thể giữ URL trang web ban đầu của mình (ví dụ: helloworld.com)

Bây giờ bạn hiểu rằng khi bạn nhập trang web của mình trên thanh địa chỉ, bạn đang ở địa phương ! ..và khi bạn muốn trực tuyến, chỉ cần ngừng hoạt động máy chủ trên MAMP PRO ..

:)


0

Không có câu trả lời nào ở trên phù hợp với tôi. Tôi đang chạy trên FB API 2.5. Của tôi là sự kết hợp của các vấn đề dẫn đến thành công khi đã được giải quyết

  1. Tạo một ứng dụng thử nghiệm để đảm bảo rằng nó được duy trì và quản lý như vậy và có thể bị tắt khi phát trực tiếp
  2. Đọc thông báo lỗi đúng cách :) - Tôi đã phải bật "Đăng nhập OAuth trên web" VỚI "Đăng nhập OAuth của ứng dụng khách"
  3. Sử dụng https://www.whatismyip.com/ để tìm hiểu IP hiện tại của tôi là gì
  4. Tạo bản ghi trên Miền của tôi, tức là http://localhost.mydomain.com trỏ đến IP hiện tại của tôi

Nó có lẽ không lý tưởng bằng sự thay đổi của Dynamic IP và người ta có thể sử dụng DynDNS hoặc một cái gì đó tương tự để làm cho IP "tĩnh" hơn nhưng nó đã hoạt động đối với tôi


0

Trong trường hợp của tôi, sự cố được phát hiện là do chrome chặn yêu cầu CORS từ localhost: 4200 đến trang web api facebook. Chạy Chrome với cài đặt này: "YOUR_PATH_TO_CHROME \ Google \ Chrome \ Application \ chrome.exe" --disable-web-security --user-data-dir = "c: / chrome hoạt động như một sự quyến rũ trong khi phát triển. Ngay cả khi không có localhost đã thêm vào cài đặt của ứng dụng facebook.


hoạt động tốt cho sự phát triển địa phương, nhưng trong quá trình sản xuất, bạn cần sự cho phép của facebook (có được bằng lệnh gọi tùy chọn của trình duyệt) để chia sẻ dữ liệu từ facebook
radio_head
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.