Получите пользовательскую электронную почту firebase auth - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь сделать что-то вроде этого

shopify screenshot Я нашел это всплывающее диалоговое окно в нескольких приложениях, таких как приложение shopify и приложение Discord, после того, как вы открыли регистрацию или вход в системувсплывающее диалоговое окно со всеми возможными электронными письмами.

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

Мой текущий код:

private void addAdapterToViews() {
    Account[] accounts = AccountManager.get(getActivity()).getAccounts();
    Set<String> emailSet = new HashSet<String>();
    for (Account account : accounts) {
        if (EMAIL_PATTERN.matcher(account.name).matches()) {
            emailSet.add(account.name);
        }
    }
    binding.autoemail.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line, new ArrayList<String>(emailSet)));
}

private boolean mayRequestContacts() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        return true;
    }
    if (getActivity().checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
        return true;
    }
    if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
        Snackbar.make(binding.autoemail, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
                .setAction(android.R.string.ok, new View.OnClickListener() {
                    @Override
                    @TargetApi(Build.VERSION_CODES.M)
                    public void onClick(View v) {
                        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
                    }
                });
    } else {
        requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
    }
    return false;
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    if (requestCode == REQUEST_READ_CONTACTS) {
        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            addAdapterToViews();
        }
    }
}

Этот код работает нормально для меня, как только пользователь пытается напечатать любые письма в электронной почте edittext, если разрешение предоставлено.

Ответы [ 4 ]

0 голосов
/ 07 декабря 2018

API учетных данных для получения подсказок при входе, таких как имя пользователя и адрес электронной почты.

В Android 6.0 (Marshmallow) и новее вашему приложению не требуется запрашивать какие-либо устройства или разрешения во время выполнения для полученияподсказки для входа с помощью API учетных данных

HintRequest hintRequest = new HintRequest.Builder()
        .setHintPickerConfig(new CredentialPickerConfig.Builder()
                .setShowCancelButton(true)
                .build())
        .setEmailAddressIdentifierSupported(true)
        .setAccountTypes(IdentityProviders.GOOGLE)
        .build();

PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
    startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
    Log.e(TAG, "Could not start hint picker Intent", e);
}

HintRequest Builder Документация Google

0 голосов
/ 04 декабря 2018

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

0 голосов
/ 04 декабря 2018

Пока что я обнаружил, что с помощью службы Google можно получать все электронные письма пользователей без какого-либо разрешения, используя следующий код:

private static final int RC_SIGN_IN = 100;

Внутри OnCreate() или нажатие кнопки:

AuthUI.SignInIntentBuilder builder = AuthUI.getInstance().createSignInIntentBuilder();

if (getSelectedTosUrl() != null && getSelectedPrivacyPolicyUrl() != null) {
    builder.setTosAndPrivacyPolicyUrls(getSelectedTosUrl(), getSelectedPrivacyPolicyUrl());
}
builder.build();
startActivityForResult(builder.build(), RC_SIGN_IN);

И чтобы получить результаты

 @Nullable
    private String getSelectedPrivacyPolicyUrl() {

        return null;
    }

    @Nullable
    private String getSelectedTosUrl() {

        return null;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RC_SIGN_IN) {
            handleSignInResponse(resultCode, data);
        }
    }

    private void handleSignInResponse(int resultCode, @Nullable Intent data) {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        // Successfully signed in
        if (resultCode == RESULT_OK) {
//            startSignedInActivity(response);
//            finish();
            Log.e(TAG, String.valueOf(response));

        } else {
            // Sign in failed
            if (response == null) {
                // User pressed back button
//                showSnackbar(R.string.sign_in_cancelled);
                Log.e(TAG, "Sign-in error: failed");

                return;
            }

            if (response.getError().getErrorCode() == ErrorCodes.NO_NETWORK) {
//                showSnackbar(R.string.no_internet_connection);
                Log.e(TAG, "Sign-in error: no net");
                return;
            }

//            showSnackbar(R.string.unknown_error);
            Log.e(TAG, "Sign-in error: ", response.getError());
        }
    }

Но моя проблема в том, что диалоговое окно электронной почты пользователя открывается в предварительно сделанном входе в систему, но я хотел бы использовать свой собственный.Какие-нибудь советы ?вот источник библиотека google

0 голосов
/ 29 ноября 2018

невозможно получить доступ к конфиденциальной информации пользователя (например, к идентификатору электронной почты) без разрешений во время выполнения.

...