5

Questa è la mia prima domanda qui, quindi per favore sii gentile. Come parte del progetto della mia università, ho bisogno di sviluppare un'app per Android che mi permetta di caricare file e condividere file con altri utenti. Sono nuovo alla programmazione Android (ho guardato alcuni video per principianti Android e sviluppato app di base per la pratica) e la prima volta ho usato il cloud computing come sviluppatore. Sto usando Amazon Web Services.Come integrare Amazon Cognito con Google Plus per Android?

Ho il codice che mi consente di accedere utilizzando il mio account Google e mostra il mio nome, l'ID e-mail e la foto del profilo una volta effettuato l'accesso. Voglio integrarlo con Amazon Cognito in modo da ottenere l'ID univoco che Posso usare ulteriormente per lavorare su AWS. Come posso ottenere quella chiave univoca per ogni utente che accede all'app?

Ho guardato alcuni tutorial ma non riesco a capire come integrare il codice Cognito nel mio codice.

Ecco il mio codice.

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); 
     } 
    } 

} 

Questa link ha il codice per Android, ma non sono sicuro dove aggiungere che il codice del programma. Dovrei creare una nuova classe? Per favore aiutami con quello.

risposta

2

Hai guardato lo CognitoSync sample disponibile in GitHub? Dovrebbe darti alcune idee su come integrare Cognito nella tua applicazione.

Problemi correlati