android - Android 应用程序上的 Urlshortener 和 403 错误

标签 android google-api short-url

这是我在 Stackoverflow 上的第一个问题,由于我阅读的所有帖子和所做的所有测试,我的大脑都被烧毁了。

在我的应用程序中,我会添加 Google 的 Short Url 服务。我读过这篇 post ,我已经在 Google API 控制台中为 Android 应用程序生成了 API-KEY,将 key 放在我的 list 中,启用 URL Shortener API 并将每个用户的配额限制设置为 50(此时我是唯一的用户我在物理智能手机上的应用程序)但我的短网址方法给了我这个:

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 或假货放入 list 中,结果是相同的。我认为我的应用程序不发送 API-KEY 但我不知道为什么。 为了完整起见,这是我的 AndroidManifest.xml 的一部分

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

我尝试将元数据移动到各个位置,更改 api-key 但每次都会出现 403 错误。

非常感谢您的任何建议,很抱歉我的英语不是我的母语,但我周二开始了英语类(class):)

最佳答案

遇到了同样的问题,并通过添加 setKey() 解决了,如下所示。使用 API 控制台中的 Android key ,而不是通过网络调用使用旧的缩短器时可能使用的任何网络 key 。

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

关于android - Android 应用程序上的 Urlshortener 和 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645599/

相关文章:

javascript - 在社交媒体上分享我网站上的网页时如何缩短网址?

Android:同时 BLE 连接的限制

java - 使用 Opencv Android 实现分水岭分割时出错

android - 如何将 ArrayAdapter 更改为全局并在另一个类中清除它?

android - 检测Android模拟器何时完全启动

javascript - Recaptcha 无效请求 cookie

java - 如何在列表中显示带有名称的附近咖啡馆的图像

php - Wordpress 主题更改了永久链接

google-api - Google Marketplace 许可 api 突然不起作用

url - 为什么在某些国家/地区拒绝使用短网址是这种犯罪?