1

私は Android 開発の初心者で、Eclipse を使用して Android アプリを開発しています。Dropbox でデータベースを同期する機能を提供しました。そのために、Dropbox は認証に使用するキー値を提供してくれます。このキーは AndroidManifest.xml に挿入する必要があります

<activity
android:name="com.dropbox.client2.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask" >
<intent-filter>
    <!-- Change this to be db- followed by your app key -->
    <data android:scheme="db-xxxxxxxxxx" />

    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

ただし、このロジックを使用すると、エンド ユーザーはこの値を変更して、自分の Dropbox アカウントではなく自分の Dropbox アカウントでデータベースを同期することができなくなります。アプリケーション設定にキーを保存する設定画面を作成しましたが、Android マニフェストから値を読み取るコードが見つかりません。私はそれがここにあると思いますが、私は新しく、コードを編集する方法がわかりません:

 public void startAuthentication(Context context) {
    AppKeyPair appKeyPair = getAppKeyPair();

    // Check if the app has set up its manifest properly.
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    String scheme = "db-" + appKeyPair.key;
    String uri = scheme + "://" + AuthActivity.AUTH_VERSION + "/test";
    testIntent.setData(Uri.parse(uri));
    PackageManager pm = context.getPackageManager();
    List<ResolveInfo> activities = pm.queryIntentActivities(testIntent, 0);

    if (0 == activities.size()) {
        throw new IllegalStateException("URI scheme in your app's " +
                "manifest is not set up correctly. You should have a " +
                "com.dropbox.client2.android.AuthActivity with the " +
                "scheme: " + scheme);
    } else if (activities.size() > 1) {
        // Check to make sure there's no other app with this scheme.
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Security alert");
        builder.setMessage("Another app on your phone may be trying to " +
                "pose as the app you are currently using. The malicious " +
                "app cannot access your account, but linking to Dropbox " +
                "has been disabled as a precaution. Please contact " +
                "support@dropbox.com.");
        builder.setPositiveButton("OK", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.show();
        return;
    } else {
        // Just one activity registered for the URI scheme. Now make sure
        // it's within the same package so when we return from web auth
        // we're going back to this app and not some other app.
        String authPackage = activities.get(0).activityInfo.packageName;
        if (!context.getPackageName().equals(authPackage)) {
            throw new IllegalStateException("There must be an " +
                    "AuthActivity within your app's package registered " +
                    "for your URI scheme (" + scheme + "). However, it " +
                    "appears that an activity in a different package is " +
                    "registered for that scheme instead. If you have " +
                    "multiple apps that all want to use the same access" +
                    "token pair, designate one of them to do " +
                    "authentication and have the other apps launch it " +
                    "and then retrieve the token pair from it.");
        }
    }

    // Start Dropbox auth activity.
    Intent intent = new Intent(context, AuthActivity.class);
    intent.putExtra(AuthActivity.EXTRA_INTERNAL_CONSUMER_KEY,
            appKeyPair.key);
    intent.putExtra(AuthActivity.EXTRA_INTERNAL_CONSUMER_SECRET,
            appKeyPair.secret);
    if (!(context instanceof Activity)) {
        // If starting the intent outside of an Activity, must include
        // this. See startActivity(). Otherwise, we prefer to stay in
        // the same task.
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    }
    context.startActivity(intent);

手伝って頂けますか?

前もって感謝します

4

2 に答える 2

1

そのキーが何に使われるかを誤解している可能性があると思います。ファイルを同期するアカウントの選択には使用されません。

変更するキーは APP API キーです。独自の API キーを既に持っている開発者をターゲットにしている場合を除き、各ユーザーに一意のキーは必要ありません。これは、Dropbox に問題が発生している場合にアプリを特定してシャットダウンするために使用されます。

編集しようとしているこのキーの特定のインスタンスは、ユーザーが個人アカウントで認証した後、アプリに制御を戻すものです。これは、AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); を呼び出すときに認証に使用するキーと同期しておく必要があります。

実行時にそのインテント フィルタのデータ タグを変更することはできません。

于 2013-01-18T10:52:18.410 に答える
0

オブジェクト appKeyPair.key には、必要なキーが含まれています。何が機能するかはわかりAppKeyPair appKeyPair = getAppKeyPair();ませんが、それを削除して、を呼び出す代わりに共有設定から単純な文字列を配置できると思いますappKeyPair.key

于 2013-01-18T10:46:03.573 に答える