2015-01-22 12 views
5

Tôi hiện đang làm việc trên một ứng dụng dành cho thiết bị di động và vì vậy tôi cần phải có một ứng dụng mới dành riêng cho mục đích này. Điều ngu ngốc có vẻ như là, Facebook đã quyết định sử dụng "id người dùng" khác nhau cho từng ứng dụng. Ngoài việc không nhìn thấy điểm trong cái này, tôi thấy bối rối về cách tôi có thể trích xuất cùng một userId cho một người dùng nhất định, để khớp nó với DB của tôi. Tôi đang sử dụng oauth.io để xử lý đăng nhập, và trả lại giá trị:API Facebook - ID người dùng khác nhau cho mỗi ứng dụng?

$('#facebook-login').click(function() { 
    $('#ajax_spinner_wrapper').show(); 
    OAuth.initialize('CmRGYdnRMWM2ZrOb7M1Nf1_T57o'); 
    OAuth.popup('facebook').done(function(result) { 
     //console.log(result) 
     result.get('/me').done(function(data) { 
      //todo with data 
      console.log(data); 

      $.post('https://steampunkjunkies.net/cgi-bin/mobi_login.cgi', { action: 'store_session', what: 'facebook', user: data.id }, function(result) { 
       $('#ajax_spinner_wrapper').hide(); 
      }); 
     }).fail(function(err) { 
      //todo with err 
      console.log("Hit an error?"); 
     }); 


    }) 
    .fail(function (err) { 
     alert("oops, we got an error!"); 
     console.log(err); 
     $('#ajax_spinner_wrapper').hide(); 
    }); 

    return false; 
}); 

Vấn đề tuy nhiên, là nó mang lại cho tôi hoàn toàn khác nhau của Id trong mỗi ứng dụng. Dưới đây là những gì tôi nhận được với trang web dựa trên một của tôi:

'id' => '838605583', 

..và sau đó sử dụng các ứng dụng khác trong oauth.io tôi (https://oauth.io) thiết lập:

id "10155167132970584" 

Cả hai cho chính xác cùng một người dùng .

Có cách nào để tương quan các Id này, vì vậy tôi có thể kết hợp chúng với nhau không? Thật đáng ngạc nhiên khi Facebook không nghĩ rằng một cái gì đó như thế này sẽ là một vấn đề!

LƯU Ý: Một chút thông tin từ Facebook, liên quan đến sự thay đổi này:

https://developers.facebook.com/docs/apps/upgrading#upgrading_v2_0_user_ids

Facebook sẽ bắt đầu phát hành ID người dùng ứng dụng chỉnh phạm vi khi người đầu tiên đăng nhập vào một thể hiện của ứng dụng của bạn được mã hóa với v2.0 của API. Với ID có phạm vi ứng dụng, ID cho cùng một người dùng sẽ khác nhau giữa các ứng dụng.

Cho dù họ sử dụng phiên bản nào ban đầu để đăng ký ứng dụng của bạn, ID sẽ vẫn giữ nguyên cho những người đã đăng nhập vào ứng dụng của bạn. Thay đổi này tương thích ngược với bất kỳ ai đã đăng nhập vào ứng dụng của bạn tại bất kỳ thời điểm nào trong quá khứ.

Nếu bạn không ánh xạ ID trên các ứng dụng thì không cần thay đổi mã. Nếu bạn cần ánh xạ cùng một ID người dùng trên nhiều ứng dụng hoặc chạy quảng cáo chéo ứng dụng, chúng tôi đã thêm API mới có tên API bản đồ doanh nghiệp. Điều này cho phép bạn ánh xạ ID người dùng đã đăng nhập trên các ứng dụng miễn là các ứng dụng đó đều thuộc sở hữu của cùng một doanh nghiệp. Tìm hiểu thêm về triển khai quảng cáo chéo.

Đối với người dùng chưa đăng nhập vào ứng dụng của bạn, ID người dùng có thể thay đổi tùy thuộc vào phiên bản API bạn gọi. Trong v1.0 người dùng API chưa đăng nhập vào ứng dụng của bạn sẽ được tham chiếu bằng ID người dùng Facebook ban đầu của họ, trong khi trong v2.0, họ sẽ được giới thiệu bởi ID ứng dụng.

Chúng tôi đã thêm điểm cuối API mới cho phép bạn gắn thẻ và mời bạn bè không sử dụng ứng dụng của bạn. Các API này trả về mã thông báo có thể được sử dụng để tạo giao diện tùy chỉnh cho gắn thẻ và lời mời. Các mã thông báo đó không có nghĩa là có thể lưu vào bộ nhớ cache và chúng tôi không đảm bảo rằng chúng sẽ ổn định hơn 24 giờ kể từ khi nhận được phản hồi API chứa chúng. Chúng không giống như ID được sử dụng trên dữ liệu cho những người không đăng nhập vào ứng dụng của bạn cũng không giống như ID ứng dụng.

Người dùng có thể kiểm tra ID phạm vi ứng dụng của họ cho từng ứng dụng họ đã cài đặt trong hộp thoại Chỉnh sửa cài đặt của ứng dụng.Đảm bảo người dùng ứng dụng của bạn biết cách tìm thấy ứng dụng đó khi họ liên hệ với bạn bằng các truy vấn hỗ trợ

Tôi thực sự không hiểu logic của họ. Nó có ý nghĩa hơn nhiều khi có một định danh duy nhất cho mỗi người dùng, có thể được sử dụng để xác minh nó chống lại bất kỳ số lượng ứng dụng nào. Trong trường hợp của tôi, ai đó đăng nhập vào ứng dụng dựa trên web của chúng tôi, họ cũng muốn đăng nhập vào ứng dụng trên thiết bị di động - nhưng có một ID người dùng khác, vì vậy không có cách nào để liên kết 2 với nhau! Eugh

Trả lời

8

Vâng, đây là tin tức rất cũ. Nó được như thế kể từ ngày 30 tháng 4 năm 2014. Với việc giới thiệu đồ thị API v2.0, FB cũng giới thiệu API bản đồ doanh nghiệp, được thiết kế cho trường hợp sử dụng của bạn.

Bạn sẽ không nhận một dùng id, nhưng bạn sẽ nhận được một token_for_business:

này trả về một chuỗi đó là như nhau cho người này trên tất cả các ứng dụng bởi cùng một Giám đốc kinh doanh quản lý .

Xem

+0

nhờ. Tôi đã không nhận thức được điều này (tôi sử dụng một plugin được tạo sẵn cho đăng nhập dựa trên web, và như vậy đã không phải đi sâu vào phần này cho đến nay). Tôi sẽ có một trò chơi với nó, và giả sử tất cả các công trình - Tôi sẽ đánh dấu điều này như là câu trả lời được chấp nhận :) –

+1

Làm việc một sự duyên dáng - cảm ơn :) –

+0

Vui mừng khi biết nó làm việc cho bạn! – Tobi

0
LoginManager.logInWithReadPermissions(['email']).then((result) => { 
      if (result.isCancelled){ 
      //console.warn("Login is canceled"); 
      } else { 
      AccessToken.getCurrentAccessToken().then((data) =>{ 
      const responseInfoCallback = (error, result) => { 
       if (error) { 

       } else { 
        //you can pick data.userID and data.applicationID 
        //To getting unique id of user by application 
        //I think you can use (data.userId + data.applicationId) as the id 
        //For getting profile you can use result.name, result.id (it likes data.userId) 
        //Token is available in data.accessToken 

       } 
       } 
       const infoRequest = new GraphRequest(
       '/me', 
       { 
        accessToken: data.accessToken, 
        parameters: { 
        fields: { 
         string: 'email, name, gender, picture,cover, id' 
        } 
        } 
       }, 
       responseInfoCallback 
      ); 
       new GraphRequestManager().addRequest(infoRequest).start() 
     }) 
      } 
     }, (error) => { 
      console.warn(error) 
     }); 
Các vấn đề liên quan