5

Đây là câu hỏi đầu tiên của tôi ở đây, vì vậy hãy nhẹ nhàng. Là một phần của dự án trường đại học của tôi, tôi cần phát triển một ứng dụng Android cho phép tôi tải lên tệp và chia sẻ tệp với người dùng khác. Tôi mới tham gia lập trình Android (Tôi đã xem một số video mới bắt đầu của Android và phát triển các ứng dụng cơ bản để thực hành) và lần đầu tiên sử dụng điện toán đám mây làm nhà phát triển. Tôi đang sử dụng Amazon Web Services.Làm cách nào để tích hợp Amazon Cognito với Google Plus dành cho Android?

Tôi đã có mã cho phép tôi đăng nhập bằng tài khoản Google của mình và hiển thị Tên, ID email và ảnh tiểu sử của mình khi đăng nhập. Tôi muốn tích hợp nó với Amazon Cognito để tôi có thể nhận được id duy nhất Tôi có thể sử dụng để làm việc trên AWS hơn nữa. Làm thế nào để tôi nhận được khóa duy nhất đó cho mỗi người dùng đăng nhập vào ứng dụng?

Tôi đã xem một số hướng dẫn nhưng không thể hiểu cách tích hợp mã Cognito vào mã của tôi.

Đây là mã của tôi.

package com.unicloud.project; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.HashMap; 
import java.util.Map; 

import android.accounts.AccountManager; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentSender.SendIntentException; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.auth.GoogleAuthException; 
import com.google.android.gms.auth.GoogleAuthUtil; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks; 
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.plus.Account; 
import com.google.android.gms.plus.Plus; 
import com.google.android.gms.plus.model.people.Person; 

import com.amazonaws.auth.CognitoCachingCredentialsProvider; 
import com.amazonaws.regions.Regions; 


public class loginWithGooglePlus extends Activity implements OnClickListener, 
     ConnectionCallbacks, OnConnectionFailedListener { 
    private static final int RC_SIGN_IN = 0; 
    // Logcat tag 
    private static final String TAG = "loginWithGooglePlus"; 

    // Profile pic image size in pixels 
    private static final int PROFILE_PIC_SIZE = 400; 

    // Google client to interact with Google API 
    private GoogleApiClient mGoogleApiClient; 

    /** 
    * A flag indicating that a PendingIntent is in progress and prevents us 
    * from starting further intents. 
    */ 
    private boolean mIntentInProgress; 

    private boolean mSignInClicked; 

    private ConnectionResult mConnectionResult; 

    private SignInButton btnSignIn; 
    private Button btnSignOut, btnRevokeAccess; 
    private ImageView imgProfilePic; 
    private TextView txtName, txtEmail; 
    private LinearLayout llProfileLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login_with_google_plus); 

     btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in); 
     btnSignOut = (Button) findViewById(R.id.btn_sign_out); 
     btnRevokeAccess = (Button) findViewById(R.id.btn_revoke_access); 
     imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic); 
     txtName = (TextView) findViewById(R.id.txtName); 
     txtEmail = (TextView) findViewById(R.id.txtEmail); 
     llProfileLayout = (LinearLayout) findViewById(R.id.llProfile); 

     // Button click listeners 
     btnSignIn.setOnClickListener(this); 
     btnSignOut.setOnClickListener(this); 
     btnRevokeAccess.setOnClickListener(this); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this).addOnConnectionFailedListener(this) 
       .addApi(Plus.API, new Plus.PlusOptions.Builder().build()) // note the options 
       .addScope(Plus.SCOPE_PLUS_LOGIN).build(); 
    } 

    protected void onStart() { 
     super.onStart(); 
     mGoogleApiClient.connect(); 
    } 

    protected void onStop() { 
     super.onStop(); 
     if (mGoogleApiClient.isConnected()) { 
      mGoogleApiClient.disconnect(); 
     } 
    } 

    /** 
    * Method to resolve any signin errors 
    */ 
    private void resolveSignInError() { 
     if (mConnectionResult.hasResolution()) { 
      try { 
       mIntentInProgress = true; 
       mConnectionResult.startResolutionForResult(this, RC_SIGN_IN); 
      } catch (SendIntentException e) { 
       mIntentInProgress = false; 
       mGoogleApiClient.connect(); 
      } 
     } 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     if (!result.hasResolution()) { 
      GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 
        0).show(); 
      return; 
     } 

     if (!mIntentInProgress) { 
      // Store the ConnectionResult for later usage 
      mConnectionResult = result; 

      if (mSignInClicked) { 
       // The user has already clicked 'sign-in' so we attempt to 
       // resolve all 
       // errors until the user is signed in, or they cancel. 
       resolveSignInError(); 
      } 
     } 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int responseCode, 
            Intent intent) { 
     if (requestCode == RC_SIGN_IN) { 
      if (responseCode != RESULT_OK) { 
       mSignInClicked = false; 
      } 

      mIntentInProgress = false; 

      if (!mGoogleApiClient.isConnecting()) { 
       mGoogleApiClient.connect(); 
      } 
     } 
    } 

    @Override 
    public void onConnected(Bundle arg0) { 
     mSignInClicked = false; 
     Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 

     // Get user's information 
     getProfileInformation(); 

     // Update the UI after signin 
     updateUI(true); 

    } 

    /** 
    * Updating the UI, showing/hiding buttons and profile layout 
    */ 
    private void updateUI(boolean isSignedIn) { 
     if (isSignedIn) { 
      btnSignIn.setVisibility(View.GONE); 
      btnSignOut.setVisibility(View.VISIBLE); 
      btnRevokeAccess.setVisibility(View.VISIBLE); 
      llProfileLayout.setVisibility(View.VISIBLE); 
     } else { 
      btnSignIn.setVisibility(View.VISIBLE); 
      btnSignOut.setVisibility(View.GONE); 
      btnRevokeAccess.setVisibility(View.GONE); 
      llProfileLayout.setVisibility(View.GONE); 
     } 
    } 

    /** 
    * Fetching user's information name, email, profile pic 
    */ 
    private void getProfileInformation() { 
     try { 
      if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
       Person currentPerson = Plus.PeopleApi 
         .getCurrentPerson(mGoogleApiClient); 
       String personName = currentPerson.getDisplayName(); 
       String personPhotoUrl = currentPerson.getImage().getUrl(); 
       String personGooglePlusProfile = currentPerson.getUrl(); 
       String email = Plus.AccountApi.getAccountName(mGoogleApiClient); 

       Log.e(TAG, "Name: " + personName + ", plusProfile: " 
         + personGooglePlusProfile + ", email: " + email 
         + ", Image: " + personPhotoUrl); 

       txtName.setText(personName); 
       txtEmail.setText(email); 

       // by default the profile url gives 50x50 px image only 
       // we can replace the value with whatever dimension we want by 
       // replacing sz=X 
       personPhotoUrl = personPhotoUrl.substring(0, 
         personPhotoUrl.length() - 2) 
         + PROFILE_PIC_SIZE; 

       new LoadProfileImage(imgProfilePic).execute(personPhotoUrl); 

      } else { 
       Toast.makeText(getApplicationContext(), 
         "Person information is null", Toast.LENGTH_LONG).show(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int arg0) { 
     mGoogleApiClient.connect(); 
     updateUI(false); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_login_with_google_plus, menu); 
     return true; 
    } 

    /** 
    * Button on click listener 
    */ 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.btn_sign_in: 
       // Signin button clicked 
       signInWithGplus(); 
       break; 
      case R.id.btn_sign_out: 
       // Signout button clicked 
       signOutFromGplus(); 
       break; 
      case R.id.btn_revoke_access: 
       // Revoke access button clicked 
       revokeGplusAccess(); 
       break; 
     } 
    } 

    /** 
    * Sign-in into google 
    */ 
    private void signInWithGplus() { 
     if (!mGoogleApiClient.isConnecting()) { 
      mSignInClicked = true; 
      resolveSignInError(); 
     } 
    } 

    /** 
    * Sign-out from google 
    */ 
    private void signOutFromGplus() { 
     if (mGoogleApiClient.isConnected()) { 
      Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
      mGoogleApiClient.disconnect(); 
      mGoogleApiClient.connect(); 
      updateUI(false); 
     } 
    } 

    /** 
    * Revoking access from google 
    */ 
    private void revokeGplusAccess() { 
     if (mGoogleApiClient.isConnected()) { 
      Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
      Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient) 
        .setResultCallback(new ResultCallback<Status>() { 
         @Override 
         public void onResult(Status arg0) { 
          Log.e(TAG, "User access revoked!"); 
          mGoogleApiClient.connect(); 
          updateUI(false); 
         } 

        }); 
     } 
    } 

    /** 
    * Background Async task to load user profile picture from url 
    */ 
    private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public LoadProfileImage(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     protected void onPostExecute(Bitmap result) { 
      bmImage.setImageBitmap(result); 
     } 
    } 

} 

link có mã cho Android, nhưng tôi không chắc chắn nên thêm mã đó vào chương trình ở đâu. Tôi có nên tạo một lớp mới không? Xin hãy giúp tôi với điều đó.

Trả lời

2

Bạn đã xem số CognitoSync sample có sẵn trong GitHub chưa? Nó sẽ cung cấp cho bạn một số ý tưởng về cách tích hợp Cognito vào ứng dụng của bạn.

Các vấn đề liên quan