2016-09-30 5 views
1

Picasaコンポーネントを使用して、URLから自分のイメージをImageViewにロードしています。問題は、ヘッダーにURLと共に認証トークンを渡して、アクセス権があることを確認する必要があることです。認証トークンを渡してイメージを読み込むPicasso Xamarin

Picassoコンポーネントを使用してURLとともに認証トークンを渡すにはどうすればよいですか?

+1

[Android Picassoライブラリ、認証ヘッダーを追加する方法は?](http://stackoverflow.com/questions/24273783/android-picasso-library-how-to-add-authentication-headers) – Nikhil

+0

.. 。url: 'url + =("?orトークン= "+トークン") – Selvin

+0

@indramurari私はすでにそれを通過しました。私はxamarinで何か同等のものを望んでいた –

答えて

2

NuGetとXamarin ComponentストアのPicasaライブラリはsuper oldです。 1年以上も更新されていません。したがって、そこに表示されているコードと利用可能なコードとのわずかな違いがあるかもしれません。

var token = "authtoken"; 
var builder = new Picasso.Builder(this).Downloader(new CustomDownloader(token, this)).Build(); 

public class CustomDownloader : OkHttpDownloader 
{ 
    public CustomDownloader(IntPtr handle, JniHandleOwnership transfer) 
     : base(handle, transfer) 
    { } 

    public CustomDownloader(string authtoken, Context context) : base(context) 
    { 
     Client.Interceptors().Add(new MyInterceptor(authtoken)); 
    } 

    public class MyInterceptor : Java.Lang.Object, IInterceptor 
    { 
     private string _authtoken; 

     public MyInterceptor(string authtoken) 
     { 
      _authtoken = authtoken; 
     } 

     public Response Intercept(IInterceptorChain chain) 
     { 
      var newRequest = chain.Request().NewBuilder().AddHeader("Authentication", _authtoken).Build(); 
      return chain.Proceed(newRequest); 
     } 
    } 
} 

あなたはその後、同様にこのカスタムダウンローダを追加することができます:あなたがイメージ要求にヘッダを追加する必要がある場合

あなたがピカソに渡し、独自のIDownloaderを実装することができますその後通常どおり、いつものように画像をにダウンロードできます。

builder.Load(Android.Net.Uri.Parse("https://test.com/img.jpg")).Into(imageView); 

私はこれをRequestb.inに対してテストしました。Authenticationヘッダーは正しく設定されています。

任意のヘッダーを設定できます。

+0

コンポーネントは少し古いですが、NuGetは最新です。私はちょうどJakeの図書館の拘束を終えました。それは間もなくNuGetにアップします。 – Matthew

+0

デフォルトでは、PicassoはOkHttp v2を使用し、Jakeのダウンローダはv3を使用します。 – Matthew

+1

上記のコードはNuGetに対して作成されています。 – Cheesebaron

4

ただ、ジェイクでライブラリを結合仕上がっ:
- ジャワ:https://github.com/JakeWharton/picasso2-okhttp3-downloader
- #C:NuGetがJakeWharton.Picasso2OkHttp3Downloaderあるhttps://github.com/mattleibow/square-bindings

は、(パッケージが世界中propagteするために遅延があるかもしれない):

> Install-Package JakeWharton.Picasso2OkHttp3Downloader 

これは、C#から同じように使用することができる。

using Square.OkHttp3; 
using Square.Picasso; 
using JakeWharton.Picasso; 

// create the client 
var client = new OkHttpClient.Builder() 
    .AddInterceptor(chain => 
    { 
     var newRequest = chain.Request() 
      .NewBuilder() 
      .AddHeader("X-TOKEN", "VAL") 
      .Build(); 
     return chain.Proceed(newRequest); 
    }) 
    .Build(); 

// create the picasso handle 
var picasso = new Picasso.Builder(context) 
    .Downloader(new OkHttp3Downloader(client)) 
    .Build(); 

// use picasso! 
picasso 
    .Load(url) 
    .Placeholder(Resource.Drawable.placeholder) 
    .Error(Resource.Drawable.error) 
    .CenterInside() 
    .Into(holder.image); 

注:このライブラリはOkHttp v3を使用しています。何らかの理由でこれが望ましくない場合(問題を起こさない)、answer provided by Cheesebaronを使用する必要があります。

関連する問題