GCEエンドポイントのAndroidでFirebase認証ライブラリによって作成されたクライアントトークンを認証しようとしています。Google Cloud Endpointがエンドポイントで非同期コードを実行する
これを行う方法のガイドはhere
を見出すことができる基本的に私は、エンドポイント(即ち、サーバーバックエンドコードではないアンドロイドコード)から、このコードスニペットを呼び出す必要があります。
私はそのコードを実行し、アンドロイドクライアントコードにユーザーを戻したいとしましょう。私はどうしたらいいですか?
これは意味をなさない私のサンプルコードです。しかし、それは私がしたいことを示しています!
@ApiMethod(name = "serverAuth")
public MyUser serverAuth(@Named("token") String token) {
FirebaseAuth.getInstance().verifyIdToken(token)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
String email = decodedToken.getEmail();
String name = decodedToken.getName();
Map<String, Object> claims = decodedToken.getClaims();
String claimString = "";
for (Object claim : claims.values()) {
claimString += claims.toString();
}
MyUser user = new MyUser(uid, email, name, claimString);
//How to return this user?
}
});
//This is compile error since user varriable does not exist here
return user;
}
GCEエンドポイントで非同期コードを実行する方法をGoogleで検索しました。しかし、それでどこにもいない。私が得意とするのは、実行されるまでブロックしてからユーザーを返すコード実行に関するものです。しかし、上記のような非同期コードがブロックされるようにコードする方法はありますか?
ありがとうございます!できます。しかし、私はユーザー変数が最終的なエラーを取得し、設定することはできません。私はそれを回避するためにクラスプライベート変数を宣伝します。これは単なるテストコードなので、乱雑さは許されます。しかし、私はまだ最終変数としてユーザー変数を行うためのより良い方法について聞くことに興味があります。 –
はい、あなたは正しいです - 最終変数の割り当ては禁止されています。十分にテストされていないサンプルをお手数です。しかし、私はクラス変数を使用することが最良の回避策ではないと思います。むしろ「コンテナ」または「ラッパー」を使用したいと思います。私の更新された答えを見てください。 – Benoit