端点生成客户端库

时间:2017-12-09 14:46:45

标签: android google-app-engine google-cloud-endpoints

我的问题是我迁移到了端点v2,在某些时候我的GCM注册码停止了工作。

停止工作?更具体地说,生成的客户端库正在尝试以此图像顶行提供的形式发送POST请求:

App Engine Log Viewer

第二行是当我自己用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

1 个答案:

答案 0 :(得分:1)

如果您希望参数是查询字符串,则也应将其标记为@Nullable。这将告诉参数走出路径。看起来旧框架和新框架中的配置之间存在一些不匹配,但将@Nullable用于查询参数并将其省略为路径参数更为正确。