我正在将Google Drive API集成到我的Android应用中,以便将JSON文件存储在App Storage文件夹中。
为此,我在MainActivity中的片段中实施了Google Drive API。
当我执行此代码时,它会按预期使用SIGN_IN_REQUIRED代码命中onConnectionFailed方法。我执行startResolutionForResult并出现帐户选择器。
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.i(TAG, "GoogleApiClient connection failed: " + connectionResult.toString());
if (connectionResult.hasResolution()) {
if(!mConnectionResolutionInProgress)
{
try {
mConnectionResolutionInProgress = true;
connectionResult.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLUTION);
} catch (IntentSender.SendIntentException e) {
// Unable to resolve, message user appropriately
showMessage("There was an issue connecting to Google Drive services.");
}
}
else
{
mConnectionResolutionInProgress = false;
showMessage("Canceling export/import action");
}
}
else
{
mConnectionResolutionInProgress = false;
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), getActivity(), 0).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE_RESOLUTION)
{
mConnectionResolutionInProgress = false;
if(resultCode == Activity.RESULT_OK)
{
if(!mGoogleApiClient.isConnected() && !mGoogleApiClient.isConnecting())
{
ConnectToGoogleDrive();
}
}
}
}
private void ConnectToGoogleDrive()
{
if(mGoogleApiClient == null)
{
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addScope(Drive.SCOPE_APPFOLDER)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
mGoogleApiClient.connect();
}
奇怪的是我的个人帐户(以及我的工作帐户)工作得很好。我单击我的帐户,然后对话框消失,并将其替换为权限对话框。如果我接受,那么操作将继续完美。 onActivityResult返回resultCode RESULT_OK。
如果我使用其他任何人的帐户,帐户选择器就会消失,我遇到了一个错误案例。如果我调试,我看到resultCode实际上是RESULT_CANCELED。
我不知道有什么区别。看起来我的代码很标准。
有什么想法吗?
答案 0 :(得分:4)
这可能是应用程序签名问题 - 如果您在调试时成功测试但在发布时失败,则可能没有在Google API控制台中设置正确的密钥库签名 - 如果是这种情况,您应该能够将第二个签名添加到控制台,调试和发布版本都可以正常工作。