我已經使用各自的方法集成了Google和Facebook註冊。但是簽名成功後,我想打開不同的活動,同樣的用戶可以去各種不同的活動。我在使用操作欄的地方提供了從用戶登錄的任一賬戶登出的選項。當我處於不同的活動時,如何在主要活動中註銷用戶。我收到一個異常,我無法將apiclient引用(對於谷歌)和會話引用(對於臉書)傳遞給另一個活動。請幫忙。 在此先感謝。來自Facebook在Android應用程序中從Google和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
}
}
從谷歌進行註銷:
@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();
}
}
}
對於註銷來自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
布爾值而言,你可以根據自己的意願擁有自己的實現。基本上,這只是告訴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();
}
,然後從Facebook
@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
退出是很容易
只是添加以下代碼
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();
}
現在只是調用該方法對你的註銷按鈕事件。
從谷歌登出:您希望您的註銷按鈕的谷歌+是有
只需添加這對您的新活動,:
@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();
如果您嘗試從其他活動或片段註銷,則會導致您未初始化Facebook sdk等錯誤。然後首先你必須初始化Facebook的SDK如:
FacebookSdk.sdkInitialize(your context here);
然後從管理器註銷。
繼發谷歌退出:
首先你要檢查谷歌客戶端連接與否,如果連接然後調用註銷代碼:
if (mGoogleApiClient.isConnected())
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
這裏mGoogleApiClient是GoogleApiClient的對象。
感謝它幫助我 –
對於谷歌帳戶
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
和Facebook帳戶
LoginManager.getInstance().logOut();
- 1. Facebook的Android應用程序註銷
- 2. Android - 註銷Facebook應用程序
- 3. 從Facebook應用程序註銷用戶
- 4. Facebook應用程序註銷
- 5. Facebook註銷導致從我的應用程序註銷
- 6. 如何從Android應用程序註銷。
- 7. 在Android應用程序中爲Facebook註銷功能
- 8. Google plus SSO在Android應用程序中註銷功能
- 9. 從Android的Facebook應用程序註銷錯誤
- 10. Facebook集成應用程序在Android中的本機應用程序註銷後未註銷
- 11. 管理Facebook登錄和註銷Android應用程序
- 12. 從應用程序註銷
- 13. 如何從我的應用程序在MonoTouch中註銷Facebook?
- 14. 無法使用$ facebook-> destroySession()從PHP Facebook應用程序註銷。
- 15. 註銷我的應用程序,如果註銷Facebook的應用程序
- 16. PHP - 刪除Facebook應用程序/註銷
- 17. Facebook註銷需要Unity應用程序?
- 18. 如何註銷Facebook的應用程序
- 19. 從Android上從Facebook註銷
- 20. Android應用程序中的Facebook登錄/註銷狀態
- 21. 在Android應用程序的facebook註銷錯誤
- 22. 在java web應用程序中如何使用facebook-java-api從Facebook註銷?
- 23. 如何從iPhone中的應用程序註銷Facebook?
- 24. Facebook Android教程註銷
- 25. 設備安裝Facebook應用程序時,無法在Android應用程序中註銷Facebook?
- 26. 在應用內從Facebook註銷?
- 27. Android的Facebook應用程序註銷問題
- 28. 從一個Yii應用程序註銷從所有人註銷
- 29. 如何使用facebook-winjs-sdk從Windows8應用程序註銷?
- 30. 註銷從應用程序中的應用程序設置
如何檢索在其他活動googleApiClient對象。另外mGooglePlusLogoutClicked變量應該如何維護?感謝您的Facebook,我能夠完成,但也請幫助我。 – Jarvis
我編輯了包含詳細信息的答案。我儘可能清楚地提到了工作流程(就我所知)。希望能幫助到你。讓我知道。 – VipulKumar
我想要一些關於從Android設備登錄Facebook的幫助。我可以從一臺設備登錄,但是從另一臺設備登錄時,它可以在檢索電子郵件和其他東西時讓我異常。你能幫我解決這個問題嗎?我已添加電子郵件的讀取權限。 – Jarvis