2016-03-26 30 views
1

Amazon S3 sunucuları ile iletişimi içeren bir Android uygulaması üzerinde çalışıyorum. Uygulama, Birlik'te geliştirilmekte ve kullanıcıların, Google Hesapları ile kimlik doğrulaması yapabilmeleri için bir sistem eklemek ve Cognito aracılığıyla S3 sunucusuna erişmek için bu kimlik bilgilerini kullanmak istiyorum. Bunu yapmak için Unity'de bir Google Authenticator sistemi uygulamaya koymam gerekiyor ve bunun nasıl yapılacağını anlamakta zorlanıyorum. Şu anki yaklaşımım, Google Sign In API'sine erişmek için Android Studio'lu bir Eklenti oluşturmayı içeriyor. Ancak, programı her çalıştırdığımda bir NoClassDefFoundError istisnası atar. İşteAndroid Unity Plugin'de Google Kimlik Doğrulaması

03-25 20:45:34.968 25581-25610/? D/MainActivity: Authenticating... 
03-25 20:45:35.086 25581-25610/? I/Unity: AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/api/signin/GoogleSignInOptions$Builder; 
              java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/api/signin/GoogleSignInOptions$Builder; 
               at com.unityplugin.MainActivity.authenticate(MainActivity.java:55) 
               at com.unity3d.player.UnityPlayer.nativeRender(Native Method) 
               at com.unity3d.player.UnityPlayer.a(Unknown Source) 
               at com.unity3d.player.UnityPlayer$b.run(Unknown Source) 
              Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.signin.GoogleSignInOptions$Builder" on path: DexPathList[[zip file "/data/app/com.unityplugin-2/base.apk"],nativeLibraryDirectories=[/data/app/com.unityplugin-2/lib/arm, /data/app/com.unityplugin-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]] 
               at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
               at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
              at java.lang.ClassLoader.loadCla 

benim Android kod (UnityPlayer Etkinlik) ilgili kısmı olan: İşte benim logcat olduğunu

public void authenticate() { 

    Log.d(TAG, "Authenticating..."); 
    // Configure sign-in to request the user's ID, email address, and basic 
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
    //HERE IS THE ERROR (LINE 55) 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(Constants.GOOGLE_CLIENT_ID) 
      .requestEmail() 
      .build(); 

    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .addConnectionCallbacks(new ConnCallBack()) 
      .addOnConnectionFailedListener(new FailedListener()) 
      .build(); 

    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 

} 

Ben Kompakt Aktivite içinde doğal APK bunu çalıştırmak eğer kod çalışır ancak Bir eklenti haline getirdiğimde ve Unity ile çalıştırdığımda, hatayı alıyorum. Birlik, ben bu kod ile kimlik doğrulaması() yöntemini çağırın:

//Get Activity 
    AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 

    //Call function authenticate 
    currentActivity.Call("authenticate"); 

Ben com.google.android.gms.play-hizmetler-yetkilisi 8.4.0 harici içinde classes.jar dosyası dahil denedi Android Studio'da sahip olduğum kütüphane, ancak çalışmadı. Ayrıca bir eklenti yapmak yerine kimlik doğrulamasını doğrudan Birlik içinde uygulamayı düşündüm, ancak bunun gibi bir şey yapmakla ilgili gördüğüm tüm bilgiler Google Play Oyunlar'la ilgilidir ve Google Play Oyunlar API'sı uygulamanıza dahil edilmek istemiyorum. Kullanıcıların S3 sunucusuna erişebilmeleri için Google hesabına giriş yapmasına izin vermek istiyorum. Birisi Birlik ile benzer bir özellik uyguladıysa ve bunu yapmanın daha iyi bir yolunu biliyorsa, ben hepim kulaklarım. Uygulamamda Google Kimlik Doğrulaması'nı etkinleştirmenin farklı bir yolunu kullanmaya açık olduğum için tek şart, bunun Birlik içinde yapılması gerektiğidir.

Şimdiden teşekkürler! Ben kullanıcının kimliğini doğrulamak için bu kodu kullanarak benim sorun çözüldü

cevap

0

:

  • android-destek-v4
  • : Ayrıca

    GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 
    AccountManager am = AccountManager.get(this); 
    Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, 
         "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID"); 
    Map<String, String> logins = new HashMap<String, String>(); 
    logins.put("accounts.google.com", token); 
    credentialsProvider.setLogins(logins); 
    

    , ben JAR dosyaları şeklinde aşağıdaki kitaplıkları eklemek zorunda

  • google-play-services
+1

Bana bu kodu tam olarak yerleştirdiğiniz yeri gösterebilir misiniz? Tam olarak aynı sorunu yaşıyorum: Kullanıcıyı Google hesaplarıyla Amazon S3'te oturum açmaya çalışmak. Bunu işe nasıl aldın? Bir yardım eli için minnettar olurum! –

İlgili konular