2017-12-09 17 views
0

私の問題は、私がエンドポイントv2に移行し、ある時点でGCM登録コードが機能しなくなったということです。エンドポイントで生成されたクライアントライブラリ

停止しましたか?

は、二行目は、私は郵便配達して手動で要求自分自身を送信するときに何が起こるかである

App Engine Log Viewer

:具体的には、生成されたクライアントライブラリは、この画像の一番上の行で提供フォームでPOSTリクエストを送信しようとしています(クエリ文字列ではなく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(); 
} 

私のコードが展開され、以下のコマンドで生成されている:

​​
+0

パラメータをクエリ文字列にする場合は、@ Nullableとマークする必要があります。 – saiyr

+0

私はそれがどのように送信されるか気にしません。私が持っている問題は404です。システムは間違ったクライアントライブラリを生成しているようですね?または、この場合nullableを追加して修正しますか? – Knossos

+0

@ saiyrあなたの助言にしたがって、私は '@ Nullable'を使用しました。うまく働いた。私の新しいコードは 'regService.register()。setRegId(regId).execute();'のようなものです。あなたが正しい方向に私を指摘したように、あなたが答えを出すなら、私はそれを喜んで受け入れます。 – Knossos

答えて

1

あなたはパラメータがクエリ文字列になりたい場合は、それは同様@Nullableマークする必要があります。これはパスからパラメータを取り除くことを指示します。古いフレームワークと新しいフレームワークの設定にはいくつかの不一致があるように見えますが、クエリパラメータには@Nullableを使用し、パスパラメータには省略してください。

関連する問題