5

У меня есть встроенная регистрация google и facebook, используя их соответствующие методы. Но после успешного подписания я хочу открыть различную деятельность, и аналогичным образом пользователь может перейти к различным различным видам деятельности. Я использовал панель действий, в которой я предоставляю возможность выйти из любой учетной записи, в которой пользователь вошел. Как я могу вывести пользователя, когда я занимаюсь другой деятельностью, а затем основным видом деятельности. Я получаю исключение, и я не могу передать ссылку apiclient (для google) и ссылку на сессию (для facebook) на другое действие. Пожалуйста помоги. Спасибо заранее.Выйти из Google и Facebook в Android-приложении

ответ

2

Выйти из Facebook:

public static void callFacebookLogout(Context context) { 
Session session = Session.getActiveSession(); 
if (session != null) { 

    if (!session.isClosed()) { 
     session.closeAndClearTokenInformation(); 
     //clear your preferences if saved 
    } 
} else { 

    session = new Session(context); 
    Session.setActiveSession(session); 

    session.closeAndClearTokenInformation(); 
     //clear your preferences if saved 

} 

} 

Выйти из Google:

@Override 
public void onClick(View view) { 
if (view.getId() == R.id.sign_out_button) { 
if (mGoogleApiClient.isConnected()) { 
    Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
    mGoogleApiClient.disconnect(); 
    mGoogleApiClient.connect(); 
    } 
} 
} 

guide's docs

0

Для Logout из Facebook.

public void logoutFromFacebook() { 
     Session session = Session.getActiveSession(); 
     session.closeAndClearTokenInformation(); 
     // Clear Preferences and other data and go back to login activty 
    } 

Для выхода из Google+. Имейте в виду, что выход в Google+ немного сложнее, чем в Facebook. Вам нужно будет управлять логическим, чтобы отслеживать события при щелчке по выходу из системы (как и при входе в систему).

public void logoutFromGooglePlus() { 
     mGooglePlusLogoutClicked = true; // Keep track when you click logout 
     if (mGoogleApiClient.isConnected()) { 
      Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
      revokeAccess(); 
     } else { 
      mGoogleApiClient.connect(); // It can send user to onConnected(), call logout again from there 
     } 
    } 

// revoke access (if needed) 
protected void revokeAccess() { 

     Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient) 
       .setResultCallback(new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
         mGoogleApiClient.disconnect(); 
         mGoogleApiClient.connect(); 
         // Clear data and go to login activity 
        } 
       }); 
    } 

Чтобы ответить на этот вопрос в комментарии: GoogleApiClient может быть реализован во много раз в приложении, и он все еще имеет тот же экземпляр, как он был инициализирован в первый раз. Поэтому не беспокойтесь о том, как «пройти» GoogleApiClient среди видов деятельности. Это легкий клиент, предназначенный для инициализации в качестве нового экземпляра в каждом действии. Просто создайте новый GoogleAPiClient, позвоните .connect() и начните работать. Однако вам придется реализовать необходимые для этого интерфейсы, но вы можете оставить методы пустыми, если вы не намерены выполнять какую-либо работу там.

Что касается mLogoutClicked boolean, вы можете иметь свою собственную реализацию по своему усмотрению. В принципе, это всего лишь способ сообщить метод onConnected(), который вы пришли для выхода из системы. (посмотрите на код, мы также вызываем .connect() на выход из системы, поэтому он может попасть в onConnected() и столкнуться с вашим кодом входа). Вы бы сделать что-то вроде этого на вашем onconnected()

public void onConnected(Bundle connectionHint) { 

     if (mGooglePlusLogoutClicked) { 
      logoutFromGooglePlus(); 
      mGooglePlusLogoutClicked = false; 
     } 
    } 

В качестве рекомендаций по вашему потоку реализации, имеют базовый класс делать все GoogleApiClient инициализации и пусть Войти деятельность и другие виды деятельности, расширить ее. Таким образом, он будет неявно обрабатывать проблему инициализации клиента в каждом действии. Просто внесите общий код onConnected(), onConnectionFailed() и т. Д. В базовую активность, и пусть действие входа переопределяет их для реализации логики входа. (и то же самое для выхода из системы.Он отменит эти и обрабатывать код выхода из системы)

+0

Как получить объект GoogleApiClient в другой деятельности. Также должна поддерживаться переменная mGooglePlusLogoutClicked как ?. Спасибо за фейсбук, я смог это завершить, но, пожалуйста, помогите мне в этом. – Jarvis

+0

Я отредактировал ответ, чтобы включить детали. Я упомянул рабочий процесс как можно более ясно (насколько я знаю об этом). Надеюсь, поможет. Дай мне знать. – VipulKumar

+0

Мне нужна помощь по поводу входа в facebook с Android-устройства. Я могу войти с одного устройства, но с другого устройства он дает мне исключения при получении электронной почты и других вещей.Не могли бы вы помочь мне в этом. Я добавил разрешение на чтение для электронной почты. – Jarvis

3

просто добавить на свой новый вид деятельности это:

@Override 
     protected void onStart() { 
      mGoogleApiClient.connect(); 
      super.onStart(); 
     } 

, а затем

@Override 
    public void onClick(View v) { 
      switch (v.getId()) { 
       case R.id.sign_out_button2: 

         Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
         mGoogleApiClient.disconnect(); 
         mGoogleApiClient.connect(); 
+0

Зачем вы пишете mGoogleApiClient.connect(), за которым следует mGoogleApiClient.disconnect()? –

+0

, потому что он отключает все предыдущие сеансы – Andrea

1

Выход из Facebook довольно легко

просто добавить следующий код

LoginManager.getInstance().logOut(); 

вы можете перенаправить пользователя для входа активности, добавив следующий код дополнительно

LoginManager.getInstance().logOut(); 
Intent intent = new Intent(CurrentActivity.this, LoginActivity.class); 
startActivity(intent); 
finish(); 

так что ваш окончательный код logoutFromFacebook будет

public void logoutFromFacebook(){ 
    LoginManager.getInstance().logOut(); 
    Intent intent = new Intent(CurrentActivity.this, LoginActivity.class); 
    startActivity(intent); 
    finish(); 
} 

Теперь просто вызвать этот метод на вашем событии кнопки выхода из системы.

10

отключиться от Google:

Просто добавьте это на новый вид деятельности, где вы хотите, чтобы ваш выхода из системы кнопки для Google +, чтобы быть там:

@Override 
protected void onStart() { 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

и рядом можно установить setOnClickListener на кнопку:

signout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
       new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
         // ... 
         Toast.makeText(getApplicationContext(),"Logged Out",Toast.LENGTH_SHORT).show(); 
         Intent i=new Intent(getApplicationContext(),MainActivity.class); 
         startActivity(i); 
        } 
       }); 
    } 
}); 
1

Во-первых, для выхода из системы Facebook:

LoginManager.getInstance().logOut(); 

Если вы пытаетесь выйти из другой деятельности или фрагмента, это даст вам ошибку, например, sdk в Facebook, не инициализированную. Затем, во-первых, вам необходимо инициализировать facebook sdk, например:

FacebookSdk.sdkInitialize(your context here); 

, а затем выйти из диспетчера.

Secondary для Google логаута:

сначала вы должны проверить, что Google клиент подключен или нет, и если он подключен затем вызовите для выхода из системы код:

if (mGoogleApiClient.isConnected()) 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient); 

здесь mGoogleApiClient является объектом GoogleApiClient.

+0

благодаря его помощи мне –

1

Для учетной записи Google

Auth.GoogleSignInApi.signOut(mGoogleApiClient); 

и facebook счета

LoginManager.getInstance().logOut(); 

 Смежные вопросы

  • Нет связанных вопросов^_^