2016-03-30 8 views
9

Googleログインをアプリに実装しています。ログイン自体は大丈夫動作しているようですが、私は要求した瞬間のいずれかのユーザーの電子メールまたはIDトークンが、私はこれは、コードIでログに次のスタックトレースとStatus{statusCode=unknown status code: 12500, resolution=null}Googleとのログイン時にSignInConfigurationのClassNotFoundExceptionが発生する

03-30 13:59:09.821 3634-4322/? E/Parcel: Class not found when unmarshalling: com.google.android.gms.auth.api.signin.internal.SignInConfiguration 
             java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration 
              at java.lang.Class.classForName(Native Method) 
              at java.lang.Class.forName(Class.java:309) 
              at java.lang.Class.forName(Class.java:273) 
              at android.os.Parcel.readParcelableCreator(Parcel.java:2281) 
              at android.os.Parcel.readParcelable(Parcel.java:2245) 
              at android.os.Parcel.readValue(Parcel.java:2152) 
              at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) 
              at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
              at android.os.BaseBundle.getString(BaseBundle.java:918) 
              at android.content.Intent.getStringExtra(Intent.java:5767) 
              at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2365) 
              at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1848) 
              at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:5809) 
              at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:5593) 
              at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:142) 
              at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3786) 
              at android.os.Binder.execTransact(Binder.java:461) 
              Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.signin.internal.SignInConfiguration" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]] 
              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
              at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
              at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
              at java.lang.Class.classForName(Native Method)  
              at java.lang.Class.forName(Class.java:309)  
              at java.lang.Class.forName(Class.java:273)  
              at android.os.Parcel.readParcelableCreator(Parcel.java:2281)  
              at android.os.Parcel.readParcelable(Parcel.java:2245)  
              at android.os.Parcel.readValue(Parcel.java:2152)  
              at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)  
              at android.os.BaseBundle.unparcel(BaseBundle.java:221)  
              at android.os.BaseBundle.getString(BaseBundle.java:918)  
              at android.content.Intent.getStringExtra(Intent.java:5767)  
              at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:2365)  
              at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:1848)  
              at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:5809)  
              at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:5593)  
              at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:142)  
              at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3786)  
              at android.os.Binder.execTransact(Binder.java:461)  
              Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration 
              at java.lang.Class.classForName(Native Method) 
              at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
              at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
              at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
                ... 18 more 
              Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

としてGoogleSignInResultからステータスを確認しますユーザーのログインに使用しています:

public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 

    private final static String TAG = SignInActivity.class.getSimpleName(); 

    protected final static int REQUEST_CODE_GOOGLE_LOGIN = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sign_in); 

     GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
//    .requestEmail() // Causes ClassNotFoundException for SignInConfiguration 
//    .requestIdToken(getString(R.string.google_server_client_id)) // Causes ClassNotFoundException for SignInConfiguration 
       .build(); 
     final GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions) 
       .build(); 

     SignInButton signInButton = (SignInButton) findViewById(R.id.signInButton); 
     signInButton.setScopes(googleSignInOptions.getScopeArray()); 
     signInButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); 
       startActivityForResult(signInIntent, REQUEST_CODE_GOOGLE_LOGIN); 
      } 
     }); 

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

    protected void handleGoogleSignInResult(GoogleSignInResult googleSignInResult) { 
     Logging.debug(TAG, "handleGoogleSignInResult(" + googleSignInResult + ")"); 
     if (googleSignInResult.isSuccess()) { 
      GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount(); 
      final String idToken = googleSignInAccount.getIdToken(); 
      if (idToken != null) { 
       Toast.makeText(SignInActivity.this, "Successfully logged in.", Toast.LENGTH_SHORT).show(); 
       // Do fun stuff here 
      } else { 
       Log.e(TAG, "ID token was null. Unable to sign in user."); 
      } 
     } else { 
      Log.e(TAG, "Failed to sign in with Google. Status:" + googleSignInResult.getStatus()); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.e(TAG, "onConnectionFailed(" + connectionResult + ")"); 
    } 

} 

私は間違っていますか?

私は、次のGradleの依存関係を使用しています:

compile 'com.google.android.gms:play-services-auth:8.4.0' 

ログに記録された例外は、別のプロセスから来ているようです。私はクラスがアクセス可能であることを確かめるために、com.google.android.gms.auth.api.signin.internal.SignInConfiguration私の活動をインスタンス化しようと試みました。

これは、proguardを使用しないデバッグビルドで発生しています。

+0

可能な複製http://stackoverflow.com/questions/33583326/new-google-sign-in-android – abielita

+0

@abielita:その質問についてのヒントをありがとうございます。私は答えを追求し、彼らが私を助けてくれるかどうかを見ます。 :) –

答えて

5

これは赤ちゃんかもしれないと思います。私はまったく同じスタックトレースを持っており、原因を特定するのに時間をかけました。私はそれが無視される可能性がサムスンの唯一の例外(彼らは輸送中の何かや何かを調べている)かもしれないことを指摘しながら、同様の投稿に出くわしました。確かに、私はHTCOneデバイスで試してみましたが、例外はもう現れませんでした。私はまだ全体的なGoogle Authの問題は同じでしたが、少なくとも私にとってはSHA/Cert/Account/Signingに関連する実際の問題に移行することができました。とにかく -

+0

うん、それはあなたが正しいように思える。これは確かにサムスンのデバイス上で、私は間違ったサーバーのクライアントIDを使用していた。ありがとうございました。 :) –

+1

ポイントSHA /証明書/アカウント/署名のためにありがとう – Killer

+0

ありがとう – Jenix

2

(何かがとにかくをチェックする)これが役に立てば幸い私の代わりにキーツールを使用して生成した署名キーのOAuth 2.0のクライアントID SHA-1指紋"App signing Key"を置くことによって私の問題を解決しました。 Google Playコンソールで[Google Play App Signing]にチェックを付けると、通常の署名付きキーは機能しません。 Google Playコンソール>アプリ署名>アプリ署名証明書でアプリ署名キーを確認し、SHA-1証明書の指紋を貼り付けてGoogle APIコンソールのOAuth 2.0クライアントIDに貼り付けます。それは私のために働いた!

関連する問題