Как несколько пользователей используют облачную речь Google одновременно - PullRequest
0 голосов
/ 14 мая 2018

Я создаю приложение, которое использует Google Cloud Speech.

В моем приложении есть ключ учетной записи службы Google, и я использую его для вызова API.

Хорошо работает, когда используется одним пользователем, но не работает, когда несколько пользователей используют его одновременно.

Например, доступен только один пользователь или все недоступны.

Права ключа учетной записи службы принадлежат владельцу проекта.

Я думаю, что это проблема ключа учетной записи службы ... Как мне это исправить?

private class AccessTokenTask extends AsyncTask<Void, Void, AccessToken> {

    @Override
    protected AccessToken doInBackground(Void... voids) {

        final SharedPreferences prefs = mContext.getSharedPreferences(PREFS, Context.MODE_PRIVATE);
        String tokenValue = prefs.getString(PREF_ACCESS_TOKEN_VALUE, null);
        long expirationTime = prefs.getLong(PREF_ACCESS_TOKEN_EXPIRATION_TIME, -1);

        // Check if the current token is still valid for a while
        if (tokenValue != null && expirationTime > 0) {
            if (expirationTime > System.currentTimeMillis() + ACCESS_TOKEN_EXPIRATION_TOLERANCE) {
                return new AccessToken(tokenValue, new Date(expirationTime));
            }
        }

        final InputStream stream = mContext.getResources().openRawResource(R.raw.credential);
        try {
            final GoogleCredentials credentials = GoogleCredentials.fromStream(stream).createScoped(SCOPE);
            final AccessToken token = credentials.refreshAccessToken();
            prefs.edit()
                    .putString(PREF_ACCESS_TOKEN_VALUE, token.getTokenValue())
                    .putLong(PREF_ACCESS_TOKEN_EXPIRATION_TIME, token.getExpirationTime().getTime())
                    .apply();
            return token;
        } catch (IOException e) {
            Log.e(TAG, "Failed to obtain access token.", e);
        }
        return null;
    }

    @Override
    protected void onPostExecute(AccessToken accessToken) {
        mAccessTokenTask = null;
        final ManagedChannel channel = new OkHttpChannelProvider()
                .builderForAddress(GOOGLE_API_HOSTNAME, GOOGLE_API_PORT)
                .nameResolverFactory(new DnsNameResolverProvider())
                .intercept(new GoogleCredentialsInterceptor(new GoogleCredentials(accessToken)
                        .createScoped(SCOPE)))
                .build();
        mApi = SpeechGrpc.newStub(channel);

        // Schedule access token refresh before it expires
        if (mHandler != null) {
            mHandler.postDelayed(mFetchAccessTokenRunnable,
                    Math.max(accessToken.getExpirationTime().getTime() - System.currentTimeMillis() - ACCESS_TOKEN_FETCH_MARGIN, ACCESS_TOKEN_EXPIRATION_TOLERANCE));
        }
    }
}

Этот код является кодом, который вызывает файл «credential.json» на Android и получает «токен доступа».

Сервер для этого приложения - Python и общается через http.

https://github.com/GoogleCloudPlatform/android-docs-samples/tree/master/speech/Speech

Описание в приведенной выше ссылке говорит вам делегировать аутентификацию на сервер.

Я хочу написать эту часть с кодом Python. Что мне делать?

1 Ответ

0 голосов
/ 18 мая 2018

В ссылке, которую вы указали в описании, вам предлагается сначала прочитать документ о базовых принципах аутентификации . В вашем случае используйте служебную учетную запись для приложения Android.

Я понимаю, что вы уже смогли предоставить учетные данные конечного пользователя API Google Cloud Platform, как, например, Cloud Speech API.

Если вы хотите аутентифицировать нескольких пользователей в вашем приложении, вы должны использовать вместо этого Аутентификация Firebase . Ссылка содержит краткое объяснение и учебник.

Существует несколько клиентских библиотек Python для GCP, которые вы можете использовать в зависимости от того, какие операции вы хотите выполнить на сервере. А что касается проверки подлинности Python на стороне сервера, эта документация показывает, как работает проверка подлинности для облачного хранилища Google (запомните этот пример).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...