1

これは Stackoverflow に関する私の最初の質問であり、読んだすべての投稿と作成したすべてのテストのために、私の脳は燃え尽きてしまいました。

私のアプリでは、Google の Short Url サービスを追加します。私はこの投稿を読み、Google API コンソールで Android アプリケーション用の API-KEY を生成し、キーをマニフェストに入れ、URL Shortener API を有効にし、ユーザーごとのクォータ制限を 50 に設定しました (この時点で私は私は物理的なスマートフォンで私のアプリの唯一のユーザーです)が、短いURLの私の方法は私にこれを与えます:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code": 403,
"errors": [
{
"domain": "usageLimits",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"reason": "dailyLimitExceededUnreg",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}

これは私のメソッドのコードです

import android.os.AsyncTask;
import android.util.Log;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.services.urlshortener.Urlshortener;
import com.google.api.services.urlshortener.model.Url;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

[...]

public String shortUrl (String url) {
    Log.d(TAG, "Start ShortUrl URL = " + url);
    //*** Gruppo AsyncTask ***//
    AsyncTask <String, Void, String> shortUrlEngine = new AsyncTask<String, Void, String>() {
        @Override
        protected void onPreExecute() {
            Log.d(TAG, "PreExecute");
        }

        @Override
        protected String doInBackground(String... params) {
            Log.d(TAG, "Start doInBackground");
            Log.d(TAG, "params[0] = " + params[0]);
            Urlshortener.Builder builder = new Urlshortener.Builder (AndroidHttp.newCompatibleTransport(), AndroidJsonFactory.getDefaultInstance(), null);
            builder.setApplicationName("it.kabadroid42.testurl");
            Urlshortener urlshortener = builder.build();

            com.google.api.services.urlshortener.model.Url url = new Url();
            url.setLongUrl(params[0]);
            try {
                url = urlshortener.url().insert(url).execute();
                Log.d(TAG, String.valueOf(url.getId()));
                return url.getId();
            } catch (IOException e) {
                Log.d(TAG, String.valueOf(e));
                return "Error (1)";
            }
        }

        @Override
        protected void onPostExecute(String s) {
            Log.d(TAG, "PostExecute");
        }
    };
    //*** Fine ***//
    String urlOut = "Error (2)";
    try {
         urlOut = shortUrlEngine.execute(url).get();
    } catch (InterruptedException e) {
        Log.d(TAG, "eccezione 1");
        e.printStackTrace();
    } catch (ExecutionException e) {
        Log.d(TAG, "eccezione 2");
        e.printStackTrace();
    }

    return urlOut;
}

マニフェストに自分の正しい API-KEY または偽物を入れても、結果は同じであることに気付きました。私のアプリは API-KEY を送信していないと思いますが、その理由がわかりません。完全を期すために、これは私の AndroidManifest.xml の一部です

<application ...>
  ...
<meta-data
        android:name="com.google.android.urlshortener.API_KEY"
        android:value="xxxx MY API KEY xxxx"/>
  ...
</application>

メタデータをさまざまな位置に移動し、API キーを変更しようとしましたが、毎回 403 エラーでこんにちはと言われました。

私の英語は私の母国語ではありませんが、火曜日に英語のコースを開始します:)

4

1 に答える 1

3

同じ問題が発生し、以下に示すように setKey() を追加して解決しました。Web 呼び出しを介して古い短縮機能を使用していた場合に使用した可能性のある Web キーではなく、API コンソールから Android キーを使用します。

    try {
            url = urlshortener.url().insert(url).setKey({your API Key}).execute();
            Log.d(TAG, String.valueOf(url.getId()));
            return url.getId();
        } catch (IOException e) {
            Log.d(TAG, String.valueOf(e));
            return "Error (1)";
        }
于 2015-09-30T15:24:13.120 に答える