認証とアプリエンジン、それについて読むべきことがたくさんありますが、多くは時代遅れのようです!
ここでは、「GoogleAccountCredential.usingAudience」について説明していますが、最近はGoogleAuthUtilを使用する必要があります(私が知る限り、間違っている場合は修正してください)。
Androidアプリ(および将来的にはiOSアプリ)のバックエンドとしてアプリエンジンをセットアップしようとしています。
私はAndroidStudioを使用しており、「新しいモジュール」を使用して、そこでクラウドメッセージングを備えたアプリエンジンを選択しました。
単純なエンドポイントを作成し、そこに関数があります。ここにいくつかのコードがあります。
public class ReviewEndpoint {
// Make sure to add this endpoint to your web.xml file if this is a web application.
private static final Logger LOG = Logger.getLogger(ReviewEndpoint.class.getName());
/**
* This method gets the <code>Review</code> object associated with the specified <code>id</code>.
* @param id The id of the object to be returned.
* @return The <code>Review</code> associated with <code>id</code>.
*/
@ApiMethod(name = "getReview")
public Review getReview(@Named("id") Long id) {
// Implement this function
Review r = new Review();
r.setData("test!");
ご覧のとおり、これはAndroidStudioによって適切に生成されています。'review'オブジェクトを作成し、最後に返すようないくつかのstufを実装しました。
Android側では、次のことができます。
ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null);
ReviewEndpoint ep = b.build();
Review review = ep.getReview(1L).execute();
data = review.getData();
はい、「テスト」を取得します。:)
今、私はこれを認証してもらいたいです。どのユーザーが何を書いたか知りたいので、後でGMailアカウントとFacebookを使うつもりでした。
ここで私は立ち往生しています。Androidのユーザーからトークンを取得できます。
token = GoogleAuthUtil.getToken(MainScreenActivity.this, mAccount.name, "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile");
次に、このトークンを資格情報としてリクエストに追加できます。
Credential cr = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(token);
ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), cr);
次に、アプリエンジンでユーザー情報を取得しようとしましたが、どうすればよいですか?「ベアラー」として提供されますか?このベアラートークンを取得するにはどうすればよいですか?次に、サーバー上のデータを取得するためにAPIリクエストを実行する必要がありますか?
これは動作しません:
OAuthService service = OAuthServiceFactory.getOAuthService();
try {
User user = service.getCurrentUser();
誰かが私に頭を上げることができますか?
それで、ついに、今日、私はそれをする方法を見つけました!私は以前にこれについてStackoverflowについて質問があり、答えはありませんでしたが、サイトへのこれらは私に答えを与えました:
https://developers.google.com/appengine/docs/java/endpoints/auth
https://developers.google.com/appengine/docs/java/endpoints/consume_android
1つ目は、アプリエンジン側で何をする必要があるかを示しています。2番目のページでは、資格情報を取得する方法を説明します。私はかなり近かった。2番目のリンクに記載されているbuild.gradleファイルの調整が必要かどうかはわかりません。App Engineに追加したもの:
@Api(name = "reviewEndpoint", version = "v1", ...<<some more stuff here >>
scopes = {Constants.EMAIL_SCOPE},
clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE})
次に、資格情報を取得します。
// Initialize the scope using the client ID you got from the Console.
final String scope = "server:client_id:" + Constants.WEB_CLIENT_ID;
credential = GoogleAccountCredential.usingAudience(activity,scope);
ユーザーの電子メールアドレスを追加する必要があります。
credential.setSelectedAccountName("[email protected]");
アカウントピッカーを使用して電子メールアドレスを取得できます(リンクをたどると例も表示されます)
そして次に。資格情報を使用してエンドポイントに電話をかけると、Playサービスがユーザーを検証すると思います。これは、デバイスにログインしていない電子メールを使用すると機能しないためです。次のコードはGoogleAuthIOExceptionをスローします:
ReviewEndpoint.Builder b = new ReviewEndpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), id_token);
ReviewEndpoint ep = b.build();
Review review;
review = ep.getReview(1L).execute();
テストのために、サーバー側で取得した電子メールアドレスを文字列としてレビューオブジェクトに入力しました。ユーザーオブジェクトがnullではなく、電子メールアドレスが表示されました。わぁ!私はあなたに言うのを忘れました、あなたはアプリエンジン側でユーザー引数が必要です。上記の「getReview」呼び出しに「user」引数が表示されていなくても、AppEngineによって追加されます。
これが私のgetReviewの外観です。
@ApiMethod(name = "getReview")
public Review getReview(@Named("id") Long id, User user) {
// Implement this function
Review r = new Review();
r.setData("user == " + (user == null ? "NULL " : user.toString()));
これが誰かを助けることを願っています
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加