SMS и доступ к Google Play для звонков

Я относительно новичок в Android, поэтому буду благодарен за любую помощь. Я написал простое приложение-справочник, чтобы перечислить контакты нашей организации. После выбора контакта вы можете нажать одну из двух кнопок: «Позвонить» или «Текст». Когда кнопка «Вызов» нажата, он инициирует телефонный звонок этому человеку, а когда нажимается кнопка «Текст», он инициирует SMS-сообщение, адресованное этому человеку. Вот мой код:

private void makePhoneCall() {

        if (ContextCompat.checkSelfPermission(EntryDetailActivity.this,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(EntryDetailActivity.this,
                    new String[] {Manifest.permission.CALL_PHONE}, REQUEST_CALL);

        } else {
            String dial = "tel:" + currentPhoneNumber;
            startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));
        }

    }

    private void sendSMS() {

        if (ContextCompat.checkSelfPermission(EntryDetailActivity.this,
                Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(EntryDetailActivity.this,
                    new String[] {Manifest.permission.SEND_SMS}, REQUEST_SMS);

        } else {
            String dial = "sms:" + currentPhoneNumber;
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(dial)));
        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CALL) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                makePhoneCall();
            } else {
                Toast.makeText(this, "Please grant permission to make call!", Toast.LENGTH_SHORT).show();
            }
        }

        if (requestCode == REQUEST_SMS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                sendSMS();
            } else {
                Toast.makeText(this, "Please grant permission to send text messages!", Toast.LENGTH_SHORT).show();
            }
        }
    }

А вот что у меня в файле AndroidManifest.xml:

<uses-permission android:name = "android.permission.CALL_PHONE" />
<uses-permission android:name = "android.permission.SEND_SMS" />

После отправки в магазин Google Play я получаю электронное письмо от Google, в котором говорится:

Необходимое действие

Ознакомьтесь с политикой разрешений и статьей Справочного центра Play Console, в которой описаны предполагаемое использование, исключения, недопустимое использование и альтернативные варианты использования разрешений журнала вызовов или SMS, чтобы определить, какие из следующих параметров применимы к затронутым приложениям. ):

Вариант 1) Вашему приложению не требуется доступ к разрешениям для журнала вызовов или SMS: удалите указанные разрешения из манифеста приложения или перейдите к альтернативной реализации до 9 января 2019 г. Если вам требуется дополнительное время для удаления разрешений или перехода на альтернативный вариант Чтобы запросить продление до 9 марта 2019 г., отправьте форму декларации разрешений.

Вариант 2) Ваше приложение является обработчиком по умолчанию, или вы считаете, что ваше приложение подходит для исключения: если вы еще этого не сделали, отправьте запрос с помощью формы декларации разрешений до 9 января 2019 г. В настоящее время мы рассматриваем заявки и будем ответьте на ваш запрос. Примечание. Вам не нужно вносить изменения в свое приложение, чтобы иметь право отправить запрос. Убедитесь, что ваше приложение в остальном соответствует всем другим политикам программы для разработчиков, чтобы предотвратить удаление вашего приложения.

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

Что я делаю неправильно?

Google больше не разрешает публиковать приложения с такими разрешениями в Play Store, если это не основная функция приложения. Это довольно хорошо объяснено прямо здесь, но они также должны были связать вас со страницей со всей информацией об изменении политики и о том, что вы можете сделать, чтобы подать запрос на освобождение.

Mike M. 20.12.2018 01:31

Обратите внимание, что здесь вам не нужно разрешение SEND_SMS для вашего кода, и если вы переключитесь на ACTION_DIAL вместо ACTION_CALL, вы также можете избавиться от разрешения CALL_PHONE.

CommonsWare 20.12.2018 01:33

@CommonsWare Спасибо! Итак, просто переключившись на ACTION_DIAL, я могу удалить оба разрешения из AndroidManifest.xml и по-прежнему правильно работать с приложением?

DavidB 20.12.2018 07:35

@DavidB: Да. CALL_PHONE нужен только для ACTION_CALL (прямой телефонный звонок). Для ACTION_DIAL это не требуется (вызов номеронабирателя с предварительно заполненным номером, поэтому пользователю просто нужно нажать кнопку «вызвать», чтобы совершить вызов). SEND_SMS необходим только в том случае, если вы используете SmsManager для прямой отправки SMS. Использование ACTION_SENDTO с smsto:Uri или надежда на лучшее с вашим ACTION_VIEW / sms:Uri не требует этого разрешения.

CommonsWare 20.12.2018 13:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
614
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Google пометил CALL_PHONE, SEND_SMS и т. д. Как конфиденциальное разрешение. Поскольку они содержат личные данные, никто не может злоупотребить этими данными, если они не контролируются должным образом, или не могут вызвать / отправить сообщение на любой подозрительный номер.

Они пытаются сделать следующее: те приложения, которые в первую очередь не зависят от этого разрешения, например, обычное приложение, которому требуется проверка по смс или что-то подобное, лишают их этого разрешения. И только те приложения, основная функция которых зависит от этого разрешения, должны иметь эти разрешения, такие как приложение Carrier, которое используется исключительно в зависимости от этого разрешения.

Эй, а что, если мое приложение не использует смс и разрешение журнала вызовов, то что мне заполнять в форме объявления! ??

MazRoid 12.02.2019 05:45
Ответ принят как подходящий

What am I doing wrong?

Прямо сейчас вы:

  • Совершение телефонных звонков с помощью ACTION_CALL и
  • Попытка запустить SMS-клиент с помощью ACTION_VIEWsms:Uri

Использование Intent для запуска SMS-клиента не требует разрешения SEND_SMS. Это разрешение необходимо, если вы использовали SmsManager для прямой отправки SMS. Итак, вы можете удалить разрешение SEND_SMS из своего манифеста и кода, чтобы прояснить это.

Вам необходимо разрешение CALL_PHONE, чтобы использовать ACTION_CALL для прямого телефонного звонка. Если бы вы были готовы использовать ACTION_DIAL, вы могли бы избавиться от разрешения CALL_PHONE. Цена заключается в том, что ACTION_DIAL просто вызывает дозвонщик на желаемый номер телефона, заставляя пользователя нажать кнопку, чтобы сделать звонок. Я предполагаю, что здесь есть разумный компромисс, поскольку ваш SMS-код на самом деле не отправляет SMS, а вызывает приложение, которое может отправлять SMS. Использование ACTION_DIAL привнесет параллелизм в ваши действия и позволит вам удалить оба разрешения.

Пользуюсь smsManager. Почему мое приложение для отправки смс отклонено?

user7856586 10.02.2019 17:40

Другие вопросы по теме