OAuth2 Google Fit Экран согласия Бесконечная загрузка

Мне интересно попробовать Google Fit API на Android, чтобы получить данные от датчиков, но я не могу протестировать его из-за бесконечной загрузки экрана OAuth2.

Что я сделал:

  • Включил Google Fit API в автоматически созданном Firebase проекте Google Cloud, связанном с приложением.
  • Правильно настроили имя приложения, хэш отпечатка SHA1 и имя пакета.
  • Настроили экран OAuth2 с моим адресом электронной почты, который был одним из тестеров, и добавили соответствующие области.
  • Включил метод входа в Google на консоли Firebase, добавил мои отпечатки SHA1 и SHA256, убедился, что мой адрес электронной почты поддержки был выбран в настройках проекта Firebase, и заменил файл google-services.json в моем проекте.

Это код, в котором я пытаюсь получить разрешение пользователя на их данные о фитнесе:


    GoogleSignInOptionsExtension fitnessOptions =
                FitnessOptions.builder()
                        .addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_READ)
                        .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                        .addDataType(DataType.TYPE_SLEEP_SEGMENT, FitnessOptions.ACCESS_READ)
                        .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_READ)
                        .addDataType(DataType.TYPE_LOCATION_SAMPLE, FitnessOptions.ACCESS_READ)
                        .build();

        GoogleSignInAccount googleSignInAccount;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            permissionUtil = new PermissionUtil(requireContext());
            permissionUtil.requestFitPermissions();

            googleSignInAccount = GoogleSignIn.getAccountForExtension(requireContext(), fitnessOptions);

            if (!GoogleSignIn.hasPermissions(googleSignInAccount, fitnessOptions)) {
                GoogleSignIn.requestPermissions(Objects.requireNonNull(getActivity()),
                        GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,
                        googleSignInAccount,
                        fitnessOptions);
            } else {
                accessGoogleFit();
            }

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_moods, container, false);
        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == GOOGLE_FIT_PERMISSIONS_REQUEST_CODE && resultCode == RESULT_OK) {
                accessGoogleFit();
            }
        }

        private void accessGoogleFit() {
            Fitness.getSensorsClient(requireContext(), GoogleSignIn.getAccountForExtension(requireContext(), fitnessOptions))
                    .findDataSources(
                            new DataSourcesRequest.Builder()
                                    .setDataTypes(DataType.TYPE_HEART_RATE_BPM,
                                            DataType.TYPE_STEP_COUNT_DELTA,
                                            DataType.TYPE_SLEEP_SEGMENT,
                                            DataType.TYPE_ACTIVITY_SEGMENT,
                                            DataType.TYPE_LOCATION_SAMPLE)
                                    .setDataSourceTypes(DataSource.TYPE_RAW)
                                    .build())
                    .addOnSuccessListener(new OnSuccessListener<List<DataSource>>() {
                        @Override
                        public void onSuccess(List<DataSource> dataSources) {
                            for (DataSource i : dataSources) {
                                Log.d(TAG, i.getStreamIdentifier());
                                Log.d(TAG, i.getDataType().getName());
                            }
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.e(TAG, "Find data sources request failed", e);

                        }
                    });
        }

По сути, это та же проблема, о которой говорится в этой ветке.

Любая помощь приветствуется.


person Timothy    schedule 08.02.2021    source источник