2012-07-31 28 views
17

Tôi đang sử dụng oauth để đăng nhập người dùng facebook vào ứng dụng của mình. Tôi đang thử nghiệm với tài khoản FB của mình và với phạm vi quyền cơ bản. Tài liệu trên Facebook nói rằng tôi có thể nhận được 'hình ảnh' với các quyền cơ bản, nhưng tài khoản của tôi không có thuộc tính 'ảnh' khi tôi truy cập nó bằng API. Tên, họ, vv là có mặc dù.facebook oauth, không có hình ảnh có quyền cơ bản

Điều này có phải vì tài khoản của tôi không được xem công khai? Tại sao điều này có thể xảy ra? Tôi chắc chắn có một hình ảnh hồ sơ đính kèm.

Dưới đây là link fb của tôi: http://www.facebook.com/josh.nankin

+0

vừa xác nhận điều này bằng tài khoản khác. cùng một vấn đề với điều đó. –

Trả lời

4

Vì vậy, vẫn không chắc chắn lý do tại sao các api đồ thị không trả lại một tài sản hình ảnh khi bạn nhấn/me con đường trên API, nhưng một khi bạn có tên người dùng từ/tôi, bạn có thể lấy hình ảnh khá dễ dàng tại địa chỉ:

https://graph.facebook.com/USERNAME/picture

+0

Vâng ... tôi không thực sự chú ý nhiều đến tài liệu nữa. Nó quá khó hiểu, bạn nhận được kết quả khác nhau đáng kể từ FQL và OG. Cách dễ nhất để xem trường nào được trả về là sử dụng trình khám phá https: //developers.facebook.com/tools/explorer –

+3

Để có kích thước lớn hơn, bạn cũng có thể sử dụng: https://graph.facebook.com/USERNAME/picture?type=large – simoes

+2

Bạn cũng có thể sử dụng số ID người dùng thay vì tên người dùng –

4

https://developers.facebook.com/docs/reference/api/user/:

“picture: The URL of the user's profile pic (only returned if you explicitly specify a 'fields=picture' param)”

Bạn có lẽ không bỏ qua phần được đánh dấu bằng chữ in đậm…?

+0

Điều này không còn là trường hợp, và câu này không còn trong tài liệu. –

17

cách tốt nhất là giữ các quyền cơ bản và kích hoạt yêu cầu cho hình ảnh trong một bước riêng biệt. Hỏi api biểu đồ theo cách này:

https://graph.facebook.com/[fb_user_id]?fields=picture.type(small) 

larger image:

https://graph.facebook.com/[fb_user_id]?fields=picture.type(large) 

Bạn sẽ nhận được một phản ứng JSON như:

{ 
    "id": "100001XXXXXXXXX", 
    "picture": { 
     "data": { 
     "url": "http://profile.ak.fbcdn.net/hprofile-XXXX/41524_1000018XXX51507_XXXX3_q.jpg", 
     "is_silhouette": false 
     } 
    } 
} 
+0

có vẻ như nó không hoạt động nữa: https://graph.facebook.com/914431778578699?fields=picture.type(large) trả về lỗi: 'Một mã thông báo truy cập được yêu cầu để yêu cầu tài nguyên này' – stkvtflw

6

Bạn có thể lấy được các URL ảnh tiểu sử trực tiếp từ thông tin OAuth tiêu chuẩn cơ bản được trả về từ facebook như Josh Nankin lưu ý, NHƯNG với một làm rõ.

Bạn vẫn có thể sử dụng ID của người dùng trở lại để yêu cầu bức ảnh, ví dụ:

https://graph.facebook.com/914431778578699/picture?type=large

cũng giống như

https://graph.facebook.com/dark.eye.1/picture?type=large

Bằng cách này chỉ có một yêu cầu phải được thực hiện , bởi vì bạn có thể nội suy URL ảnh khi bạn lưu trữ nó trong DB.

1

Thực ra bạn không cần cho phép truy cập công khai để có được ảnh tiểu sử vì bạn có thể nhận USER_ID. Mặc dù USER_ID bạn có thể điều hướng đến ảnh tiểu sử dễ dàng.

function checkLoginState() { 
    FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
     console.log('Welcome! Fetching your information.... '); 
     var url = '/me?fields=id,name'; 
     FB.api(url, function(response) { 
      var linkpp = 'https://graph.facebook.com/' + response.id + '/picture?type=large'; 
      document.getElementById("id_of_link_tag").href = linkpp; 
     }); 
    }); 
} 

Bạn có thể thay đổi loại trong linkpp biến để type = nhỏ mà trả về một hình ảnh độ phân giải thấp.

var linkpp = 'https://graph.facebook.com/' + response.id + '/picture?type=small'; 
Các vấn đề liên quan