2014-12-08 22 views
5

Tôi đang cố gắng thêm thành tích vào trò chơi của mình bằng cách sử dụng các dịch vụ trò chơi của google play. Hoạt động trong trò chơi của tôi chịu trách nhiệm cho thành tích đã mở rộng BaseGameActivity và nó gọi beginUserInitiatedSignIn khi nó phải cung cấp thành tích, vì vậy người dùng phải đăng nhập, nhưng tại thời điểm tôi mở khóa thành tích cho người dùng, tôi giữ nhận được "java.lang.IllegalStateException: GoogleApiClient chưa được kết nối". Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai? Dưới đây là đoạn code chịu trách nhiệm mở khóa thành tích (đó là trong lớp mà kéo dài BaseGameActivity, từ BaseGameUtils):java.lang.IllegalStateException: GoogleApiClient chưa được kết nối

private void darConquistaDerrubouArvore(int numeroDeAcertos) { 
    // start the asynchronous sign in flow 
    mSignInClicked = true; 
    mGoogleApiClient.connect(); 
    if(numeroDeAcertos <= 40) 
    { 
     try 
     { 
       beginUserInitiatedSignIn(); 
       Games.Achievements.unlock(gameHelper.getApiClient(), "CgkIs_27xcoSEAIQAQ"); 
       Log.i("TelaModoCasual", "usuário não está logado"); 
       this.onSignInFailed(); 

     } 
     catch(Exception exc) 
     { 
      exc.printStackTrace(); 
      this.onSignInFailed(); 
     } 
    } 

} 
+0

Xem [bài này] (http://stackoverflow.com/questions/24474986/android-google-play-games-services-connection-error-java- lang-illegstateexc). – frenchDolphin

+0

yea, tôi thấy bài đăng này, nhưng tôi không muốn có nút đăng nhập, tôi muốn ứng dụng của tôi cố gắng đăng nhập vào người dùng ngay lập tức. Nó là bất khả thi? –

+0

Vâng, rất tiếc, bạn cần yêu cầu sự cho phép của người dùng trước khi đăng nhập, vì việc đăng nhập có nghĩa là ứng dụng của bạn nhận được tất cả các loại quyền mới. Đó là lý do tại sao Android buộc bạn phải hiển thị hộp thoại trước. – frenchDolphin

Trả lời

2

Hãy nhìn vào các mẫu cơ bản https://github.com/playgameservices/android-basic-samples/tree/master/BasicSamples/TypeANumber. Luồng kết nối cho API Google là không đồng bộ, do đó bạn không thể mở khóa thành tích khi bạn có. Có một callback onConnected() được gọi khi kết nối được thiết lập. Trong phương pháp đó bạn có thể mở khóa những thành tựu.

Các tài liệu cho khách hàng api là http://developer.android.com/google/auth/api-client.html

Các vấn đề liên quan