質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

7847閲覧

Google Calendar Api v3で403エラー

tetsukay

総合スコア232

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/07/15 16:04

編集2015/07/15 16:09

publicなGoogleカレンダーにアクセスして,Event一覧を取得する部分でApiからエラー返されます.

Google Calendarの公開APIのキーは発行しており,「許可対象Android アプリを編集」で,
keytool -list -printcert -jarfile ファイル名.apk の結果のSHA1とパッケージ名を指定しています.

イメージ説明

この指定を外すと期待通りにレスポンスが返ってくることから,この指定でブロックされてしまっていると予測していますが,SHA1もパッケージ名の指定も間違っていない状況で403が出る原因が分かりません.

なにかヒントを頂きたくおもいます.よろしくお願いします.

  • エラー内容
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
  • エラーレスポンス
{ "code": 403, "errors": [ { "domain": "usageLimits", "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed.", "reason": "ipRefererBlocked", "extendedHelp": "https://console.developers.google.com" } ], "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed." }
  • StackTrace
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) at com.example.MainActivity$1.run(MainActivity.java:50) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 07-16 00:45:53.247 23858-23873/com.example W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
  • MainActivity.java

java:MainActivity.java

1public class MainActivity extends Activity { 2 3 private static final String TAG = MainActivity.class.getSimpleName(); 4 5 /** 6 * Calendar HttpTransport 7 */ 8 private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); 9 /** 10 * JsonFactory 11 */ 12 private static final JsonFactory JSON_FACTORY = new GsonFactory(); 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 final Context appContext = getApplicationContext(); 18 final GoogleCredential credential = new GoogleCredential(); 19 final Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 20 .setApplicationName(getString(R.string.app_name)) 21 .setCalendarRequestInitializer(new CalendarRequestInitializer(Def.API_KEY)).build(); 22 23 final Runnable r = new Runnable() { 24 @Override 25 public void run() { 26 // Iterate over the events in the specified calendar 27 String pageToken = null; 28 do { 29 try { 30 Events events = service.events().list("CalenderID").setPageToken(pageToken).execute(); 31 List<Event> items = events.getItems(); 32 for (Event event : items) { 33 System.out.println("event: " + event.toString()); 34 } 35 pageToken = events.getNextPageToken(); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } 39 } while (pageToken != null); 40 } 41 }; 42 AsyncTask.THREAD_POOL_EXECUTOR.execute(r); 43 } 44 45} 46

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

私も同じエラーになったことがあります。
"Browser key" で生成 Option の WebSite は未入力 (Warning でますがミス) で生成された Key を使うことで対応できています。

投稿2016/03/12 11:15

bigchu

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

答えになるか分かりませんが、関連するかもしれない情報を書きます。

ここを見ると、ブラウザキーのリファラーの設定で全てを許可すると解消したという情報があります。
他にも同じような現象で困っている人はいますが、kuchinashiさんと全く同じ状況のものは
見つけられませんでした。
サーバーキーのIPアドレスの制限でも同じエラーになるようです。

投稿2015/07/16 15:31

eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsukay

2015/07/17 00:17

回答ありがとうございます.一応頂いたリンク先は既に確認済みでした. とりあえずフィンガープリントとパッケージ名による制限を無しとするか,クライアントIDを取得する方向で進めてみます. 引き続き回答を募集します. しばらく回答が付かなければBAとして締め切らせていただきます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問