Ошибка подключения приложения Google API для Google Диска

Я создаю приложение, и я интегрирую в него API Android для Google Диска. У меня есть основная деятельность, а затем фрагмент, который открывается, что приводит к приводу Google. Тем не менее, когда я пытаюсь войти (неважно, какая учетная запись gmail, я пробовал существующие, создавая новые, независимо от того), я получаю код ошибки ConnectionResult 17 SIGN_IN_FAILED. Приложение авторизовано в консоли разработчика, и включен Drive API. Я не знаю, что еще делать.

Вот соответствующий код:

public class FileSharingFragment extends Fragment implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (mGoogleApiClient == null) { mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } mGoogleApiClient.connect(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_file_sharing, container, false); users = (TextView) rootView.findViewById(R.id.users); getActivity().setTitle("Files"); return rootView; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == Activity.RESULT_OK) { mGoogleApiClient.connect(); } } @Override public void onConnectionFailed(ConnectionResult result) { Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); if (!result.hasResolution()) { // show the localized error dialog. GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), getActivity(), 0).show(); Log.i("file sharing fragment", "error code " + result.getErrorCode()); return; } try { result.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLUTION); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "Exception while starting resolution activity", e); } } 

И чтобы назвать это из основной деятельности, которую я использую

 Fragment fragment = FileSharingFragment.newInstance(); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

Я не могу для жизни понять, почему он не позволит мне войти.

Через Консоль разработчиков Google перейдите в API & Auth -> Credentials и проверьте, что имя пакета точно совпадает с именем вашего пакета приложений.

Вероятно, вы уже знаете, что вашей консоли разработчика требуется три вещи:

1 / SHA1 из yout APK
2 / название вашего пакета
3 / ваше имя электронной почты / продукта на экране согласия

Предполагая, что все в порядке, вот двойная проверка последнего курорта, которую я часто использую:
– откройте (разархивируйте) свой xxxx.APK с помощью unzipper (например, 7zip), найдите CERT.RSA.
– запустить 'keytool -printcert -file ……… \ CERT.RSA'
Вернитесь на консоль и сравните SHA1 снова.

Удачи

Это может показаться очевидным, но если вы ввели свой отпечаток пальца на консоли разработчика и настроили свой API там и все еще получаете SIGN_IN_FAILED убедитесь, что используете фактически подписанный APK!

Слишком легко запустить installDebug из Gradle и забыть. Я обычно настраиваю его и просматриваю меню ( Build > Generate Signed APK ... ) в Android Studio, когда я работаю с SDK Google

Убедитесь, что вы создали идентификатор клиента OAuth 2.0, а не обычный ключ API

Согласно документам Google для API youtube – ваше приложение должно отправить токен OAuth 2.0 с любым запросом, который обращается к частным пользовательским данным