Autoryzacja na każdym widoku w Androidzie

0

Cześć, piszę aplikację w Android studio, korzystającą z REST API. Do komunikacji wykorzystuję Retrofit. Aktualnie udało mi się zrobić logowanie, które w rozrachunku otrzymuje wygenerowany token.
Moje pytanie dotyczy autoryzacji z kolejnych widoków, jednak nie wiem w jaki sposób stworzyć globalny dostęp do interfejsu z endpointami, oraz w jaki sposób zrobić, aby token był dostępny globalnie, a nie jedynie w MainActivity.

Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("http://10.0.2.2:8000/")
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();

    UserClient userClient = retrofit.create(UserClient.class);

Taki fragment kodu mam aktualnie w MainActivity, podejrzewam, że żeby móc zrobić to co chcę, należy w jakiś sposób upublicznić userClient. W jaki sposób to zrobić?

0

Jeśli chcesz obiekt przekazywać pomiędzy activity, to warto pomyśleć o implementacji Parcelable w klasie UserClient.
To odpoewiednik Serializable, ale lepiej zoptymalizowany właśnie pod kontem Androida.
http://sohailaziz05.blogspot.com/2012/04/passing-custom-objects-between-android.html

Jeśli chcesz to po prostu 'wyciągać z kosmosu' w dowolnym miejscu programu, to widzę 3 opcje:

  1. używasz preferences https://code.tutsplus.com/tutorials/android-essentials-application-preferences--mobile-2914
  2. tworzysz klasę rozszerzającą Application.class http://www.helloandroid.com/category/topics-covered/global-variables
  3. tworzysz jakiegoś singletona, który wykona autoryzację tylko raz i będzie trzymał stan, albo za każdym razem wykona tę autoryzację...
0
TakiTamPiekarz napisał(a):

Jeśli chcesz obiekt przekazywać pomiędzy activity, to warto pomyśleć o implementacji Parcelable w klasie UserClient.

Nie powinno się używać Parcelable do klas takich jak serwis internetowy. Po drugie tutaj nawet nie dałoby się tego zrobić, ponieważ to Retrofit jest odpowiedzialny za stworzenie implementacji interfejsu a nie my.

To co powienienś zrobić, to utworzyć własny interceptor dla klienta OkHttp, który by dodawał odpowiedni nagłówek autentykacyjny do zapytań kiedy trzeba i korzystać z tego klienta w Retroficie. W ten sposób nie musisz sam o to nigdy dbać praktycznie. Jak to zrobić możesz zobaczyć w prezentacji poniżej od 11:50 do 15:20 mniej więcej. Musisz tylko dodać jakiś własny mechanizm do takiego interceptora do przechowywania tokena i zapisywać token po udanym logowaniu. Jeżeli ma być z persystencją, to może być np. na bazie SharedPreferences. W przeciwnym wypadku możesz trzymać w pamięci po prostu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1