2016-05-02 14 views
0

Googleドキュメントの助けを借りて、私は「Google Sign In」統合を実装しようとしています。私は開発者のコ​​ンソールプロジェクトを作成し、SHA1コードに貼り付け、google-services.jsonをダウンロードしてこれを私のプロジェクトに入れることからすべてを行いました。Google Plus Androidアプリとの統合

サインインボタンをクリックすると、画面がすばやく点滅し、実際に何も起こりません。 logcatを表示

、すべてのそれは私のコードは、単にGoogleの開発者向けドキュメントをオフに基づいています

05-02 20:15:58.433 18625-18625/com.listcoapps.ukeen D/SignInActivity: handleSignInResult:false 
05-02 20:15:58.434 18625-18625/com.listcoapps.ukeen I/System.out: Status{statusCode=INTERNAL_ERROR, resolution=null} 

であると言います。

SignInActivity.Java

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 

import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.OptionalPendingResult; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Status; 

/** 
* Activity to demonstrate basic retrieval of the Google user's ID,  email address, and basic 
* profile. 
*/ 
public class SignInActivity extends AppCompatActivity implements 
    GoogleApiClient.OnConnectionFailedListener, 
    View.OnClickListener { 

private static final String TAG = "SignInActivity"; 
private static final int RC_SIGN_IN = 9001; 

private GoogleApiClient mGoogleApiClient; 
private TextView mStatusTextView; 
private ProgressDialog mProgressDialog; 
private boolean mIntentInProgress; 
private ConnectionResult mConnectionResult; 



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

    // Views 
    mStatusTextView = (TextView) findViewById(R.id.status); 

    // Button listeners 
    findViewById(R.id.sign_in_button).setOnClickListener(this); 
    findViewById(R.id.sign_out_button).setOnClickListener(this); 
    findViewById(R.id.disconnect_button).setOnClickListener(this); 

    // [START configure_signin] 
    // Configure sign-in to request the user's ID, email address, and basic 
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 
    // [END configure_signin] 

    // [START build_client] 
    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
    // [END build_client] 

    // [START customize_button] 
    // Customize sign-in button. The sign-in button can be displayed in 
    // multiple sizes and color schemes. It can also be contextually 
    // rendered based on the requested scopes. For example. a red button may 
    // be displayed when Google+ scopes are requested, but a white button 
    // may be displayed when only basic profile is requested. Try adding the 
    // Scopes.PLUS_LOGIN scope to the GoogleSignInOptions to see the 
    // difference. 
    SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
    signInButton.setSize(SignInButton.SIZE_STANDARD); 
    signInButton.setScopes(gso.getScopeArray()); 
    // [END customize_button] 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
    if (opr.isDone()) { 
     // If the user's cached credentials are valid, the OptionalPendingResult will be "done" 
     // and the GoogleSignInResult will be available instantly. 
     Log.d(TAG, "Got cached sign-in"); 
     GoogleSignInResult result = opr.get(); 
     handleSignInResult(result); 
    } else { 
     // If the user has not previously signed in on this device or the sign-in has expired, 
     // this asynchronous branch will attempt to sign in the user silently. Cross-device 
     // single sign-on will occur in this branch. 
     showProgressDialog(); 
     opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
      @Override 
      public void onResult(GoogleSignInResult googleSignInResult) { 
       hideProgressDialog(); 
       handleSignInResult(googleSignInResult); 
      } 
     }); 
    } 
} 

// [START onActivityResult] 
@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 == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 
} 
// [END onActivityResult] 

// [START handleSignInResult] 
private void handleSignInResult(GoogleSignInResult result) { 
    Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
    if (result.isSuccess()) { 
     // Signed in successfully, show authenticated UI. 
     GoogleSignInAccount acct = result.getSignInAccount(); 
     mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); 
     updateUI(true); 
    } else { 
     // Signed out, show unauthenticated UI. 
     updateUI(false); 
     System.out.println(result.getStatus()); 
    } 
} 
// [END handleSignInResult] 

// [START signIn] 
private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 
} 
// [END signIn] 

// [START signOut] 
private void signOut() { 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        // [START_EXCLUDE] 
        updateUI(false); 
        // [END_EXCLUDE] 
       } 
      }); 
} 
// [END signOut] 

// [START revokeAccess] 
private void revokeAccess() { 
    Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        // [START_EXCLUDE] 
        updateUI(false); 
        // [END_EXCLUDE] 
       } 
      }); 
} 
// [END revokeAccess] 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
    // be available. 
    Log.d(TAG, "onConnectionFailed:" + connectionResult); 
} 

private void showProgressDialog() { 
    if (mProgressDialog == null) { 
     mProgressDialog = new ProgressDialog(this); 
     mProgressDialog.setMessage(getString(R.string.loading)); 
     mProgressDialog.setIndeterminate(true); 
    } 

    mProgressDialog.show(); 
} 

private void hideProgressDialog() { 
    if (mProgressDialog != null && mProgressDialog.isShowing()) { 
     mProgressDialog.hide(); 
    } 
} 

private void updateUI(boolean signedIn) { 
    if (signedIn) { 
     findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
     findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE); 
    } else { 
     mStatusTextView.setText(R.string.signed_out); 

     findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
     findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE); 
    } 
} 
private void resolveSignInError() { 
    if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      //startIntentSenderForResult(mConnectionResult.getIntentSender(),RC_SIGN_IN, null, 0, 0, 0); 
      mConnectionResult.startResolutionForResult(this,RC_SIGN_IN); 
     } catch (IntentSender.SendIntentException e) { 
      // The intent was canceled before it was sent. Return to the default 
      // state and attempt to connect to get an updated ConnectionResult. 
      mIntentInProgress = false; 
      mGoogleApiClient.connect(); 
     } 
    } 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.sign_in_button: 
      signIn(); 
      break; 
     case R.id.sign_out_button: 
      signOut(); 
      break; 
     case R.id.disconnect_button: 
      revokeAccess(); 
      break; 
    } 
} 
} 

これが動作しない理由を私は本当にうまくできず、いくつかの専門知識は、本当に役立つだろう! ありがとうございます。

+0

あなたのアイデアを取得し、簡単にグーグルを統合するこのチュートリアルを試してみてくださいプラスプロジェクトにあなたの問題.. – Bharatesh

答えて

0

アプリにgoogle plus loginを統合すると、すべてのユーザーの詳細をワンショットで取得できます。ログインだけでなく、自分のg +アカウントに投稿する、サークルのリストを取得する、友だちリストを取得するなどの他の操作を行うことができます。 G +ログインの統合の主な利点は、登録プロセスの最も簡単な方法である&をすばやく提供することで、より多くのユーザーをアプリに誘導できることです。

それが再び再接続しようと失敗したときに...これは解決することがあり

Google Plus and Login Integration to android App それとも

Try from developer site

+0

こんにちは@Attaullah、そのチュートリアルは本当に時代遅れだとまだ日食を指している... –

+0

しかし、ロジックは完全にsamですe。私はまた、アンドロイドスタジオ2.1で私のアプリでこのコードを使用しました。 – Attaullah

+0

デベロッパーサイトを試すhttps://developers.google.com/+/mobile/android/getting-started – Attaullah

関連する問題