0

GoogleエンドポイントとGoogleアプリケーションエンジンを使用してAndroidアプリケーションを開発しています。私のバックエンドは実際に何もしていないようです。まるで何もデータストアに保存されていないかのように見えるので、そこから何も検索することはできません。Googleアプリケーションエンジンエンティティが作成されていません

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注釈を持っているので、のような静的なブロックに客観に登録されています:

ここ

は、私が働いていないエンドポイントに書かれているAPIメソッドの一部です

static { 
     factory().register(AppEngineUser.class); 
     factory().register(Profile.class); 
} 

useridは

com.google.appengine.api.users.User 
0123を介してGAEによって生成されます

のuserIdプロパティは、@Indexアノテーションを持つStringです。

私はまた、api explorerと、これらのメソッドにどのように応答しているのか混乱しています。私がsaveProfile apiメソッドを呼び出すと、userId0、メールが"[email protected]"と返されますが、これはローカルホスト上で実行されているときのデフォルトのメールだと思います。

私はHTTP経由でapiエクスプローラも実行していますが、Googleではこれが「問題を引き起こす可能性があります」と述べています。これが何も働いていない理由ですか?私は私のAPIを使用するために私には安全でないスクリプトを読み込まなければならなかったが、HTTPSの代わりにHTTP経由でホストされているので動作しないかもしれない。

GAEの理解に根本的な欠陥があるため、またはローカルホスト上で動作しているために、私のメソッドを完全にテストすることができないというこの問題は完全に問題ですか?後者の場合、おそらく私はAppspotにデプロイする必要があり、物事が円滑に実行される可能性があります。

余分なことがあれば、お気軽にお尋ねください。

ありがとうございました!

答えて

1

開発者コンソールでログを確認してください。実行するすべてのAPIメソッドが記録され、エラーがある場合に表示されます。

ユーザーの電子メールとして[email protected]が表示されているため、ユーザーはGAEによって注入されていないと考えられます。これはおそらく、クライアント側で間違ったことを行っているためです(Androidなど)。あなたのAndroidアプリがGoogleにユーザーをログインさせ、Androidのビルダーオブジェクトにそれらの資格情報を渡すように正しく頼むようにしてください。

APIメソッドをapiエクスプローラ経由で実行している場合は、そのUserオブジェクトがあなたのメソッドに設定されるためにはまずGoogleユーザーとしてログインする必要があります。

要するに、ログとクライアントコードを確認してください。

関連する問題