Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Android Dropbox Api AccessToken已更改_Android_Authentication_File Upload_Dropbox Api - Fatal编程技术网

Android Dropbox Api AccessToken已更改

Android Dropbox Api AccessToken已更改,android,authentication,file-upload,dropbox-api,Android,Authentication,File Upload,Dropbox Api,我正在开发一个android应用程序,它有可能提供大量的统计信息。我想把这些数据保存在我的dropbox上,以便以后分析 因此,我使用AuthActivity获取我自己帐户的密钥和机密,然后对其进行硬编码以获取AcessTokenPair实例: AcessTokenPair tokenPair = new AccessTokenPair("key", "secret"); mDBApi.getSession().setAccessTokenPair(tokenPair); 然后

我正在开发一个android应用程序,它有可能提供大量的统计信息。我想把这些数据保存在我的dropbox上,以便以后分析

因此,我使用AuthActivity获取我自己帐户的密钥和机密,然后对其进行硬编码以获取AcessTokenPair实例:

    AcessTokenPair tokenPair = new AccessTokenPair("key", "secret");
    mDBApi.getSession().setAccessTokenPair(tokenPair);
然后,我使用下面的异步任务将文件发送到我的dropbox:

    private class SendToDropbox extends AsyncTask<String, Void, String> {

        @SuppressWarnings("deprecation")
        @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub

            String timestamp = new Date().toString();
            FileInputStream inputStream = null;
            DisplayMetrics dm = new DisplayMetrics();
            win.getDefaultDisplay().getMetrics(dm);
            double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
            double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
            double screenInches = Math.sqrt(x + y);
            File sdcard = new File(Environment.getExternalStorageDirectory()
                .getPath());
            File session = null;

            try {
                 session = File.createTempFile("analytics_" + timestamp, ".txt", sdcard);

                if (session.exists()) {
                    PrintStream ps = new PrintStream(session);
                    ps.println("Screen Size: " + screenInches);
                    ps.println("Device: " + android.os.Build.MODEL);
                    ps.println("Carrier: " + android.os.Build.BRAND);
                    ps.println("Locale: " + Locale.getDefault().toString());
                    ps.println("OS: " + android.os.Build.VERSION.SDK);
                    ps.println("${EOF}");

                    ps.checkError();
                    ps.close();

                    inputStream = new FileInputStream(session);
                    com.dropbox.client2.DropboxAPI.Entry newEntry = mDBApi
                        .putFile("Analytics" + File.separator
                                + session.getName(), inputStream,
                                session.length(), null, null);
                    if (session.delete()) {
                    } else {
                        session.deleteOnExit();
                    }
                    Log.i("DbExampleLog", "The uploaded file's rev is: "
                        + newEntry.rev);
                } else {
                Log.e("DropBoxFile", "SD NOT MOUNTED!!");
                }

            } catch (DropboxUnlinkedException e) {
                // User has unlinked, ask them to link again here.
                Log.e("DbExampleLog", "User has unlinked.");
            } catch (DropboxException e) {
                Log.e("DbExampleLog", "Something went wrong while uploading.");
            } catch (FileNotFoundException e) {
                Log.e("DbExampleLog", "File not found.");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                    }
                }
            }

          return null;
    }
私有类SendToDropbox扩展异步任务{
@抑制警告(“弃用”)
@凌驾
受保护的字符串doInBackground(字符串…arg0){
//TODO自动生成的方法存根
字符串时间戳=新日期();
FileInputStream inputStream=null;
DisplayMetrics dm=新的DisplayMetrics();
win.getDefaultDisplay().getMetrics(dm);
double x=Math.pow(dm.widthPixels/dm.xdpi,2);
双y=数学功率(dm.heightPixels/dm.ydpi,2);
双屏幕英寸=数学sqrt(x+y);
File sdcard=新文件(Environment.getExternalStorageDirectory()
.getPath());
文件会话=null;
试一试{
会话=File.createTempFile(“分析”+时间戳“.txt”,SD卡);
if(session.exists()){
PrintStream ps=新的PrintStream(会话);
ps.println(“屏幕尺寸:“+屏幕英寸”);
ps.println(“设备:+android.os.Build.MODEL”);
ps.println(“载体:+android.os.Build.BRAND”);
ps.println(“Locale:+Locale.getDefault().toString());
ps.println(“OS:+android.OS.Build.VERSION.SDK”);
ps.println(“${EOF}”);
ps.checkError();
ps.close();
inputStream=新文件inputStream(会话);
com.dropbox.client2.DropboxAPI.Entry newEntry=mDBApi
.putFile(“分析”+File.separator
+session.getName(),inputStream,
session.length(),null,null);
if(session.delete()){
}否则{
session.deleteOnExit();
}
Log.i(“DbExampleLog”,“上载文件的版本为:”
+newEntry.rev);
}否则{
Log.e(“DropBoxFile”,“SD未装入!!”;
}
}捕获(DropboxUnlinkedException){
//用户已取消链接,请让他们在此处再次链接。
e(“DbExampleLog”,“用户已解除链接”);
}捕获(DropBoxexException e){
e(“DbExampleLog”,“上传时出错。”);
}catch(filenotfounde异常){
e(“DbExampleLog”,“找不到文件”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}最后{
如果(inputStream!=null){
试一试{
inputStream.close();
}捕获(IOE异常){
}
}
}
返回null;
}
这段代码唯一的问题是,它只在访问令牌更改前几周,可能一个月起作用。这意味着我必须每隔几周手动更新apk,这不是很可行。相反,我希望将密钥存储在我可以通过http访问的网站或在线文件中


是否有不需要帐户访问并允许您在web上上载和编辑.txt文件的免费程序?

从Dropbox最佳实践:

您的应用程序应采取预防措施,以防访问被撤销。访问令牌可能会被用户禁用(从帐户页面),在滥用时被Dropbox管理员撤销,或者随着时间的推移而过期

在令牌不再被授权的情况下,REST API将返回HTTP错误401 Unauthorized响应。iOS SDK将为您检测401s,并将调用会话委托上的SessiondReceiveAuthorizationFailure:方法来通知您授权已被撤销。Android、Python、Ruby和Java SDK都将引发您可以捕获并检查的服务器错误异常。重新验证通常是重新获得访问权限所必需的全部


因此,访问令牌肯定会随着时间的推移而变化。你必须足够灵活地处理这一问题。

访问令牌目前不会过期,尽管将来可能会发生变化。但是,你需要非常小心,千万不要将你的应用程序与用于生成令牌的帐户断开链接,因为这会使硬编码的令牌失效进入你的应用程序


但是,出于安全原因,我不建议这样做。嵌入到你的应用中的令牌可以被反向工程的人发现。任何拥有该令牌的人不仅可以读取,还可以写入Dropbox(或应用文件夹)令牌有权访问的应用程序,这样做可能会使应用程序的其他用户出错。

Dropbox访问令牌实际上不会像这样在默认情况下过期,尽管它们可以手动撤销。请确保您没有断开应用程序的链接,例如,通过或在应用程序文件夹应用程序的情况下,通过删除应用程序文件夹。不,我确信它已更改。应用程序密钥s不更改,代码没有问题。我还使用AuthActivity重新测试了令牌。他知道他需要灵活,但他要求解决方法。他希望避免每隔一段时间再次登录dropbox…想法?我阅读dropbox手册时如下所示:您无法阻止从bei访问ng已吊销。因此,如果您正在使用其中一个SDK,请捕获提到的异常并启动新的授权过程,如下所示: