Android - Google-Login mit dem Login-Bildschirm statt der Automatischen Anmeldung
Ich habe ein Google-log-in, um meine Android-App (Schritte finden Sie unter Bearbeiten 3 von diesem post). Alles funktioniert wie es sollte, aber ich würde gerne einige kleine änderungen. Mit dem aktuellen code gefunden edit 3, bist du automatisch angemeldet bei jedem start der app, ohne die Log-in-Bildschirm. Ich möchte, um dies zu deaktivieren, da die app auf einem tablet zu arbeiten, wo eine andere Mitarbeiterin sollte sich Anmelden, um die app jeden Tag.
Begann ich, durch das entfernen der mGoogleApiClient.connect();
von der onStart()
Methode, und jetzt habe ich die Google-Login-button wieder. Wenn ich mGoogleApiClient.connect();
zu den signInWithGoogle()
ich bin in der Lage, sich mit der Erinnerung Benutzer.
Was ich will ist im Moment der Standard-Google-Login-Bildschirm, wo Sie können, geben Sie Ihre Google-E-Mail und Passwort, jedes mal, wenn Sie klicken Sie auf die Schaltfläche "Login" an, statt nur die Anmeldung-in der Erinnerung-Benutzer. (PS: denken Sie daran, dass auf meinem Android-Gerät, das ich derzeit nur einen Benutzer haben Settings -> Google Accounts
, vielleicht ist das, warum es automatisch anmeldet, statt Ihnen die Möglichkeit zu wählen, welches Konto sollte, sich zu verbinden.)
werde ich testen, wenn es macht, einen anderen, wenn ich mehrere Google-Konten auf meinem Android-Gerät. Ok, ich habe ein zweites Google-Konto auf meinem Android-Gerät, aber meine app noch automatisch Protokolle in der erinnerte sich an Benutzer, wenn ich auf Sign-In..
EDIT 2:
Ich habe nicht in der Lage, eine Lösung zu finden für mein problem noch.
Habe ich noch ein paar mehr tutorials mit verschiedenen Möglichkeiten, um sich bei Google, wie mit der AccountManager
so kann ein Benutzer wählen Sie eine der vorhandenen Google-Konten auf dem Gerät. (Ich habe nur gelesen über diese Methode heute sein, also nicht irgendwelche code-Beispiele, die für diese noch. Aber das ist auch nicht das, was ich Suche sowieso.)
Ich wohl schon deutlich gemacht, in dem post oben, aber das ist, was ich will, in Bildern erklärt:
- Ein Benutzer startet die app auf seinem/Ihrem Android-Gerät.
- Ein Benutzer legt in seinem Google-Konto-Benutzernamen (verwendete e-mail) und Passwort
- Nachdem ein Benutzer sich erfolgreich angemeldet hat, können wir andere Dinge zu tun, die mit der app
PS: Nur um sicher zu gehen, das Log-in-Bildschirm, ist das von Google selbst. Es ist also kein Login-Bildschirm selbst erstellt. Dies würde in der Theorie machen mich in der Lage, speichern Sie das eingegebene Passwort gegen das Protokoll von Google OAuth.
EDIT 3 (Der Code):
Schritte, die ich Tat, um die Google-Dienste funktionieren so weit unten sind. Jetzt brauche ich nur, um herauszufinden, wie Sie entweder zwingen, die log-in-Bildschirm oder komplett Abmelden, die Ergebnisse im log-in-Bildschirm zu jeder Zeit.
Habe ich ja befolgt das folgende tutorial:
http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/
Mit extra-info verwendet die folgenden tutorials/Seiten:
- https://developers.google.com/+/mobile/android/erste-Schritte
- https://developers.google.com/+/mobile/android/sign-in
- http://developer.android.com/google/play-services/setup.html#Setup
Diese generiert den folgenden code:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testproject_gmaillogin"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<activity
android:name="com.example.testproject_gmaillogin.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TestProject_GmailLogin</string>
<string name="action_settings">Settings</string>
<string name="profile_pic_description">Google Profile Picture</string>
<string name="btn_logout_from_google">Logout from Google</string>
<string name="btn_revoke_access">Revoke Access</string>
</resources>
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/profile_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:orientation="horizontal"
android:weightSum="3"
android:visibility="gone">
<ImageView
android:id="@+id/img_profile_pic"
android:contentDescription="@string/profile_pic_description"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:orientation="vertical"
android:layout_weight="2" >
<TextView
android:id="@+id/txt_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="20sp" />
<TextView
android:id="@+id/txt_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
<com.google.android.gms.common.SignInButton
android:id="@+id/btn_sign_in"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"/>
<Button
android:id="@+id/btn_sign_out"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_logout_from_google"
android:visibility="gone"
android:layout_marginBottom="10dp"/>
<Button
android:id="@+id/btn_revoke_access"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_revoke_access"
android:visibility="gone" />
</LinearLayout>
MainActivity.java:
package com.example.testproject_gmaillogin;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements ConnectionCallbacks, OnConnectionFailedListener, OnClickListener
{
//Logcat tag
private static final String TAG = "MainActivity";
//Profile pix image size in pixels
private static final int PROFILE_PIC_SIZE = 400;
//Request code used to invoke sign in user interactions
private static final int RC_SIGN_IN = 0;
//Client used to interact with Google APIs
private GoogleApiClient mGoogleApiClient;
//A flag indicating that a PendingIntent is in progress and prevents
//us from starting further intents
private boolean mIntentInProgress;
//Track whether the sign-in button has been clicked so that we know to resolve
//all issues preventing sign-in without waiting
private boolean mSignInClicked;
//Store the connection result from onConnectionFailed callbacks so that we can
//resolve them when the user clicks sign-in
private ConnectionResult mConnectionResult;
//The used UI-elements
private SignInButton btnSignIn;
private Button btnSignOut, btnRevokeAccess;
private ImageView imgProfilePic;
private TextView txtName, txtEmail;
private LinearLayout profileLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Get the UI-elements
btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in);
btnSignOut = (Button) findViewById(R.id.btn_sign_out);
btnRevokeAccess = (Button) findViewById(R.id.btn_revoke_access);
imgProfilePic = (ImageView) findViewById(R.id.img_profile_pic);
txtName = (TextView) findViewById(R.id.txt_name);
txtEmail = (TextView) findViewById(R.id.txt_email);
profileLayout = (LinearLayout) findViewById(R.id.profile_layout);
//Set the Button onClick-listeners
btnSignIn.setOnClickListener(this);
btnSignOut.setOnClickListener(this);
btnRevokeAccess.setOnClickListener(this);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API, null)
.addScope(Plus.SCOPE_PLUS_LOGIN)
.build();
}
@Override
protected void onStart(){
super.onStart();
mGoogleApiClient.connect(); //<- REMOVED (EDIT 4: Added again)
}
@Override
protected void onStop(){
super.onStop();
if(mGoogleApiClient.isConnected())
mGoogleApiClient.disconnect();
}
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.btn_sign_in:
signInWithGPlus();
break;
case R.id.btn_sign_out:
signOutFromGPlus();
break;
case R.id.btn_revoke_access:
revokeGPlusAccess();
break;
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if(!result.hasResolution()){
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show();
return;
}
if(!mIntentInProgress){
//Store the ConnectionResult so that we can use it later when the user clicks 'sign-in'
mConnectionResult = result;
if(mSignInClicked)
//The user has already clicked 'sign-in' so we attempt to resolve all
//errors until the user is signed in, or they cancel
resolveSignInErrors();
}
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent){
if(requestCode == RC_SIGN_IN && responseCode == RESULT_OK)
SignInClicked = true;
mIntentInProgress = false;
if(!mGoogleApiClient.isConnecting())
mGoogleApiClient.connect();
}
}
@Override
public void onConnected(Bundle connectionHint) {
mSignInClicked = false;
Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
//Get all the user's information
getProfileInformation();
//Update the UI after sign-in
updateUI(true);
}
@Override
public void onConnectionSuspended(int cause){
mGoogleApiClient.connect();
updateUI(false);
}
//Updating the UI, showing/hiding buttons and profile layout
private void updateUI(boolean isSignedIn){
if(isSignedIn){
btnSignIn.setVisibility(View.GONE);
btnSignOut.setVisibility(View.VISIBLE);
btnRevokeAccess.setVisibility(View.VISIBLE);
profileLayout.setVisibility(View.VISIBLE);
}
else{
btnSignIn.setVisibility(View.VISIBLE);
btnSignOut.setVisibility(View.GONE);
btnRevokeAccess.setVisibility(View.GONE);
profileLayout.setVisibility(View.GONE);
}
}
//Sign-in into Google
private void signInWithGPlus(){
//if(!mGoogleApiClient.isConnecting()) //<- ADDED (EDIT 4: Removed again)
//mGoogleApiClient.connect(); //<- ADDED (EDIT 4: Removed again)
if(!mGoogleApiClient.isConnecting()){
mSignInClicked = true;
resolveSignInErrors();
}
}
//Method to resolve any sign-in errors
private void resolveSignInErrors(){
if(mConnectionResult.hasResolution()){
try{
mIntentInProgress = true;
//Toast.makeText(this, "Resolving Sign-in Errors", Toast.LENGTH_SHORT).show();
mConnectionResult.startResolutionForResult(this, RC_SIGN_IN);
}
catch(SendIntentException e){
//The intent was cancelled before it was sent. Return to the default
//state and attempt to connect to get an updated ConnectionResult
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
//Fetching the user's infromation name, email, profile pic
private void getProfileInformation(){
try{
if(Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null){
Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
String personName = currentPerson.getDisplayName();
String personPhotoUrl = currentPerson.getImage().getUrl();
String personGooglePlusProfile = currentPerson.getUrl();
String personEmail = Plus.AccountApi.getAccountName(mGoogleApiClient);
Log.e(TAG, "Name: " + personName + ", "
+ "plusProfile: " + personGooglePlusProfile + ", "
+ "email: " + personEmail + ", "
+ "image: " + personPhotoUrl);
txtName.setText(personName);
txtEmail.setText(personEmail);
//by default the profile url gives 50x50 px image,
//but we can replace the value with whatever dimension we
//want by replacing sz=X
personPhotoUrl = personPhotoUrl.substring(0, personPhotoUrl.length() - 2)
+ PROFILE_PIC_SIZE;
new LoadProfileImage(imgProfilePic).execute(personPhotoUrl);
}
else{
Toast.makeText(getApplicationContext(), "Person information is null", Toast.LENGTH_LONG).show();
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
//Sign-out from Google
private void signOutFromGPlus(){
if(mGoogleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
mGoogleApiClient.disconnect();
mGoogleApiClient.connect();
updateUI(false);
}
}
//Revoking access from Google
private void revokeGPlusAccess(){
if(mGoogleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
.setResultCallback(new ResultCallback<Status>(){
@Override
public void onResult(Status s){
Log.e(TAG, "User access revoked!");
mGoogleApiClient.connect();
updateUI(false);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Handle action bar item clicks here. The action bar will
//automatically handle clicks on the Home/Up button, so long
//as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings)
return true;
return super.onOptionsItemSelected(item);
}
}
LoadProfileImage.java:
package com.example.testproject_gmaillogin;
import java.io.InputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
/**
* Background async task to load user profile picture from url
**/
public class LoadProfileImage extends AsyncTask<String, Void, Bitmap> {
private ImageView bmImage;
public LoadProfileImage(ImageView bmImage){
this.bmImage = bmImage;
}
@Override
protected Bitmap doInBackground(String... urls){
String urlDisplay = urls[0];
Bitmap mIcon11 = null;
try{
InputStream in = new java.net.URL(urlDisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
}
catch(Exception ex){
Log.e("Error", ex.getMessage());
ex.printStackTrace();
}
return mIcon11;
}
@Override
protected void onPostExecute(Bitmap result){
bmImage.setImageBitmap(result);
}
}
Die anderen Schritte, die ich Tat, waren:
In https://console.developers.google.com/project ich habe ein Projekt erstellt mit:
Google+ API auf:
- Und eine Client-ID erstellt, mit der richtigen SHA1 und dem genauen gleichen Namensraum wie das Projekt:
Bei Eclipse:
Ich habe installiert die google-play-Dienste-Bibliothek:
Und fügte hinzu, es zu dem Projekt:
Habe ich auch einen Emulator mit der version 4.4.2 Google (also nicht Android 4.4.2) und auch das Projekt geändert, um Google 4.4.2 statt Android 4.4.2:
EDIT 4:
Ok, ich habe eine temporäre Lösung für meinen Fall. In meinem Fall die app, die ich mache laufen soll auf eine Tablette, die verwendet wird, explizit für meine App. Da dies der Fall ist, kann ich entfernen Sie alle Google-Konten, die von den Geräteeinstellungen, der moment jemand widerruft Zugang (log-out-Funktion).
Begann ich, durch das entfernen der vorherigen änderungen (re-added die .connect();
zu den onStart()
und entfernt es aus der signInWithGPlus()
)
Dann fügte ich eine Zeile revokeGPlusAccess
-Methode:
//Revoking access from Google
private void revokeGPlusAccess(){
if(mGoogleApiClient.isConnected()){
Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient)
.setResultCallback(new ResultCallback<Status>(){
@Override
public void onResult(Status s){
Log.e(TAG, "User access revoked!");
removeAllGoogleAccountsFromDevice(); //<- Added
mGoogleApiClient.connect();
updateUI(false);
}
});
}
}
Mit der folgenden Methode:
//Method to remove ALL Google Accounts from the Android Device
private void removeAllGoogleAccountsFromDevice(){
//Ask if this really is what you want
new AlertDialog.Builder(MainActivity.mActivity)
.setMessage("Are you sure you want to delete all Google Accounts from this Android Device?\r\n\r\n" +
"WARNING: If you run this app on the Work Tablet, click YES. If you run this on your own device, it's recommended to click NO.")
.setCancelable(false)
.setPositiveButton("Yes, continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//AccountManager is final because we use it in the separate Thread below
final AccountManager accountManager = AccountManager.get(MainActivity.this);
Account[] googleAccounts = accountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
//Account is final because we use it in the separate Thread below
for(final Account a : googleAccounts){
//Separate Thread because AccountManager #removeAccount is an async operation
Thread worker = new Thread(new Runnable() {
@Override
public void run() {
accountManager.removeAccount(a, null, null);
}
});
worker.start();
}
}
})
.setNegativeButton("No", null)
.show();
}
Immer noch, das funktioniert nur in meinem Fall. Dies funktioniert nicht auf einem persönlichen Gerät, wo Sie offensichtlich nicht wollen, zu löschen, werden alle Google-Konten. Ich würde noch gerne wissen eine Lösung, wenn Sie nicht möchten, löschen Sie alle Geräte, die die Google-Konten.
Nein noch nicht, momentan an etwas anderem und wenn ich don ' T haben eine Antwort für diesen post noch nach, ich werde versuchen, einige weitere Dinge, die mich.
Können Sie erklären, warum Sie benötigen einen Bildschirm, auf dem die Benutzer Ihre Google-Zugangsdaten und PW statt nur über die Account-Manager integriert das Android-Gerät? Wenn Sie möchten, dass die automatische Abmeldung, Sie könnte Sie einfach wegwerfen, das auth-token. Moderne android-Geräte die Möglichkeit, mehrere Benutzer auf einem Gerät, so dass Sie könnte Sie haben, loggen Sie sich in Ihr Benutzer auf der OS-Ebene und führen Sie dann die normale Authentifizierung.
Sorry für die späte Antwort. Antwort auf deine 1. Frage: ich möchte ein Log-in und Log-out-built-in innerhalb der App, so dass ich don ' T möchten, dass Benutzer zu gehen, um die Einstellungen Bildschirm sich ein Google-Konto hinzufügen. Zu deiner 2. Frage: Wie mache ich das? Ich benutze die Android-Google-API, also ich benutze gar keine auth-Token in meinem code. Als Ihre Dritte Aussage: Das stimmt natürlich. Und ich habe gerade realisiert, dass meine Lösung das löschen aller Google-Konten nicht zur Arbeit zu gehen in Zukunft, da möchte ich zum speichern der Benutzer-Einstellungen pro Benutzer (dieser ist eingebaut, aber dann darf ich nicht löschen die Google-Konten..)
Dies muss der längste post auf SE ...
InformationsquelleAutor Kevin Cruijssen | 2014-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die richtige Antwort ist hier.
Man braucht, um
mClient.clearDefaultAccountAndReconnect()
zu löschen, die zuvor zwischengespeicherten Konto.Es ist eine gute Praxis, dies zu tun, jedesmal, wenn ein Benutzer klickt auf den sign in-button, so dass Benutzer angezeigt wird, alle seine Konten jedes mal.
In die position gesetzt ?
Jedesmal, wenn der Benutzer klickt auf den anmelden-button.
InformationsquelleAutor wittyurchin
Versuchen Abmelden der Benutzer und dann signieren die Benutzer wieder ein. Wenn Sie wollten erzwingen, dass der Benutzer bei jeder Anmeldung, können Sie einfach melden Sie sich, wenn Sie die app beenden. Ich empfehle, Sie ändern die app sign-out-Verhalten, da könnte es überraschung die Benutzer.
Stellen Sie sicher, dass Ihre Entwicklungsumgebung richtig eingerichtet ist, die von läuft die Google+ Android-Schnellstart-Beispiel. Wenn die signin Verhalten in der Beispiel-app ist die gleiche, wie Sie sehen, entweder gibt es ein Problem mit Ihrer Entwicklungsumgebung (z.B. GMS-version, Android-API version) oder die Sign-In-button Verhalten ist nicht, was Sie erwartet.
Schließlich, Sie könnten in der Lage sein, nutzen aus dieser Artikel deckt einige Allgemeine Problemstellen mit Android-Sign-In. Es umfasst eine high-level Sicht auf die jeweiligen Genehmigung und Auflösung Schritte in die Android-Zeichen-Im Fluss.
signOutFromGoogle-method
in meinem code). Aber es gibt ein paar Probleme: 1. Nachdem ich ausgeloggt bin und Klicken Sie auf Log-in wieder der gleiche Benutzer automatisch angemeldet wird, ohne ein Google-Login-Bildschirm. 2. Wenn ich starten Sie die App und klicken Sie auf sign-in dem gleichen Benutzer automatisch angemeldet wird, anstatt ein Log-in-Bildschirm. 3. Momentan bin ich nicht in der Lage, sich mit anderen Google-Konto, es sei denn, ich lösche die letzten Anmeldung im Google-Konto und re-fügen Sie ein weiteres auf dem Android-Gerät die Einstellungen.. (ich will einfach nur ein Google-Login-Bildschirm, wenn ein Benutzer klickt auf sign-in.)Lohnt es sich, sicherzustellen, dass Ihre Entwicklungsumgebung arbeitet. Aktualisierte Antwort.
Ich habe alles getan, was ich getan haben sollte, indem Sie die folgenden tutorials. Ich habe deine Beiträge lese und Sie enthalten die gleichen Schritte / Teile des Codes. (Ich habe ein EDIT-1 für eine vollständige Liste von dem, was ich getan habe, erklärte in einem anderen stackoverflow-Frage von mir.) Auch meine Google-Dienste auf meinem Gerät ist die neueste, wie auch in der App. (Ich habe Sie installiert an der gleichen Zeit.) Diese tutorials finden Sie auf der internet-Ergebnis im Grunde meine aktuelle situation, einschließlich der "Probleme" in meinem Kommentar oben. Was möchte ich nun ändern Sie diese tutorials, also ich habe ein Login-Bildschirm.
InformationsquelleAutor class
Abmelden wird Euch nicht helfen, Ihr problem zu lösen. Sie müssen Zugriff widerrufen jedes mal, wenn Sie exit aus der app oder, wenn Sie wollen, signout, von der app aus-und wieder einloggen. also, einfach anrufen Zugriff widerrufen Methode in backpressed - Methode beim beenden der app wie unter:
Dies wird definitiv lösen Ihr Problem.
ist es besser dann Sag mir die richtige Antwort.
InformationsquelleAutor Riser