Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查dropbox用户会话是否有效?_Java_Android_If Statement_Dropbox Api - Fatal编程技术网

Java 如何检查dropbox用户会话是否有效?

Java 如何检查dropbox用户会话是否有效?,java,android,if-statement,dropbox-api,Java,Android,If Statement,Dropbox Api,我正在使用Android Dropbox API。在我的应用程序的主要活动中,我正在对dropbox api进行身份验证调用。问题是,每次我的应用程序启动时,用户都必须点击“允许”来授予应用程序访问其dropbox的权限。我的代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature

我正在使用Android Dropbox API。在我的应用程序的主要活动中,我正在对dropbox api进行身份验证调用。问题是,每次我的应用程序启动时,用户都必须点击“允许”来授予应用程序访问其dropbox的权限。我的代码如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);



    //clearKeys();
    //Log.e(TAG, "keys cleared");

    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
    AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);




    mDBApi = new DropboxAPI<AndroidAuthSession>(session);

    mDBApi.getSession().startAuthentication(Main.this);
    Log.e(TAG, "started authentication");





protected void onResume() {
    super.onResume();



    if (mDBApi.getSession().authenticationSuccessful()) {
        try {
            // MANDATORY call to complete auth.
            // Sets the access token on the session
            mDBApi.getSession().finishAuthentication();

            if(mDBApi.getSession().authenticationSuccessful()){
            Log.e(TAG, "Authentication finished");
            }
            AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair();

            // Provide your own storeKeys to persist the access token pair
            // A typical way to store tokens is using SharedPreferences
            storeKeys(tokens.key, tokens.secret);
        } catch (IllegalStateException e) {
            Log.i("DbAuthLog", "Error authenticating", e);
        }
    }


}//end of onResume()
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.main);
//clearKeys();
//日志e(标签“钥匙已清除”);
AppKeyPair appKeys=新的AppKeyPair(应用程序密钥,应用程序密钥);
AndroidAuthSession会话=新的AndroidAuthSession(appKeys,访问类型);
mDBApi=新的DropboxAPI(会话);
mDBApi.getSession().startAuthentication(Main.this);
Log.e(标记“已启动身份验证”);
受保护的void onResume(){
super.onResume();
if(mDBApi.getSession().authenticationSuccessful()){
试一试{
//完成身份验证的强制调用。
//设置会话上的访问令牌
mDBApi.getSession().finishAuthentication();
if(mDBApi.getSession().authenticationSuccessful()){
Log.e(标记“认证完成”);
}
AccessTokenPair令牌=mDBApi.getSession().getAccessTokenPair();
//提供您自己的StoreKey以持久化访问令牌对
//存储令牌的典型方法是使用SharedReference
存储密钥(tokens.key,tokens.secret);
}捕获(非法状态){
Log.i(“DbAuthLog”,“错误验证”,e);
}
}
}//onResume()结束

我需要找到一种方法来知道应用程序已经过身份验证,这样如果是这种情况,我就可以绕过身份验证。我不知道现在该怎么做。有人能帮忙吗?

你使用过SDK吗

同步Api SDK:

在验证Dropbox时:

完成后,您应该会在LogCat中看到一条信息级别消息 说“Dropbox用户链接”。用户只需这样做 一次,之后SDK将在缓存中存储用户令牌。当 你的应用程序重新启动,你可以检查它是否已经被链接 正在调用hasLinkedAccount

更新:

核心API SDK:

连接此处找到的Java文档:

用户授权后返回应用时:

finishAuthentication()方法将绑定用户的访问令牌 到会话。您现在可以通过 mDBApi.getSession().getAccessTokenPair()

在应用程序关闭后,您将再次需要这些令牌,因此 保存它们以备将来访问很重要。如果不保存,用户将 每次他们从您的服务器访问Dropbox时都必须重新验证 应用程序

实现存储密钥的一种常见方法是通过Android的 共享参考API。要了解如何使用,请查看Android 同时,为了简单起见,上面的代码 假装storeKeys函数调用您希望调用的任何方法 用于将密钥存储在更永久的位置

编辑:

StoreKey的实施:

public static boolean storeKeys(String key, String secret) {
   SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); // this refers to context
   SharedPreferences.Editor editor = settings.edit();
   editor.putString("key", key);
   editor.putString("secret", secret);
   return editor.commit();
}

你用过SDK吗

同步Api SDK:

在验证Dropbox时:

完成后,您应该会在LogCat中看到一条信息级别消息 说“Dropbox用户链接”。用户只需这样做 一次,之后SDK将在缓存中存储用户令牌。当 你的应用程序重新启动,你可以检查它是否已经被链接 正在调用hasLinkedAccount

更新:

核心API SDK:

连接此处找到的Java文档:

用户授权后返回应用时:

finishAuthentication()方法将绑定用户的访问令牌 到会话。您现在可以通过 mDBApi.getSession().getAccessTokenPair()

在应用程序关闭后,您将再次需要这些令牌,因此 保存它们以备将来访问很重要。如果不保存,用户将 每次他们从您的服务器访问Dropbox时都必须重新验证 应用程序

实现存储密钥的一种常见方法是通过Android的 共享参考API。要了解如何使用,请查看Android 同时,为了简单起见,上面的代码 假装storeKeys函数调用您希望调用的任何方法 用于将密钥存储在更永久的位置

编辑:

StoreKey的实施:

public static boolean storeKeys(String key, String secret) {
   SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); // this refers to context
   SharedPreferences.Editor editor = settings.edit();
   editor.putString("key", key);
   editor.putString("secret", secret);
   return editor.commit();
}

在进行身份验证之前,请检查存储的访问令牌是否仍然有效(当然,如果您有)。要执行此操作,只需向通过OAuth公开的任何方法发出授权请求。最好调用一个方法,该方法将产生简短、简单的输出。
如果此调用因令牌无效/过期而失败,请继续进行身份验证。此时,请更新存储的令牌,其余令牌应与以前一样工作。在身份验证之前,请检查存储的访问令牌是否仍然有效(当然,如果您有)。要做到这一点,只需向通过OAuth公开的任何方法发出授权请求。最好调用一个方法,该方法将产生简短、简单的输出。
如果此调用因令牌无效/过期而失败,请继续进行身份验证。此时更新存储的令牌,其余令牌应与以前一样工作,这是用于同步api的

。我使用的是核心api。不过,谢谢。任何人都有使用事件侦听器的经验吗?我是否可以通过为onCreate添加侦听器来完成此操作?密钥似乎是
storeKeys(tokens.key,tokens.secret);
我想一个方法需要自己实现,并使用
SharedReferences
保存这两个值。因此,一旦创建,请检查它们是否存在,如果失败(除无网络故障外),请尝试继续下一步重新请求授权。是的,这是我最初的问题。我到底可以检查什么?没有关于令牌和密钥在哪里的文档