【发布时间】:2014-08-19 05:53:14
【问题描述】:
我的应用如何知道用户何时从其原生 Facebook 应用注销?
我在我的应用程序中使用以下代码从 Facebook 注销。它工作正常。
class LogoutTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
if (facebook.isSessionValid()) {
try {
facebook.logout(getApplicationContext());
editLoginStatus(false);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", null);
editor.putLong("access_expires",
facebook.getAccessExpires());
editor.commit();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
}
但是当用户从其原生 Facebook 应用注销然后点击我的应用上的注销按钮时,就会出现问题。
它向我显示以下错误
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.IllegalArgumentException: Invalid context argument
at android.webkit.CookieSyncManager.createInstance(CookieSyncManager.java:86)
at com.facebook.internal.Utility.clearCookiesForDomain(Utility.java:319)
at com.facebook.internal.Utility.clearFacebookCookies(Utility.java:343)
at com.facebook.Session.closeAndClearTokenInformation(Session.java:798)
at com.facebook.android.Facebook.logoutImpl(Facebook.java:665)
at com.facebook.android.Facebook.logout(Facebook.java:642)
at com.example.animation.StartLoginActivity$LogoutTask.doInBackground(StartLoginActivity.java:328)
at com.example.animation.StartLoginActivity$LogoutTask.doInBackground(StartLoginActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
我在下面调用这个函数
if (facebook.getAccessToken() != null && facebook.isSessionValid() == true) {
new LogoutTask().execute();
}
这里 accessToken 我在本地存储在 sharedPreference 中,所以只要我没有从我的应用程序中注销它就不会为空,但我想在从本机 FB 应用程序注销后facebook.isSessionValid() 应该返回 false 而它是返回 true 。那么如何检查 Facebook 应用程序是否已经注销?
【问题讨论】:
-
有人对我说,用户注销后,之前的会话就会过时。所以现在我的问题是如何检查会话是否已过时?
标签: android facebook facebook-graph-api facebook-login facebook-sdk-3.14.x