2014-11-20 18 views
6

tôi cố gắng làm việc với các API Google Drive trên Android, đầu tiên sử dụng bản demo:API Android Google Drive "kết nối thất bại"

https://github.com/googledrive/android-quickstart

Tuy nhiên, tôi có lỗi này mà tôi không thể giải quyết.

kết nối GoogleApiClient thất bại: ConnectionResult {statusCode = SIGN_IN_REQUIRED, độ phân giải = PendingIntent {421d40e8: [email protected]}}

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // Called whenever the API client fails to connect. 
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
    if (!result.hasResolution()) { 
     // show the localized error dialog. 
     GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); 
     return; 
    } 
    // The failure has a resolution. Resolve it. 
    // Called typically when the app is not yet authorized, and an 
    // authorization 
    // dialog is displayed to the user. 
    try { 
     result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
    } catch (SendIntentException e) { 
     Log.e(TAG, "Exception while starting resolution activity", e); 
     // There was an error with the resolution intent. Try again. 
     mGoogleApiClient.connect(); 
    } 
} 


@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    if (requestCode == REQUEST_CODE_RESOLUTION) { 

     if (resultCode == RESULT_OK) { 
      Log.i(TAG, "Error resolution success."); 

      // Make sure the app is not already connected or attempting to connect 
      if (!mGoogleApiClient.isConnecting() && 
        !mGoogleApiClient.isConnected()) { 
       mGoogleApiClient.connect(); 
      } 

     } else { 
      GooglePlayServicesUtil.getErrorDialog(requestCode, this, 0).show(); 
     } 

     break; 
    } 
} 
+1

Trong trường hợp của tôi, lỗi này là do theo thứ gì đó của gói ứng dụng không khớp với thông tin đăng nhập. Một trong những nhu cầu để đảm bảo tên gói và SHA1 phải phù hợp. Phiên bản gỡ lỗi chạy trên máy tính có thể có tên gói khác và SHA1 từ phiên bản phát hành. – Hong

Trả lời

2

Here là các thông tin cho các lỗi bạn đang nhận. Tôi cho rằng bạn có, nhưng bạn cần phải đăng nhập để truy cập Drive. Khi tôi chạy ứng dụng mẫu, ngay từ đầu, nó yêu cầu tôi chọn một tài khoản. Có lẽ bạn chưa có tài khoản được đồng bộ hóa với thiết bị bạn đang sử dụng? Có một tùy chọn để "thêm tài khoản", nhưng có thể hành vi khác khi bạn không có tài khoản. Tài liệu cho thấy bạn tiếp tục mà không cần sử dụng API (đơn giản là vì bạn không thể trừ khi bạn đăng nhập) hoặc gọi số startResolutionForResult(Activity, int) để nhắc người dùng đăng nhập, nhưng có lẽ sẽ dễ nhất chỉ với add the account to your device.

+0

Lạ, không thay đổi bất kỳ thứ gì trong mã của tôi, nó hoạt động trên máy tính bảng Sony của tôi nhưng không phải trên Samsung O.o – cham

+0

Bạn có đăng nhập vào cả hai thiết bị với cùng một tài khoản không? – Andy

+0

Có cùng một tài khoản – cham

0

Không chắc chắn nếu ai đó vẫn cần điều này, nhưng trong trường hợp của tôi tôi đã có hai tài khoản google vì vậy trước tiên tôi cần phải chọn tài khoản tôi muốn sử dụng. Tôi đã sử dụng mã này trong onConnectionFailed

if (!connectionResult.hasResolution()) 
    { 
     // show the localized error dialog. 
     GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), mContext, 0).show(); 
     return; 
    } 

    try 
    { 
     connectionResult.startResolutionForResult(mContext, 1); 
    } catch (IntentSender.SendIntentException e) 
    { 
     e.printStackTrace(); 
    } 
3

này có thể là do sự cẩu thả về phía nhà phát triển của (vì nó đã xảy ra với tôi) - SHA1 chi tiết bạn cung cấp trên giao diện điều khiển là của chính sản xuất và bạn đang thử nghiệm trên gỡ lỗi chế độ (các chi tiết SHA1 sẽ khác nhau). Các thông báo lỗi google drive API, cung cấp cho có thể đã được tốt hơn, mặc dù!

1

Bạn có thể tham khảo câu trả lời của tôi ở đây https://stackoverflow.com/a/41658044/4448757 để kết nối với tài khoản google, này hoạt động hoàn hảo chỉ trong apk ký

sau đó sau khi bạn có thể đi cho Google Drive

IntentSender intentSender = Drive.DriveApi 
      .newOpenFileActivityBuilder() 
      .build(mGoogleApiClient); 
    try { 
     startIntentSenderForResult(intentSender, DRIVE_CHOOSER_REQUEST, null, 0, 0, 0); 
    } catch (IntentSender.SendIntentException e) { 
     e.printStackTrace(); 
    } 
Các vấn đề liên quan