2017-12-11 5 views
1

Unity 2017.2.0f3 및 Firebase SDK 4.2.1에서 작동 중입니다. Unity Editor 환경에서 PC에서 실행하면 apk로 빌드하고 Android 디바이스에서 실행할 때 Firebase가 오류.Firebase를 사용하는 Unity 2017 4.2. 앱은 Unity Editor에서 작동하지만 Android에서 앱을 실행하면 실패합니다. Firebase connection error

내 코드 : 나는 연결하는 서비스 계정을 사용하고

FirebaseApp.DefaultInstance.SetEditorP12FileName("xxxxxxxxxxxxxxx-admin-sdk.p12"); 
FirebaseApp.DefaultInstance.SetEditorServiceAccountEmail("xxxxxxxxxxxxxxx.iam.gserviceaccount.com"); 
    FirebaseApp.DefaultInstance.SetEditorP12Password("notasecret"); 
    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { 
    dependencyStatus = task.Result; 
    if (dependencyStatus == DependencyStatus.Available) { 
    InitializeFirebase(); 
    } else { 
    Debug.LogError(
    "Could not resolve all Firebase dependencies: " + dependencyStatus); 
    } 
    }); 

내가 응용 프로그램을 실행할 때, 그것은 유니티 에디터에서 완벽하게 작동합니다.

11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.ValueEventRegistration:FireCancelEvent(DatabaseError) 
11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.View.CancelEvent:Fire() 
11-22 21:23:58.819: E/Unity(5835): Firebase.Database.Internal.Core.View.Runnable30:Run() 

오류가이 링크를보고 : https://github.com/firebase/quickstart-unity/issues/120

나는 APK를 생성하고 안드로이드 장치에 설치할 때이 응용 프로그램을 실행할 때 (삼성 S7을, 7.0 안드로이드)에서 로그 캣 날이 오류를 줄

아무 도움도 환영합니다 ....

답변

1

글쎄 ... 나는 실수를 몇 마침내 만들었습니다. 어떤 이유로 Firebase Real-Time Database에서 데이터를 읽고 쓰는 프로젝트에 서비스 계정을 설정하는 것만으로는 충분하지 않습니다. 게임을 실행할 때 Unity Editor에서 작동합니다. 하지만 모바일 장치 (Android)에서 APK를 종료 할 때 App (Game)은 유효한 Firebase 사용자를 인증해야합니다.

Firebase 콘솔에 EMAIL/PASSWORD라는 사용자 서명 방법을 만들었습니다. 그럼 난 Firabase Authetication 유니티 패키지를 사용하여 애플 리케이션에 인증을 한, 그리고 Voila ... 그것은 작동합니다.

: 사용자가 중포 기지에서 인증 된 경우 는 중포 기지 시스템이 자동으로도 유니티 에디터와 모바일 장치에서, TRUE

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    } 
} 

https://firebase.google.com/docs/database/unity/start

내 작업 코드에 실시간 데이터베이스 규칙을 변경

private Firebase.Auth.FirebaseAuth auth; 
private Firebase.Auth.FirebaseUser newUser; 

void Awake() { 
    //Using Firebase SDK 
    //This is needed only for the unity editor 
    FirebaseApp.DefaultInstance.SetEditorP12FileName("xxxxxxxxxxxxxxxxxxx-admin-sdk.p12"); 
    FirebaseApp.DefaultInstance.SetEditorServiceAccountEmail("[email protected]"); 
    FirebaseApp.DefaultInstance.SetEditorP12Password("notasecret"); 
    //-------------------------------------- 

    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { 
     dependencyStatus = task.Result; 
     if (dependencyStatus == DependencyStatus.Available) { 
      InitializeFirebase(); 
     } else { 
      Debug.LogError(
       "Could not resolve all Firebase dependencies: " + dependencyStatus); 
     } 
    }); 
} 

// Initialize the Firebase database: 
protected virtual void InitializeFirebase() { 
    FirebaseApp app = FirebaseApp.DefaultInstance; 
    // NOTE: You'll need to replace this url with your Firebase App's database 
    // path in order for the database connection to work correctly in editor 

    //This is needed only for the unity editor 
    app.SetEditorDatabaseUrl("https://xxxx.yyyyyyyyy.com/"); 
    if (app.Options.DatabaseUrl != null) app.SetEditorDatabaseUrl(app.Options.DatabaseUrl); 
    //-------------------------------------- 
    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; 
    auth.SignInWithEmailAndPasswordAsync("[email protected]", "strongpassword").ContinueWith(task => { 
     if (task.IsCanceled) { 
      Debug.LogError("SignInWithEmailAndPasswordAsync was canceled."); 
      return; 
     } 
     if (task.IsFaulted) { 
      Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception); 
      return; 
     } 
     Firebase.Auth.FirebaseUser newUser = task.Result; 
     Debug.LogFormat("User signed in successfully: {0} ({1})", 
      newUser.DisplayName, newUser.UserId); 
     //Getting client id for FB using device id 
     FirebaseDatabase.DefaultInstance.GetReference("node1").Child(node2).Child("node3") 
     .ValueChanged += HandleChanged; 
    }); 
} 

참고 : 암호는 강력해야합니다. destroy 메소드에서 로그 아웃하는 것을 잊지 마십시오. 그렇지 않으면 다음에 연결할 때 오류가 발생합니다.

auth.SignOut();