У меня есть встроенная регистрация google и facebook, используя их соответствующие методы. Но после успешного подписания я хочу открыть различную деятельность, и аналогичным образом пользователь может перейти к различным различным видам деятельности. Я использовал панель действий, в которой я предоставляю возможность выйти из любой учетной записи, в которой пользователь вошел. Как я могу вывести пользователя, когда я занимаюсь другой деятельностью, а затем основным видом деятельности. Я получаю исключение, и я не могу передать ссылку apiclient (для google) и ссылку на сессию (для facebook) на другое действие. Пожалуйста помоги. Спасибо заранее.Выйти из Google и Facebook в Android-приложении
ответ
Выйти из 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();
}
}
}
Для 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()
и т. Д. В базовую активность, и пусть действие входа переопределяет их для реализации логики входа. (и то же самое для выхода из системы.Он отменит эти и обрабатывать код выхода из системы)
просто добавить на свой новый вид деятельности это:
@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();
Зачем вы пишете mGoogleApiClient.connect(), за которым следует mGoogleApiClient.disconnect()? –
, потому что он отключает все предыдущие сеансы – Andrea
Выход из 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();
}
Теперь просто вызвать этот метод на вашем событии кнопки выхода из системы.
отключиться от 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);
}
});
}
});
Во-первых, для выхода из системы 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.
благодаря его помощи мне –
Для учетной записи Google
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
и facebook счета
LoginManager.getInstance().logOut();
Как получить объект GoogleApiClient в другой деятельности. Также должна поддерживаться переменная mGooglePlusLogoutClicked как ?. Спасибо за фейсбук, я смог это завершить, но, пожалуйста, помогите мне в этом. – Jarvis
Я отредактировал ответ, чтобы включить детали. Я упомянул рабочий процесс как можно более ясно (насколько я знаю об этом). Надеюсь, поможет. Дай мне знать. – VipulKumar
Мне нужна помощь по поводу входа в facebook с Android-устройства. Я могу войти с одного устройства, но с другого устройства он дает мне исключения при получении электронной почты и других вещей.Не могли бы вы помочь мне в этом. Я добавил разрешение на чтение для электронной почты. – Jarvis