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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。