Google Войти с помощью Android Studio - PullRequest
0 голосов
/ 05 декабря 2018

Я делаю вход в учетную запись Google, которую я использовал для создания файла JSON.Также я интегрировал файл JSON с моим проектом. Но я получаю исключение, что account.getDisplayName генерирует исключение nullPointException.

enter image description here

Google войдите в код:

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener,GoogleApiClient.OnConnectionFailedListener {
private SignInButton signInButton;
private GoogleApiClient client;
private static final int REQ_CODE = 9001;

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

    signInButton = (SignInButton)findViewById(R.id.btn_signin);

    GoogleSignInOptions options = new 
 GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestProfile()
            .requestEmail()
            .build();
    client = new GoogleApiClient.Builder(this).
            enableAutoManage(this,this).
            addApi(Auth.GOOGLE_SIGN_IN_API,options).build();

    signInButton.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn_signin:
            signIn();
            break;
    }
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}
    public void signIn(){
    Intent intent = Auth.GoogleSignInApi.getSignInIntent(client);
    startActivityForResult(intent,REQ_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable 
Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQ_CODE){
        GoogleSignInResult result = 
Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleResult(result);
    }
}

 private void handleResult(GoogleSignInResult result) {
    if (result.isSuccess()){
        GoogleSignInAccount account = result.getSignInAccount();
        String name = account.getDisplayName();
            String email = account.getEmail();
            String image = account.getPhotoUrl().toString();
    }
}
}

и вот моя скомпилированная библиотека:

implementation 'com.google.android.gms:play-services-auth:16.0.1'

, пожалуйста, укажите, где я делаю ошибку

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Если вы хотите, чтобы "UserName, Email Id, URL профиля, Google Id" от Google.

Вы допустили ошибку с "GoogleSignInOptions".Пожалуйста, замените мои GoogleSignInOptions на ваш код GoogleSignInOptions, чтобы решить вашу проблему.

Тогда Ваше решение здесь -> Вам следует следовать приведенному ниже коду.

    private GoogleApiClient mGoogleApiClient;
    private static final int RC_SIGN_IN = 9001;
    private LinearLayout googleBtn;

        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           View view = inflater.inflate(R.layout.fragment_login, container, false);
           googleBtn = view.findViewById(R.id.googleBtn);


           GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .requestIdToken(getString(R.string.default_web_client_id))
                    .build();

           mGoogleApiClient = new GoogleApiClient.Builder(Objects.requireNonNull(getActivity()))
                .enableAutoManage(getActivity(), 0, connectionResult -> {
                    Snackbar.make(googleBtn, "Connection failed..", Snackbar.LENGTH_SHORT).show();
                    Log.e(TAG, "Google connection Error: " + connectionResult.getErrorMessage());
                })
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                    @Override
                    public void onConnected(@Nullable Bundle bundle) {
                        //Log.e(TAG,"mGoogleApiClient is connected");
                        mGoogleApiClient.clearDefaultAccountAndReconnect();
                    }

                    @Override
                    public void onConnectionSuspended(int i) {

                    }
                })
                .build();
            }

        public void onClick(View v) {
        switch (v.getId()) {
               case R.id.googleBtn:
                       //stopAutoManage first otherwise throws exception Already managing a GoogleApiClient with id 0
                         if (mGoogleApiClient != null) {
        mGoogleApiClient.stopAutoManage(Objects.requireNonNull(getActivity()));
                         }
                loginWithGoogle();
                break;
         }

    public void loginWithGoogle() {
        Log.e(TAG, "is connected? " + mGoogleApiClient.isConnected());

        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        Objects.requireNonNull(getActivity()).startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }


public void handleSignInResult(GoogleSignInResult result) {

        if (result.isSuccess()) {
            GoogleSignInAccount acct = result.getSignInAccount();
            // Get account information

            if (acct != null) {
                Name = acct.getDisplayName();
                if (acct.getEmail() != null) {
                    Email = acct.getEmail();
                } else {
                    Email = "";
                }

                SocialUserId = acct.getId();
                Gender = "";

                String idToken = acct.getIdToken();
                String profileURL = Objects.requireNonNull(acct.getPhotoUrl()).toString();

                String status = "Status: \nFullname: " + Name + "\n Email: " + Email + "\nProfile URI: " + profileURL;
                Log.i(TAG, "Google signin " + status);
                Log.i(TAG, "ID Token: " + idToken);
                Log.i(TAG, "ID: " + acct.getId());

                //TODO Temporary "acct.getCompId()" pass "idToken"

                checkIsUserExists();
            }

        } else {
            hideProgressBar();
            Log.e(TAG, "Failed!! Google Result " + result.getStatus());

            int status_code = result.getStatus().getStatusCode();
            switch (status_code) {
                case GoogleSignInStatusCodes.SIGN_IN_CANCELLED:
                    Snackbar.make(googleBtn, "Google sign in has been cancelled.", Snackbar.LENGTH_SHORT).show();
                    break;
                case GoogleSignInStatusCodes.NETWORK_ERROR:
                    Snackbar.make(googleBtn, "Application is unable to connect with internet", Snackbar.LENGTH_SHORT).show();
                default:
                    //AppUtils.showSnackBar(LandingActivity.this, btnLogin, GoogleSignInStatusCodes.getStatusCodeString(result.getStatus().getStatusCode()), R.integer.snackbar_duration_3sec);
                    break;
            }
        }
    }
0 голосов
/ 05 декабря 2018

Попробуйте это:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == REQ_CODE) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);

            // G+
            Person person  = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
            System.out.println("Display Name: " + person.getDisplayName());
            System.out.println("Gender: " + person.getGender());
            System.out.println("AboutMe: " + person.getAboutMe());
            System.out.println("Birthday: " + person.getBirthday());
            System.out.println("Current Location: " + person.getCurrentLocation());
            System.out.println("Language: " + person.getLanguage());

        }
    }
...