Transmettre paramètre connexion Oauth2 entre différentes activity
Bonjour à tous,
Je viens de me lancer sur le développement d'app android. Pour ce faire, j'ai fait une api rest sur symfony sécurisé avec Oauth2, et je souhaite faire communiquer mon app avec mon api. ( quitte a faire une première application, autant qu'elle soit fonctionnelle et concrète )
Pour cela, j'ai créer une nouveau projet sur Android Studio. Sur ma premiere activity ( AccueilActivity ) j'ai placer un bouton avec un intent qui m'ouvre la page de connexion. ( LoginActivity )
Pour gérer facilement Oauth2 en java ( je débute le java tout comme android ), j'utilise https://github.com/danielsz/android-oauth2-client qui est simple a mettre en place.
Mon problème est que j'arrive a récuperer les informations rentrées dans le formulaire, j'arrive a récupérer un Token ( je vois que la commande "Token token = client.getAccessToken();" fonctionne car j'ai mon token, refresh_token qui apparaissent dans les logs une fois l'app testé sur l'AVD )
Mais une fois tout ceci fait, je ne sais pas comment:
1- Transmettre, ou récupérer ma variable Token ( qui contient mon token, mon refresh token, ... ) entre les différentes activity
2- Comment conserver mon token et surtout pouvoir le rafraîchir quand l'utilisateur lance l'application. ( après un arrêt de l'application ou l'utilisateur était déjà connecté )
2- Si la connexion échoue, comment récuperer le code d'erreur allant avec ?
ci dessous mon LoginActivity:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
package com.local.testoauth;
import android.content.Intent;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends AppCompatActivity {
/**
* Id to identity READ_CONTACTS permission request.
*/
private static final int REQUEST_READ_CONTACTS = 0;
/**
* Keep track of the login task to ensure we can cancel it if requested.
*/
// UI references.
private EditText mEmailView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginFormView;
TextView result = null;
private UserLoginTask mAuthTask = null;
public static Token LogToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
// Set up the login form.
mEmailView = (EditText) findViewById(R.id.email);
mPasswordView = (EditText) findViewById(R.id.password);
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
mEmailSignInButton.setOnClickListener(signListener);
mLoginFormView = findViewById(R.id.login_form);
mProgressView = findViewById(R.id.login_progress);
result = (TextView)findViewById(R.id.result);
}
// Uniquement pour le bouton "envoyer"
private OnClickListener signListener = new OnClickListener() {
@Override
public void onClick(View v) {
String mailapi = mEmailView.getText().toString();
// On récupère le poids
String passapi = mPasswordView.getText().toString();
mAuthTask = new UserLoginTask(mailapi, passapi);
mAuthTask.execute((Void) null);
}
};
public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
private final String mEmail;
private final String mPassword;
UserLoginTask(String email, String password) {
mEmail = email;
mPassword = password;
result.setText(LogToken.getAccessToken());
}
@Override
protected Boolean doInBackground(Void... params) {
// TODO: attempt authentication against a network service.
try {
// Simulate network access.
OAuth2Client client = new OAuth2Client(mEmail, mPassword,
"1_2l8ngmnj5p44csw8884osoc8w8ok48wgs4o0wkgs8400g404wk",
"41tb1hpb5jc40gwkos4gsog4sw8sg4ks00occw884ss48w84wg",
"http://local.com/app_dev.php");
Token token = client.getAccessToken();
LoginActivity.LogToken = token;
Thread.sleep(2000);
} catch (InterruptedException e) {
return false;
}
// TODO: register the new account here.
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
if (success) {
//finish();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled() {
mAuthTask = null;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
NavUtils.navigateUpTo(this, new Intent(this, accueilActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
} |
je sais que mon code à des problèmes, je ne fait pas encore la vérifications du champs email ni du champs password, ni la vérification de la connexion internet du mobile, mais ma priorité aujourd'hui est de comprendre comment mettre en place mon système de login.
J’espère avoir été clair dans mes explications.
Bonne journée a tous. Et grand merci à ceux qui me répondront :)