我的问题是我迁移到了端点v2,在某些时候我的GCM注册码停止了工作。
停止工作?更具体地说,生成的客户端库正在尝试以此图像顶行提供的形式发送POST请求:
第二行是当我自己用Postman手动发送请求时发生的事情(更改它以便它在URL片段中而不是在查询字符串中发送数据)。这有效,并且已添加到我的数据库中。
使用标准API构建器发送注册:
Registration.Builder builder = new Registration.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl("https://"+Constants.PROJECT_ID+".appspot.com/_ah/api/");
regService = builder.build();
regService.registerDevice(gcmRegistrationId).execute();
端点本身如下所示:
@ApiMethod(name = "registerDevice", httpMethod = "post")
public void registerDevice(@Named("regId") String regId) {
if(findRecord(regId) != null) {
log.info("Device " + regId + " already registered, skipping register");
return;
}
RegistrationRecord record = new RegistrationRecord();
record.setRegId(regId);
ofy().save().entity(record).now();
}
如何解决这个问题?
我的代码正在使用以下命令进行部署和生成:
gradlew endpointsOpenApiDocs
gcloud endpoints services deploy backend\build\endpointsOpenApiDocs\openapi.json
gradlew appengineDeploy
gradlew endpointsClientLibs
答案 0 :(得分:1)
如果您希望参数是查询字符串,则也应将其标记为@Nullable。这将告诉参数走出路径。看起来旧框架和新框架中的配置之间存在一些不匹配,但将@Nullable用于查询参数并将其省略为路径参数更为正确。