[androidbrasil-dev] Re: Android conectando webservice (node.js) usando autenticação e token

Grupo, bom dia

Conseguí fazer uma implementação com o Retrofit usando uma autenticação básica, ou seja, envio o usuário e senha, e consigo autenticar no webservice.
Entretanto, eu não consigo capturar o token que é retornado no json.

Eu seguí este tutorial
https://futurestud.io/tutorials/android-basic-authentication-with-retrofit

Segue abaixo o código que implementei.
ServiceGenerator.java
public class ServiceGenerator {

   
public static final String API_BASE_URL = "https://NOME_APP.herokuapp.com/";

   
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

   
private static Retrofit.Builder builder =
           
new Retrofit.Builder()
           
.baseUrl(API_BASE_URL)
           
.addConverterFactory(GsonConverterFactory.create());

   
public static <S> S createService(Class<S> serviceClass){
        return createService(serviceClass, null, null   );
   
}


   
public static <S> S createService(Class<S> serviceClass, String name, String password){
       
if(name != null && password != null){
           
String credentials = name + ":" + password;

           
final String basic = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);

           
httpClient.addInterceptor(new Interceptor() {
               
@Override
                public Response intercept(Chain chain) throws IOException {
                   
Request original = chain.request();

                   
Request.Builder requestBuilder = original.newBuilder()
                           
.header("Authorization", basic)
                           
.header("Accept", "application/json")
                           
.method(original.method(), original.body());

                   
Request request = requestBuilder.build();
                   
return chain.proceed(request);
               
}
           
});
       
}

       
OkHttpClient client = httpClient.build();
       
Retrofit retrofit = builder.client(client).build();
       
return retrofit.create(serviceClass);
   
}
}


LoginService.java
public interface LoginService {

   
@POST("api/autenticar")
   
Call<Login> basicLogin();
}


Login.java
public class Login {
   
@SerializedName("name")
   
private String name;

   
@SerializedName("password")
   
private String password;

   
@SerializedName("token")
   
private String token;

   
public Login(String name, String password){
       
this.name = name;
       
this.password = password;
   
}


   
public String getName() {
       
return name;
   
}

   
public void setName(String name) {
       
this.name = name;
   
}

   
public String getPassword() {
       
return password;
   
}

   
public void setPassword(String password) {
       
this.password = password;
   
}

   
public String getToken() {
       
return token;
   
}

   
public void setToken(String token) {
       
this.token = token;
   
}
}



MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);

   
try {
        logarWebService
();
   
} catch (IOException e) {
        e
.printStackTrace();
   
}
.
.
.
private void logarWebService() throws IOException {

   
LoginService loginService  = ServiceGenerator.createService(LoginService.class, "appLoginWS", "appSenhaWS");
 
  Call<Login> call = loginService.basicLogin();

    call
.enqueue(new Callback<Login>() {
       
@Override
        public void onResponse(Call<Login> call, Response<Login> response) {
           
if(response.isSuccessful()){
               
Log.d(TAG, "responseOK");
           
}else{
               
Log.d(TAG, "responseNULL");
           
}
       
}

       
@Override
        public void onFailure(Call<Login> call, Throwable t) {

       
}
   
});

    Login login = call.execute().body();

}
Digite o código aqui..











Em sábado, 1 de outubro de 2016 12:09:15 UTC-3, shido...@gmail.com escreveu:
bom dia pessoal.


Estou com dificuldades em implementar uma funcionalidade de conexão do android com um seviço REST escrito no node.js.

O serviço do REST possui duas rotas

a) rota para fazer a autenticação e receber o token.
b) rota para que faz a consulta no banco de dados e retorna um json.

Bem, só conseguirei acessar a rota "b" se eu primeiramente efetuar o login e capturar o token.


Agora vamos lá para a parte android (onde estou tendo a maior dificuldade)

a) pesquisei diversos tutoriais e os mais simples, não explicam como efetuar a autenticação, ele já utilizam a rota de pesquisa e retorno de json sem a autenticação.
b) encontrei um forum que recomendou usar a API Retrofit, pois dizia que a implementação era simples. Entretanto ou observar a utilização dela, eu achei complexo.

Então pessoal, gostaria de saber a opnião de vocês qual é a melhor forma de implementar a conexão (com autenticação com ou sem o token) . E se for usar alguma API, qual é a usada pela comunidade Android.

Grato pela atenção de todos.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário