Как открыть блокировку и идентификацию вызовов в настройках моего приложения iOS

Я использую iOS 14 и хочу включить блокировку и идентификацию вызовов в своем приложении при нажатии кнопки. Для этой цели я использую приведенный ниже код

import SwiftUI
import CallKit

struct ContentView: View {
    var body: some View {
        VStack {
            Button(action: openCallerIDSettings) {
                Text("Open Caller ID Settings")
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(8)
            }
        }
    }
    private func openCallerIDSettings() {
        CXCallDirectoryManager.sharedInstance.openSettings { err in
            print(";;;",err as Any)
        }
    }
}

Но это только открытие основных настроек телефона. Я хочу открыть блокировку и идентификацию вызовов, я уже пробовал разные методы, например, метод App-prefs.

private func openCallerIDSettings() {
        if let url = URL(string: "App-prefs:Phone&path=CLASSIFICATION_AND_REPORTING") {
            if UIApplication.shared.canOpenURL(url) {
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }
        }
    }

но не смог найти точную строку для блокировки и идентификации вызовов

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция openSettings, которая есть в вашем первом блоке кода, является официальным методом открытия настроек блокировки вызовов.

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

Отмечу, что в документации openSettings указано, что это

Открывает приложение «Настройки iOS» и отображает настройки блокировки и идентификации вызовов.

Однако в ходе тестирования я обнаружил, что страница «Блокировка и идентификация вызовов» открывается только в том случае, если приложение «Настройки» уже находится на странице настроек «Телефон». Если это не так, откроется страница настроек телефона.

Я заметил, что TrueCaller, похоже, переходит на страницу настроек телефона, а затем на «Блокировку и идентификацию вызовов». Возможно, они рискуют использовать приватное API.

Похоже, это ошибка или, по крайней мере, вариация задокументированного поведения.

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

Если вы можете воспроизвести это поведение в бета-версии iOS 18, вы также можете записать отзывы о бета-версии. По моему опыту, процесс бета-тестирования — это хорошая возможность решить проблемы.

Между тем, вы можете рассмотреть возможность предоставления пользователю инструкций перейти к «блокировке и идентификации вызовов» перед открытием экрана настроек.

Я сомневаюсь, что этот ответ верен. Некоторые приложения могут реализовать эту функцию. Для этого перейдите непосредственно на страницу «Блокировка и идентификация вызовов» в настройках. Одно из приложений называется JIMA Caller ID (на китайском языке).

Raptor 11.07.2024 10:12

Этот список охватывает глубокие ссылки большинства страниц в настройках: github.com/phynet/iOS-URL-Schemes, но страница идентификации звонков там еще не указана.

Raptor 11.07.2024 10:17

Я проверил приложение True Caller в AppStore, они уже это делают. До iOS 11 App-prefs:Phone&path=CallerID был способом добиться этого, но сейчас он не работает.

Iftikhar Hussain Orakzai 11.07.2024 11:13

Я проверил TrueCaller и другое приложение, и они оба открывают настройки телефона, а не настройки блокировки вызовов и идентификации. Если вы уже находитесь в настройках блокировки вызовов, а затем вернетесь в свое приложение и используете openSettings, то настройки снова откроются уже на странице настроек блокировки вызовов. Любой другой метод, кроме openSettings, подвергает ваше приложение риску отклонения.

Paulw11 11.07.2024 11:47

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