2015-11-08 17 views
8

Tôi có ứng dụng canvas trên canvas có cả trang web và trang di động được chỉ định. Trang web hoạt động tốt và cũng như khi mô phỏng trình duyệt sang thiết bị di động với bảng điều khiển mọi thứ hoạt động tốt.Facebook Canvas, Không thể đăng nhập từ facebook trên thiết bị di động

Nhưng, khi tôi cố gắng chạy ứng dụng từ ứng dụng di động facebook, ứng dụng canvas tải (đúng), nhưng không đăng nhập được.

Tôi đang sử dụng hàm FB.login.

login: function() { 
     var deferred = $q.defer(); 
     FB.login(function (response) { 
      if (!response || response.error) { 
       deferred.reject('Error occured'); 
      } else { 
       deferred.resolve(response); 
      } 
     }, { 
      scope: 'email, user_friends' 
     }); 
     return deferred.promise; 
    }, 

và trong phần cài đặt> advanced - Tôi có: Khách hàng OAuth đăng nhập, Web OAuth đăng nhập, nhúng trình duyệt OAuth đăng nhập, OAuth trị chuyển hướng URI và nhập từ thiết bị điền chính xác.

nhưng vẫn từ ứng dụng dành cho thiết bị di động facebook, ứng dụng canvas không tạo thông tin đăng nhập.

Tôi đã cố gắng làm việc này cả ngày. và tôi không thể tìm thấy giải pháp ở bất cứ đâu. Tôi cũng không thể gỡ lỗi ứng dụng facebook di động.

bất kỳ ý tưởng nào về cách tiếp cận vấn đề này?

EDIT

Cũng nhìn vào các bản ghi máy chủ Node của tôi và tôi thấy rằng FB.login thậm chí còn không được gọi.

EDIT 2

tôi đã kết thúc thay thế đăng nhập với getLoginStatus mà không gây ra vấn đề đối với tôi kể từ khi một ứng dụng facebook vải của nó ... nhưng câu hỏi vẫn là làm thế nào để làm đăng nhập.

EDIT 3 11/26/2015

cũng nên getLoginStatus không hoàn toàn giải quyết vấn đề của tôi vì nó không thực tế đăng nhập người sử dụng trong quá cho các trò chơi vải có lẽ bạn cần phải đăng nhập cho các mục nhập đầu tiên nếu bạn cần cho phép ... giải pháp của tôi là để thêm đăng nhập nếu lợi nhuận getLoginStatus not_autorized như vậy:

 /** 
    * [getLoginStatus get the FB login status] 
    * @return {[type]} [description] 
    */ 
    getLoginStatus: function() { 
     var deferred = $q.defer(); 
     FB.getLoginStatus(function (response) { 
      if (response.status === 'connected') { 
       deferred.resolve(response); 
      } else if (response.status === 'not_authorized') { 
       _fbFactory.login().then(function (fbLoginResponse) { 
        deferred.resolve(fbLoginResponse); 
       }); 
      } else { 
       deferred.reject('Error occured'); 
      } 
     }); 
     return deferred.promise; 
    }, 

Nhưng chờ đợi, có nhiều chức năng ... FB.login sẽ không hoạt động tốt trên canvas điện thoại di động trò chơi (không chắc chắn nếu nó không được kích hoạt hoặc blog của trình duyệt các cửa sổ bật lên hoặc cả hai). anyway bạn cần phải chủ động gọi cho nó thông qua nút ... để cho các trò chơi di động canvas Tôi đã có thêm một sự khởi đầu nút chơi và sau đó đăng nhập làm việc ..

EDIT 4 (Final)

cuối cùng tôi nhận thấy rằng FB.login() không được kích hoạt trừ khi một sự kiện bên ngoài kích hoạt nó, vì vậy tôi đã phải thực hiện thay đổi cho Canvas di động, nếu getLoginStatus không trả về kết nối thì tôi hiển thị nút đăng nhập thực hiện đăng nhập ... phần còn lại vẫn giữ nguyên. những gì tôi đã làm cho điện thoại di động cũng tương tự như câu trả lời chấp nhận chỉ cho phù hợp với nhu cầu của tôi ...

Tôi hy vọng điều này sẽ giúp người bên cạnh tôi ...

+0

Bạn có nhận được phản hồi từ phương pháp FB.Login không? Thử dùng Chrome Remote Debugging, https://www.youtube.com/watch?v=HEqwnpLYnI0&feature=youtu.be. –

+0

Phản ứng của 'getLoginStatus' là gì? – Rayon

+0

Tôi nhận được ID người dùng và accessToken đó là những gì tôi cần. –

Trả lời

1

Hãy chắc chắn rằng bạn đang gọi điện thoại FB.login() với một sự kiện được kích hoạt bởi người dùng, chẳng hạn như onclick trên một nút, vì các trình duyệt có thể chặn javascript có thể không an toàn/nguy hiểm được gọi trực tiếp. Đây là một lớp bảo mật bổ sung cho người dùng cuối. Có 2 cách để tạo ra một nút đăng nhập:

  1. Tạo một nút đăng nhập với Facebooks đăng nhập nút máy phát điện: https://developers.facebook.com/docs/facebook-login/web/login-button

Nút đăng nhập được tạo ra sẽ trông giống như thế này:

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> 
</fb:login-button> 
  1. Tạo html của riêng bạn và sử dụng một onclic k kiện để gọi FB.init():
    <button onclick="FB.init()">Login</button> 
    

Thuyết minh từ trang web của nhà phát triển Facebook:

Như đã đề cập trong các tài liệu tham khảo cho các chức năng này, nó kết quả trong một cửa sổ bật lên hiển thị hộp thoại Đăng nhập và do đó chỉ nên là được gọi là kết quả của việc ai đó nhấp vào nút HTML (để trình duyệt bật lên không bị chặn bởi trình duyệt).

https://developers.facebook.com/docs/facebook-login/web

Ngoài ra, FB.getLoginStatus là bước đầu tiên đúng trong đăng nhập để kiểm tra xem người dùng của bạn đang đăng nhập vào facebook và vào ứng dụng của bạn.

Có một vài bước mà bạn sẽ cần phải làm theo để tích hợp Facebook Đăng nhập vào ứng dụng web của bạn, hầu hết trong số đó được bao gồm trong ví dụ quickstart ở phía trên cùng của trang này. Ở cấp độ cao đó là:

  1. Kiểm tra trạng thái đăng nhập để xem liệu ai đó đã đăng nhập vào ứng dụng của bạn chưa. Trong bước này, bạn cũng nên kiểm tra xem ai đó trước đó đã đăng nhập vào ứng dụng của bạn chưa, nhưng hiện chưa đăng nhập.
  2. Nếu họ chưa đăng nhập, hãy gọi hộp thoại đăng nhập và yêu cầu một bộ quyền dữ liệu.
  3. Xác minh danh tính của họ.
  4. Lưu trữ mã thông báo truy cập kết quả.
  5. Thực hiện cuộc gọi API.
  6. Đăng xuất.

Tôi thấy rằng trò chơi của bạn không yêu cầu đăng nhập nữa, nhưng có thể người khác sẽ tìm thấy câu trả lời này hữu ích. :)

+0

Tôi đã giải quyết tất cả vấn đề ... câu trả lời của bạn là chính xác cho thiết bị di động FB.login() không được kích hoạt mà không có nhấp chuột, giải pháp của tôi kết hợp không có nút cho vải nền và nút cho canvas di động. sẽ cập nhật câu hỏi của tôi. sẽ chấp nhận câu trả lời này. –

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