clientID の定数値を使用して FacebookPage アクセス トークンをフェッチする既存のコードがあります。その静的な値は、GAE にデプロイしたときに取得されます。しかし、私は多くの appID を持っているので、代わりにこれを動的にしたいと考えています。これは、承認を完了し、コードを吐き出す行です。
String url = "https://www.facebook.com/dialog/oauth" + "?client_id=" +
FacebookHelper.app().getAppId() + "&redirect_uri="
+getCallbackUrlForPageManager(stationId) + "&scope=" + permissions;
そこで、FacebookHelper.app().getAppId() (定数値) の代わりに、stationID からステーション オブジェクトを取得し、その String AppID を取得します。
リクエスト URL とコールバック URL が一致することを 100% 確認しました。
他の解決済みの質問の提案で、redirectURI の最後にスラッシュ (/) を付けずにテストしました。静的 clientID を使用すると、スラッシュがまったくなくてもすべて正常に完了します。
動的アプリ ID を使用すると (両方の URL が正確に一致する場合)、スラッシュなしで次のエラーが表示されます。
Uncaught exception from servlet
dwinq.common.social.FacebookAuthorizationCodeUsedException: Internal Facebook Exception: 100 message: 'Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request
at dwinq.spoke.servlet.FacebookOAuth.callOAuth(FacebookOAuth.java:280)
at dwinq.spoke.servlet.FacebookOAuth.fetchTokenFromCallback(FacebookOAuth.java:850)
at dwinq.hub.servlet.FacebookPageOAuth.fetchTokenfromCallbackForPageManager(FacebookPageOAuth.java:98)
at dwinq.hub.servlet.FacebookPageOAuth.acceptedPageManagerPermissions(FacebookPageOAuth.java:73)
at dwinq.hub.servlet.FacebookPageOAuth.handle(FacebookPageOAuth.java:30)
at dwinq.common.servlet.AbstractServlet.doGet(AbstractServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
....
スラッシュを使用すると、次のエラーが表示されます。
Uncaught exception from servlet
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:450)
at java.lang.Long.<init>(Long.java:690)
at dwinq.hub.servlet.FacebookPageOAuth.acceptedPageManagerPermissions(FacebookPageOAuth.java:41)
at dwinq.hub.servlet.FacebookPageOAuth.handle(FacebookPageOAuth.java:30)
at dwinq.common.servlet.AbstractServlet.doGet(AbstractServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
....
何かご意見は?さらに情報が必要な場合は、具体的な情報を提供できます。