Dropbox.js を使用して Dropbox からファイルを取得しようとする Cordova/PhoneGap でアプリを作成しています。Cordova のバージョンは 3.0.1、Dropbox.js のバージョンは 0.10.0 です。私の Javascript は、これを使用してデスクトップ ブラウザーで問題なく動作します。
var client = new Dropbox.Client({ key: "<my key>", secret: "<my secret>"} );
client.authenticate(function(error, client) {
...
しかし、Cordova でパッケージ化されたアプリでは、「使用していたアプリが不正な要求を送信したようです」というエラーが表示されます。
この問題は、Cordova アプリでこれに解決されるリダイレクト URL に関係していると思われます。
Dropbox.AuthDriver.BrowserBase.currentLocation()
-> file:///android_asset/www/index.html
file:/// で始まる URL は、Dropbox API コンソールで OAuth リダイレクト URI に追加しても、Dropbox API では正しく機能しません。
以前に uid とトークンを知っていれば、Cordova アプリは正常に動作します。
var client = new Dropbox.Client({
key: "<my key",
secret: "<my secret>",
token: "<token>",
uid: "<uid>"
});
client.authenticate(function(error, client) {
...
このようにして、ドロップボックスファイルを問題なく読み取ることができます。問題は、トークンが永久に保持されないことです。アプリ自体から新しいトークンを取得したいと考えています。
このディスカッションによると、この問題は以前のバージョンの dropbox.js (0.9.2) で既に解決されているはずです。しかし、私はまだそれに遭遇します。API を少し別の方法で使用する必要があるのだろうかと思いますが、方法がわかりません。
Dropbox.js は、このコミットに redirectUrl オプションを追加しました。Cordova アプリに何を配置すればよいか正確にはわかりません。Dropbox API ではファイル URL が許可されていないため、file:///android_asset/www/index.html は機能しません。
この質問に対する Simon McDonald の回答が役立つかもしれません。しかし、それは、dropbox.js ログイン機能を備えた外部サーバーでホストされるページが必要であることを意味します。または、メインのドロップボックス Web ログイン ページを代わりに使用できますか?