0

大量の統計情報を提供する可能性のある Android アプリケーションを開発しています。このデータをドロップボックスに保存して、後で分析したいと考えています。

そこで、AuthActivity を使用して自分のアカウントのキーとシークレットを取得し、それをハードコーディングして AcessTokenPair インスタンスを取得しました。

    AcessTokenPair tokenPair = new AccessTokenPair("key", "secret");
    mDBApi.getSession().setAccessTokenPair(tokenPair);

次に、以下の AsyncTask を使用してファイルをドロップボックスに送信します。

    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;
    }

このコードの唯一の問題は、アクセス トークンが変更される 1 か月前から数週間しか機能しないことです。これは、apk を数週間ごとに手動で更新する必要があることを意味しますが、これはあまり現実的ではありません。代わりに、http 経由でアクセスできる Web サイトまたはオンライン ファイルにキーを保存したいと考えています。

アカウントへのアクセスを必要とせず、Web 上で .txt ファイルをアップロードおよび編集できる無料のプログラムはありますか?

4

2 に答える 2

1

アクセス トークンは現在有効期限がありませんが、将来変更される可能性があります。ただし、トークンの生成に使用されたアカウントからアプリをリンク解除しないように十分に注意する必要があります。これは、アプリにハードコードされているトークンが無効になるためです。

ただし、セキュリティ上の理由から、これはお勧めできません。アプリに埋め込まれたトークンは、誰かがアプリをリバース エンジニアリングすることで発見できます。そして、そのトークンを持っている人は誰でも、トークンがアクセスできる Dropbox (またはアプリ フォルダー) を読み取るだけでなく、書き込むこともできます。そうすることで、アプリの他のユーザーを台無しにする可能性があります。

于 2013-07-10T21:59:33.797 に答える