Ich versuche ein Beispiel von Google zu erstellen, um zu sehen, ob ich von App Engine auf Google+ zugreifen kann. Ich habe meinem Projekt die folgenden Dateien hinzugefügt und die Servlet-Zuordnung so eingerichtet, dass sie für die Pfade verfügbar sind, auf denen sie erwartet werden. Ich habe es in der App-Engine bereitgestellt und versucht, auf die Anwendung zuzugreifen. Gehen zu https://mydomain.appspot.com/ gibt mir Fehler: NOT_FOUND. Der Zugriff auf die URLs der Servlets gibt mir die unten genannten Ausnahmen. Die Proben stammen aus https://github.com/google/google-api-java-client-samples/tree/master/plus-appengine-sampleURL nicht gefunden, wenn der Beispielcode ausgeführt wird
Diese Beispiele sind möglicherweise nicht auf dem neuesten Stand, aber sie sind die neuesten, die ich von Google finden kann. Jeder Hinweis darauf, was ich tun sollte, um dies zum Funktionieren zu bringen, wäre hilfreich.
Aussehen Meine Klassen wie folgt aus:
BasicServlet:
public class PlusBasicServlet extends HttpServlet {
/**
* Enter your API key here from https://code.google.com/apis/console/?api=plus under "API Access".
*/
private static final String API_KEY = "AIzaSyB9NEc2yQRisoj-rIqgg35yeZXReASMRCI";
private static final long serialVersionUID = 1;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpTransport httpTransport = new UrlFetchTransport();
JsonFactory jsonFactory = new JacksonFactory();
Plus plus = new Plus.Builder(httpTransport, jsonFactory, null).setApplicationName("")
.setGoogleClientRequestInitializer(new PlusRequestInitializer(API_KEY)).build();
ActivityFeed myActivityFeed = plus.activities().search("Google").execute();
List<Activity> myActivities = myActivityFeed.getItems();
resp.setContentType("text/html");
resp.setStatus(200);
Writer writer = resp.getWriter();
writer.write("<ul>");
for (Activity a : myActivities) {
writer.write("<li>" + a.getTitle() + "</li>");
}
writer.write("</ul>");
}
}
Util:
class Utils {
/**
* Global instance of the {@link DataStoreFactory}. The best practice is to make it a single
* globally shared instance across your application.
*/
private static final AppEngineDataStoreFactory DATA_STORE_FACTORY =
AppEngineDataStoreFactory.getDefaultInstance();
private static GoogleClientSecrets clientSecrets = null;
private static final Set<String> SCOPES = Collections.singleton(PlusScopes.PLUS_ME);
static final String MAIN_SERVLET_PATH = "/plussampleservlet";
static final String AUTH_CALLBACK_SERVLET_PATH = "/oauth2callback";
static final UrlFetchTransport HTTP_TRANSPORT = new UrlFetchTransport();
static final JacksonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static GoogleClientSecrets getClientSecrets() throws IOException {
if (clientSecrets == null) {
clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(Utils.class.getResourceAsStream("/plus_secret.json")));
Preconditions.checkArgument(!clientSecrets.getDetails().getClientId().startsWith("Enter ")
&& !clientSecrets.getDetails().getClientSecret().startsWith("Enter "),
"Download client_secrets.json file from https://code.google.com/apis/console/?api=plus "
+ "into plus-appengine-sample/src/main/resources/client_secrets.json");
}
return clientSecrets;
}
static GoogleAuthorizationCodeFlow initializeFlow() throws IOException {
return new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, getClientSecrets(), SCOPES).setDataStoreFactory(
DATA_STORE_FACTORY).setAccessType("offline").build();
}
static String getRedirectUri(HttpServletRequest req) {
GenericUrl requestUrl = new GenericUrl(req.getRequestURL().toString());
requestUrl.setRawPath(AUTH_CALLBACK_SERVLET_PATH);
return requestUrl.build();
}
}
Ausnahme beim Zugriff auf grundlegende Servlet:
Uncaught exception from servlet
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions.",
"reason" : "ipRefererBlocked",
"extendedHelp" : "https://console.developers.google.com/apis/credentials?project=602263912930"
} ],
"message" : "The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions."
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
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)
Bitte denken Sie daran, Stack ist kein Forum. Durch das Löschen der Fehlermeldung habe ich Ihnen bei der Fehlerbehebung geholfen. Sie haben nun die Frage geändert und jeder, der auf die Frage kommt, wird es nicht mehr sehen. Ich habe Ihre Änderung rückgängig gemacht, damit andere von ihr unterstützt werden können. – DaImTo