Библиотека Пикассо перестала работать сегодня с графическими ссылками на facebook

В моем приложении я использую библиотеку Picasso для загрузки изображений из URL-адресов. Это хорошо работающая легко импортируемая и полезная библиотека, и я просто делаю то, что мне нужно.

Однако сегодня он перестает работать, а не развивается, он перестает работать на скомпилированном apk.

Итак, после того, как я искал и искал причину, я просто нашел эту ошибку:

Я использую URL-адреса графиков facebook для загрузки изображений профиля.

Вот один из них: profile pictre,

ссылка на самом деле "http://graph.facebook.com/1464090949/picture?type=large"

Но он перенаправляется на: https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t5.0-1/572518_1464090949_1222130273_n.jpg

Конечно, оба url-вызова работают в браузере, и вы можете видеть изображение профиля.

Однако, когда я проверяю обе ссылки с Picasso:

    ImageView iv = (ImageView)findViewById(R.id.imageView1);

    //Url1 NOT working, loads nothing.
    String url1 = "http://graph.facebook.com/1464090949/picture?type=large";

    //Url2 is the same as URL1, i just copied it from a browser, and this is working
    String url2 = "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t5.0-1/572518_1464090949_1222130273_n.jpg";


    Picasso.with(this).load(url2).into(iv);

Итак, вывод заключается в том, что facebook может что-то изменить, и теперь Picasso не может загружать изображения из графика.

Кто-нибудь может предложить мне что-то сделать эту работу? Конечно, я могу попробовать разные библиотеки, но если есть другой способ, я был бы действительно счастлив.

Ответы

Ответ 1

Workaround1:

Измените на https с http.

Рабочий: https://graph.facebook.com/1464090949/picture?type=large

Не работает: http://graph.facebook.com/1464090949/picture?type=large

Workaround2:

Найдена душа в этой теме.

Если вы хотите, например: http://graph.facebook.com/1464090949/picture?type=large

Это изображение профиля, которое вы могли бы использовать:

https://graph.facebook.com/1464090949/?fields=picture.type(large)

Что возвращает объект JSON:

   {
   "id": "1464090949",
   "picture": {
      "data": {
         "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t5.0-1/572518_1464090949_1222130273_n.jpg",
         "is_silhouette": false
      }
   }
}

И тада! Вот оно. url key - перенаправленный URL-адрес, который вы можете использовать для загрузки изображений.

(Это будет нужно oAuth, которое я не тестировал, просто придерживайтесь Workaround1)

Ответ 2

Попробуйте это. отлично работал у меня.

Зависимость: скомпилировать 'com.squareup.okhttp: okhttp: 2.5.0'

Picasso.Builder builder = new Picasso.Builder(mContext);
        builder.listener(new Picasso.Listener() {
            @Override
            public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                /*holder.getIvSpeakerPicture()
                        .setImageDrawable(context.getResources()
                                .getDrawable("your drawable id"));*/
            }
        });
        builder.downloader(new OkHttpDownloader(mContext));
        builder.build().load(image).into(viewHolder.image);

Ответ 3

Если вы используете Amazon AWS CloudFront так же, как я, вы можете посетить эту страницу для получения подробных инструкций от Amazon о том, как настроить перенаправление URL.

По крайней мере, чтобы Picasso работал с вашими перенаправленными URL-адресами, ваши URL-адреса должны поддерживать https. То есть. https://yourdomain.com следует перенаправить на https://yourAWScloudfrontdomain.net

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html#CNAMEsAndHTTPS