我正在使用谷歌端点和谷歌应用引擎开发一个Android应用程序。我的后端似乎没有做任何事情。看起来似乎没有任何东西被保存到数据存储区,因此无法从中检索任何内容。
以下是我在端点中编写的一些 Api方法:
private static String getUserId(User user) {
String userId = user.getUserId();
if (userId == null) {
AppEngineUser appEngineUser = new AppEngineUser(user);
ofy().save().entity(appEngineUser).now();
// Begin new session for not using session cache.
Objectify objectify = ofy().factory().begin();
AppEngineUser savedUser = objectify.load().key(appEngineUser.getKey()).now();
userId = savedUser.getUser().getUserId();
}
return userId;
}
@ApiMethod(name = "saveProfile", path = "profile", httpMethod = ApiMethod.HttpMethod.POST)
public Profile saveProfile(final User user, final ProfileForm profileForm) throws UnauthorizedException {
if(user == null) {
throw new UnauthorizedException("Authorization required.");
}
String firstName = profileForm.getFirstName();
String surname = profileForm.getLastName();
String userEmail = user.getEmail();
int year = profileForm.getYear();
int month = profileForm.getMonth();
int day = profileForm.getDay();
Profile profile = ofy().load().key(Key.create(Profile.class, getUserId(user))).now();
if (profile == null) {
// the user does not have a profile and is creating one for the first time
profile = new Profile(getUserId(user), firstName, surname, userEmail, year, month, day);
} else {
profile.update(firstName, surname, userEmail, year, month, day);
}
ofy().save().entity(profile).now();
return profile;
}
@ApiMethod(name = "getProfile", path = "profile", httpMethod = ApiMethod.HttpMethod.GET)
public Profile getProfile(User user) throws UnauthorizedException {
if (user == null) {
throw new UnauthorizedException("Authentication required.");
}
return ofy().load().key(Key.create(Profile.class, getUserId(user))).now();
}
}
配置文件类具有@Entity
注释,并在静态块中以objectify注册,如下所示:
static {
factory().register(AppEngineUser.class);
factory().register(Profile.class);
}
userId由GAE通过
生成com.google.appengine.api.users.User
,userId属性是带有@Index
注释的String。
我也对api explorer以及它如何响应这些方法感到困惑。每当我调用saveProfile api方法时,都会返回一个userId
0
和"example@example.com"
的电子邮件的配置文件对象,但我相信这是在localhost上运行时的默认电子邮件。
我也在通过HTTP运行api explorer,谷歌称这“可能会导致问题。”这就是为什么没有任何工作的原因。我不得不加载不安全的脚本只是为了我使用我的api,但也许它不起作用,因为它是通过HTTP托管而不是HTTPS。
由于我对GAE的理解存在根本缺陷,或者由于我在localhost上运行,这整个问题是无法完全测试我的方法。如果是后者,也许我应该部署到Appspot,事情可能会更顺畅。
如果还有其他需要帮助的地方,请问问。
谢谢!
答案 0 :(得分:1)
在开发者控制台中检查日志。它记录您执行的所有API方法,并显示是否有任何错误。
由于您将example@example.com作为用户的电子邮件,这使我相信用户未被GAE注入。这可能是因为您在做错了客户端(例如在Android中)。确保您的Android应用正确要求将用户登录Google并将这些凭据传递给Android中的构建器对象。
如果您通过api资源管理器执行API方法,则需要首先以Google用户身份登录,以便在您的方法中填充该用户对象(我想您已经知道了)。
简而言之,请检查您的日志和客户端代码。