Я реализую SDK facebook для приложения для Android. У меня есть ProfilePictureView, который требует заполнения:
profilePictureView.setProfileId(id)
Вчера, если я использовал идентификатор профиля в области приложения (тот, который был возвращен Graph API), это сработало: это единственный идентификатор, который у меня есть, потому что, очевидно, это противоречит политике Facebook, чтобы получить «настоящий» идентификатор.
Но сегодня без каких-либо изменений он возвращает нулевое изображение. Я предполагаю, что они изменили бэкэнд, но если да, то какова цель ProfilePictureView, если для его получения требуется идентификатор, который противоречит политике Facebook?
С 26 марта 2018 года все решения, связанные с ручной ссылкой, больше не работают
Используйте код ниже
private static String FACEBOOK_FIELD_PROFILE_IMAGE = "picture.type(large)";
private static String FACEBOOK_FIELDS = "fields";
private void getFacebookData() {
GraphRequest request = GraphRequest.newMeRequest(
AccessToken.getCurrentAccessToken(),
(object, response) -> {
updateAvatar(getImageUrl(response));
});
Bundle parameters = new Bundle();
parameters.putString(FACEBOOK_FIELDS, FACEBOOK_FIELD_PROFILE_IMAGE);
request.setParameters(parameters);
request.executeAsync();
}
private static String FACEBOOK_FIELD_PICTURE = "picture";
private static String FACEBOOK_FIELD_DATA = "data";
private static String FACEBOOK_FIELD_URL = "url";
private String getImageUrl(GraphResponse response) {
String url = null;
try {
url = response.getJSONObject()
.getJSONObject(FACEBOOK_FIELD_PICTURE)
.getJSONObject(FACEBOOK_FIELD_DATA)
.getString(FACEBOOK_FIELD_URL);
} catch (Exception e) {
e.printStackTrace();
}
return url;
}
Спасибо, код работает, и я буду использовать это решение, но, теперь старый код снова работает. Возможно, это была временная (но довольно долгая) проблема с серверной частью, которую они только что решили.
Я только сейчас замечаю, что это решение отлично подходит для изображения профиля пользователя, но как насчет изображения профиля другого пользователя, зная его идентификатор?
Я отвечу сам, так как этот вопрос конкретно требует «получить изображение профиля с учетом идентификатора», а поучительный ответ Левона работает только для текущего пользователя.
private static String FACEBOOK_FIELD_PROFILE_IMAGE = "picture.type(large)";
private static String FACEBOOK_FIELDS = "fields";
private static String FACEBOOK_FIELD_PICTURE = "picture";
private static String FACEBOOK_FIELD_DATA = "data";
private static String FACEBOOK_FIELD_URL = "url";
public static void getFacebookProfileUrl(String id, final Response<String> response) {
GraphRequest request = GraphRequest.newGraphPathRequest(
AccessToken.getCurrentAccessToken(),
"/" + id,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse graph) {
String imgUrl = getImageUrl(graph);
// imgUrl is the url of the profilepic of the user with given id.
// Works both for "real" id and "app-scoped" id
}
});
Bundle parameters = new Bundle();
parameters.putString(FACEBOOK_FIELDS, FACEBOOK_FIELD_PROFILE_IMAGE);
request.setParameters(parameters);
request.executeAsync();
}
private static String getImageUrl(GraphResponse response) {
String url = null;
try {
url = response.getJSONObject()
.getJSONObject(FACEBOOK_FIELD_PICTURE)
.getJSONObject(FACEBOOK_FIELD_DATA)
.getString(FACEBOOK_FIELD_URL);
} catch (Exception e) {
e.printStackTrace();
}
return url;
}
Возможный дубликат Изображение пользователя графика Facebook не будет отображаться на мобильных устройствах