端点生成的客户端库

Endpoints generated client library

我的问题是我迁移到了 Endpoints 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

如果你希望参数是一个查询字符串,它也应该被标记为@Nullable。这将告诉您将参数从路径中取出。看起来新旧框架的配置有些不匹配,但是查询参数使用@Nullable,路径参数省略更正确。