что тут сложного? / Хабр
Привет, меня зовут Макс, я разрабатываю iOS-приложение Додо Пиццы. Наша фича-команда работает над улучшением опыта заказа через приложение в зале и тестирует гипотезы, связанные с геолокацией. Мы столкнулись с проблемой, что система не позволяет корректно отследить, какое разрешение даёт клиент при запросе геопозиции. Например, если он выбирает «Однократно», нет возможности отличить этот вариант от «При использовании».
Помимо этого, некоторые наши гипотезы тесно связаны с работой геолокации в бэкграунд-режиме. В нём резко повышается сложность работы: появляются новые системные алерты; состояния, при которых эти алерты показываются; варианты авторизации, которые может выбрать клиент.
Непонимание всех тонкостей авторизации и работы геолокации в бэкграунде привели нас к необходимости детально погрузиться в тему. Результатами исследований делюсь в сегодняшней статье.
Что умеет геолокация на iOS в бэкграунд-режиме
Работа с геолокацией в состоянии, когда приложение открыто, обычно не вызывает трудностей. Сейчас мы используем эту возможность для показа ближайшей пиццерии. Гораздо больший интерес и сложность представляет работа с геолокацией в бэкграунд-режиме. Эти возможности можно поделить на две группы:
1. Непрерывное отслеживание геопозиции после сворачивания приложения. Например, клиент делает заказ на пути в ресторан, сворачивает приложение. Мы понимаем, что клиент придет через 15 минут, поэтому начинаем готовить ему пиццу. Пока приложение открыто, подписываемся на изменения геопозиции. Затем продолжаем отслеживание в бэкграунд-режиме, т.е. после того, как пользователь свернул приложение. Можем установить частоту в метрах и желаемую точность.
var locationManager = CLLocationManager() locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.distanceFilter = 7
Далее устанавливаем Capabilities — Background Mode:
В коде необходимо выставить
locationManager.allowsBackgroundLocationUpdates = true
Обязательно нужно отключить автоматическую паузу, иначе система может остановить трекинг в бэкграунде и запустить его больше не удастся:
locationManager. pausesLocationUpdatesAutomatically = false
Запускаем отслеживание геопозиции:
locationManager.startUpdatingLocation()
После сворачивания приложения система покажет индикацию в виде синей стрелки в статус-баре (для устройств без чёлки статус-бар станет синим).
Приложение будет отслеживать геопозицию в запущенном состоянии до тех пор, пока мы не остановим отслеживание, либо пока пользователь не закроет приложение принудительно.
Индикатор работы GPS.Для данного способа достаточно авторизации When In Use. При авторизации с типом Always система не будет показывать синюю индикацию. Подробнее про авторизацию поговорим далее.
2. Получение геопозиции при возникновении событий смены локации. Например, когда клиент проходит недалеко от пиццерии, он получает пуш-уведомление об актуальных акциях именно в ней.
Этот способ умеет запускать приложение, даже если оно было выгружено из памяти. После запуска мы можем получить текущую геолокацию. Для этого мы должны подписаться на некоторые события, находясь в запущенном состоянии.
К таким событиям относятся:
Significant location changes — значительные изменение геопозиции c точностью от 500 метров;
Visits — посещение популярного места: дом, работа, спортзал и т.д.;
Regions — посещение определённой геозоны, которую задает разработчик.
Для данного способа требуется авторизация типа Always.
Разбираемся в статусах и состояниях авторизации
В CoreLocation есть 2 запроса для разрешения на использование геолокации:
requestWhenInUseAuthorization()
requestAlwaysAuthorization()
И 5 возможных статусов авторизации:
public enum CLAuthorizationStatus : Int32 { case notDetermined = 0 case restricted = 1 case denied = 2 case authorizedAlways = 3 case authorizedWhenInUse = 4 }
В действительности состояний авторизации больше, чем статусов, а переходы между ними кажутся запутанными. Распутываем авторизацию в следующей схеме:
Значение переменной authorizationStatus
:
На схеме есть два состояния, которые никак не отражены в статусе authorizationStatus
: When In Use Once и Provisional Always. Рассмотрим их поближе.
When In Use Once
Это состояние во многом похоже на When In Use, оно имеет такой же статус authorizedWhenInUse
. Но у When In Use Once есть два больших отличия:
после перезапуска или по истечению таймаута статус авторизации будет переключён в notDetermined
из этого состояния нельзя запросить разрешение типа Always, при вызове requestAlwaysAuthorization() ничего не произойдёт.
Provisional Always
Из схемы видно, что самое труднодоступное состояние — Always. Пользователь должен дважды увидеть алерт и оба раза дать согласие. Provisional always хоть и имеет статус authorizedAlways
, но по своим возможностям эквивалентен When In Use. Для перехода в состояние Provisional Always нужно вызвать requestAlwaysAuthorization() и выбрать «При использовании». Система покажет такой же алерт, как и при вызове requestWhenInUseAuthorization():
В будущем пользователь увидит алерт, в котором система предложит либо переключиться на Always, либо оставить на When In Use. В документации говорится, что это произойдёт в момент, когда система попытается запустить приложение при наступлении одного из событий (например, пользователь зашёл в регион). Как правило, это происходит, когда пользователь находится на главном экране iPhone.
Система предлагает изменить разрешение, когда пользователь не пользуется приложением.The second prompt displays when Core Location prepares to deliver an event to your app requiring CLAuthorizationStatus. authorizedAlways.
Такое поведение больше похоже на неожиданное спам-сообщение. Пользователь уже давно ушёл из контекста нашего приложения. Велика вероятность, что он переключится на When In Use.
Более надёжный способ перейти в состояние Always: сначала получить от пользователя разрешение When In Use и только потом запрашивать Always. Можно попытаться сделать это сразу, последовательно вызывая requestWhenInUseAuthorization и requestAlwaysAuthorization().
Ещё один вариант гарантированно получить Always: сразу отправлять пользователя в настройки. Так, например, делает Telegram.
Telegram не вызывает requestAlwaysAuthorization(), а сразу отправляет пользователя в настройки.При активном использовании способа Always iOS покажет пользователю алерт, в котором предложит переключиться обратно на When In Use, либо остаться в Always.
Система также показывает сводку об активности приложения.Как можно заметить, схема авторизации в iOS сильно затрудняет сбор данных о том, насколько пользователь доверяет приложению и какой способ авторизации выбирает — та самая проблема, о которой шла речь в начале статьи.
Смена статуса авторизации: новые возможности в iOS 15
В iOS 15 появился фреймворк CoreLocationUI. В Apple стремятся упростить опыт пользователя в сценариях, когда необходимо разово получить геопозицию. Теперь можно использовать специальную кнопку CLLocationButton (LocationButton в SwiftUI), при нажатии на которую система сама спросит у пользователя разрешение, если это требуется.
Различные варианты CLLocationButton.Новый алерт с запросом на разовое получение геопозиции. Текст всегда системный.Если текущий статус авторизации позволяет хоть какое-то использование геолокации (authorizedAlways
, authorizedWhenInUse
), то при нажатии на кнопку ничего не произойдёт. В противном случае логика смены статусов авторизации выглядит так, как показано на схеме:
Если пользователь однажды согласился дать разрешение на разовое использование геопозиции, то в другие сессии при нажатии на кнопку приложение будет сразу получать разрешение When In Use Once, без алертов.
Самая интересная фишка здесь — это возможность скинуть состояние авторизации в неопределённое (notDetermined), даже если ранее пользователь запретил использование геолокации.
Простой тест это подтверждает. Выполняем requestWhenInUseAuthorization(), запрещаем использование геолокации. Далее нажимаем на CLLocationButton, разрешаем разовое использование (нажимаем ОК). Перезапускаем приложение, чтобы статус авторизации cбросился в notDetermined. Снова выполняем requestWhenInUseAuthorization(), появляется алерт.
В предыдущих версиях повторный показ алерта был возможен только в случае, если пользователь сам перейдёт в настройки приложения и вручную сбросит запрет на использование геолокации. Таким образом, новый фреймворк даёт разработчикам возможность восстановить (возможно, навсегда потерянный) доступ приложения к геолокации. Задача разработчика — предоставить пользователю новую ценность при запросе авторизации, чтобы избежать повторного запрета.
Новые возможности в iOS 15 потенциально сокращают количество надоедливых алертов, а разработчикам не нужно писать обработку различных сценариев авторизации. Подробнее здесь: Meet the Location Button WWDC 2021.
Непрерывное отслеживание геопозиции при наступлении события
Допустим, мы хотим узнать скользящее значение скорости пользователя в момент, когда он зашёл в определённый регион. При этом приложение может быть выгружено из памяти.
Про скользящееЗначение скорости из CLLocation (location.speed) зачастую неточное. В качестве средней скорости можно использовать скользящее значение, например скорость за последние 50 метров.
Авторизуем геолокацию с типом Always. Далее подписываемся на событие входа в регион:
locationManager. startMonitoring(for: pizzeriaRegion)
И при получении события начинаем трекать геолокацию, как в способе 1:
func locationManager( _ manager: CLLocationManager, didEnterRegion region: CLRegion ) { manager.startUpdatingLocation() }
Я провёл несколько тестов на устройстве. В момент посещения региона приложение запускается, но система довольно быстро переводит его в состояние suspended, несмотря на то, что мы сконфигурировали и запустили CLLocationManager для подробного отслеживания геопозиции. Продолжать отслеживать геопоцизию непрерывно и рассчитывать скорость не удастся.
Коротко про особенности работы в бэкграунд-режиме
Непрерывное отслеживание геолокации:
может быть запущено только в состоянии foreground и продолжать работу после сворачивания приложения;
пользователь всегда понимает, что геопозиция отслеживается — синяя индикация в статус-баре;
достаточно авторизации When In Use, но при Always исчезает синяя индикация.
Примеры приложений: приложения такси, навигаторы, фитнес-трекеры.
Разовое получение геолокации при наступлении события:
ограниченный набор событий, при наступлении которых можно получить геолокацию;
система разбудит приложение при наступлении события, даже если оно выгружено из памяти;
требует Always авторизации. Сложно получить и сохранить разрешение от пользователя;
событие не придёт, если пользователь принудительно закрыл приложение.
Примеры приложений: Telegram (функционал «поделиться геопозицией»).
Полезные ссылки
What’s New in Core Location
Meet the Location Button WWDC 2021
Choosing the Location Services Authorization to Request
requestAlwaysAuthorization()
Thread: Starting location updates in background
Impact of iOS13 and iOS14 permissions on background location access
Как быстро включать и отключать геолокацию на iPhone
Гайды iOS iPhone
Как быстро включать и отключать геолокацию на iPhone
Артем Фунтиков —
Фото: iFixФункция геолокации отслеживает наше местоположение. Она позволяет вызвать такси на адрес, или доставку еды туда, где мы находимся сейчас, а также помогает навигатору двигаться точно по маршруту или ориентироваться на карте. Когда она включена постоянно, заряд батареи расходуется быстрее и есть смысл её отключить. Кроме того, не все любят постоянно находиться под присмотром.
Во всех Android-устройствах достаточно опустить шторку и тапнуть по иконке стрелочки, в iPhone все гораздо сложнее. Для активации приходится лезть в «Настройки», пролистывать вниз, открывать пункт «Конфиденциальность и безопасность» и переключать ползунок. Сократить путь можно благодаря «Командам», которые доступны пользователям iOS 13 и выше по умолчанию.
Достаточно скачать скрипт «Геолокация» и нажать плашку «Добавить». Опция появится в приложении «Команды» и будет перебрасывать в пункт с нужной настройкой. Для быстрого доступа её можно вывести на главный экран. Для этого нажимаем на три точки в плитке с командой, далее иконку «поделиться» и «На экран Домой».
Скачать команду «Геолокация» для iOS 13 и выше
Так мы сэкономим несколько свайпов, время и немного продлим жизнь аккумулятору смартфона.
А новый iPhone и многое другое вы можете купить у наших друзей из Big Geek. Скидка по промокоду iGuides
iGuides в Яндекс.Дзен — zen.yandex.ru/iguides.ru
iGuides в Telegram — t.me/igmedia
Рекомендации
- Как отвязать от Wildberries все платёжные карты. Даже те, что вроде были удалены, но в реальности остались там
- Включите эту опцию на iPhone с iOS 16. 4, чтобы собеседник слышал вас в разы лучше
- Wildberries позволил экономить на покупках 5%. Нужно всего лишь сменить способ оплаты
- Как заблокировать экран iPhone, не трогая кнопку Power. Это новая функция iOS 16.4
Рекомендации
Как отвязать от Wildberries все платёжные карты. Даже те, что вроде были удалены, но в реальности остались там
Включите эту опцию на iPhone с iOS 16. 4, чтобы собеседник слышал вас в разы лучше
Wildberries позволил экономить на покупках 5%. Нужно всего лишь сменить способ оплаты
Как заблокировать экран iPhone, не трогая кнопку Power. Это новая функция iOS 16.4
Читайте также
Билайн
Выпущен гоночный симулятор по цене настоящего автомобиля
Компьтютеры Игры
TCL выпустила в России смартфон TCL 40 SE и другие новинки
TCL Смартфоны
О службах конфиденциальности и геолокации в iOS, iPadOS и watchOS
Узнайте, как настройки конфиденциальности и службы геолокации помогают защитить вашу личную информацию на iPhone, iPad, iPod touch и Apple Watch.
Настройки конфиденциальности
Настройки конфиденциальности в iOS и iPadOS помогают контролировать, какие приложения имеют доступ к информации, хранящейся на вашем устройстве. Например, вы можете разрешить приложению социальной сети использовать вашу камеру, чтобы вы могли делать снимки и загружать их в это приложение. Вы также можете предоставить доступ к своим контактам, чтобы приложение для обмена сообщениями могло найти всех друзей, которые уже используют это приложение.
В разделе «Настройки» > «Конфиденциальность и безопасность» вы можете увидеть, каким приложениям вы разрешили доступ к определенной информации, а также предоставить или отозвать любой доступ в будущем. Это может включать доступ к:
- Службам определения местоположения
- Контакты
- Календари
- Напоминания
- Фото
- Bluetooth
- Локальная сеть
- Взаимодействия поблизости
- Микрофон
- Распознавание речи
- Камера
- Здоровье
- Исследовательский датчик и данные об использовании
- Домашний комплект
- Медиа и Apple Music
- Файлы и папки
- Движение и фитнес
- Фокус
На своем устройстве вы можете выбрать тип данных из этого списка, чтобы увидеть, какие приложения запрашивали разрешение на использование этих данных. Приложение не появится в списке, пока не запросит разрешение на использование ваших данных. Вы можете добавить или удалить разрешение для любого приложения, запросившего доступ к данным. Приложение может использовать тип данных в настройках, только если вы дали приложению разрешение.
Если вы входите в iCloud, приложениям по умолчанию предоставляется доступ к iCloud Drive. Вы также можете просматривать и управлять приложениями, которым разрешено использовать iCloud, в настройках iCloud.
Если вы разрешаете сторонним приложениям или веб-сайтам использовать ваши данные или ваше текущее местоположение, на вас распространяются их условия, политика конфиденциальности и практика. Вам следует ознакомиться с условиями, политикой конфиденциальности и практикой приложений и веб-сайтов, чтобы понять, как они используют ваше местоположение и другую информацию. Информация, которую собирает Apple, будет обрабатываться в соответствии с Политикой конфиденциальности Apple.
Как ваше устройство использует Службы геолокации
С вашего разрешения Службы геолокации позволяют приложениям и веб-сайтам (включая Карты, Камера, Погода и другие приложения) использовать информацию от сотовой связи 1 , Wi-Fi 2 , Глобальная система позиционирования (GPS) 3 сетей и Bluetooth 4 для определения вашего приблизительного местоположения 5 .
Приложения, которые могут отображать ваше местоположение на экране, включая Карты, показывают ваше текущее (приблизительное) местоположение с помощью синего маркера. В Картах, если ваше местоположение не может быть точно определено, вы увидите синий кружок вокруг маркера. Размер круга показывает, насколько точно можно определить ваше местоположение: чем меньше круг, тем выше точность. Когда Службы геолокации активны, в строке состояния появляется значок с черной или белой стрелкой.
Карты, маршруты и приложения на основе местоположения зависят от служб данных. Эти службы данных могут быть изменены и могут быть доступны не во всех географических регионах, в результате чего карты, маршруты или информация о местоположении могут быть недоступными, неточными или неполными. Сравните информацию, представленную на устройстве, с вашим окружением и полагайтесь на размещенные знаки, чтобы устранить любые несоответствия.
Узнайте больше о службах геолокации и конфиденциальности.
Разрешить приложениям использовать ваше местоположение
При первой попытке приложения получить доступ к вашему местоположению оно должно запросить ваше разрешение. Вы видите подсказку, объясняющую, какое приложение запрашивает разрешение на использование вашего местоположения, а также причину запроса разработчиком приложения.
Некоторые приложения запрашивают информацию о вашем местоположении только во время работы приложения. Приложение считается «используемым», когда вы активно используете его на переднем плане или когда оно использует местоположение в фоновом режиме, и в этом случае в строке состояния будет отображаться синяя таблетка.
Если вы предоставите приложению разрешение «Во время использования», приложение может запросить у вас разрешение на использование вашего местоположения, когда оно находится в фоновом режиме.
Когда вы разрешаете приложению использовать ваше местоположение в фоновом режиме, ваше устройство будет время от времени напоминать вам, что приложение использует ваше местоположение, и отображать эти местоположения на карте. Вас также спросят, хотите ли вы и дальше разрешать приложению использовать ваше местоположение в фоновом режиме.
В iOS 13, iPadOS 13 и watchOS 6 можно нажать «Разрешить один раз», чтобы разрешить приложению доступ к данным Служб геолокации только в течение одного сеанса («Один раз»). Если вы закроете, а затем снова откроете приложение, и оно снова попытается получить доступ к вашему местоположению, оно снова запросит ваше разрешение. Приложения не будут использовать ваше местоположение, пока они не запросят ваше разрешение и вы не дадите разрешение.
Вы можете в любое время передумать и обновить настройки в меню «Настройки» > «Конфиденциальность и безопасность» > «Службы геолокации».
Включение и отключение служб определения местоположения
Вы можете включить или отключить службы определения местоположения в меню «Настройки» > «Конфиденциальность и безопасность» > «Службы определения местоположения». Вы можете включить службы определения местоположения либо во время процесса настройки помощника, либо позже с помощью параметра «Службы определения местоположения». Вы можете индивидуально контролировать, какие приложения и системные службы имеют доступ к данным Служб геолокации. Когда службы геолокации отключены, приложения не могут использовать ваше местоположение в активном или фоновом режиме. Это ограничит производительность различных приложений Apple и сторонних приложений.
Если вы хотите сбросить все настройки вашего местоположения до заводских значений по умолчанию, выберите «Настройки» > «Основные» > «Перенести или сбросить [устройство]», нажмите «Сброс», затем нажмите «Сбросить местоположение и конфиденциальность». Когда ваше местоположение и настройки конфиденциальности будут сброшены, приложения перестанут использовать ваше местоположение, пока вы не дадите им разрешение.
Настройки > Конфиденциальность и безопасность > Службы геолокации.
Настройки > Конфиденциальность и безопасность > Службы геолокации > Системные службы.
Повышение точности GPS
Точность GPS зависит от количества видимых спутников GPS. Обнаружение всех видимых спутников может занять несколько минут, при этом точность со временем постепенно увеличивается. Чтобы повысить точность GPS:
- Убедитесь, что вы правильно установили дату, время и часовой пояс на устройстве в меню «Настройки» > «Основные» > «Дата и время». Если возможно, используйте Установить автоматически.
- Обеспечьте хороший обзор в нескольких направлениях. Стены, крыши автомобилей, высокие здания, горы и другие препятствия могут блокировать прямую видимость спутников GPS. Когда это происходит, ваше устройство использует Wi-Fi или сотовые сети для определения вашего местоположения до тех пор, пока спутники GPS снова не станут видны.
Краудсорсинговые службы определения местоположения Wi-Fi и сотовой связи
Если Службы определения местоположения включены, ваше устройство будет периодически отправлять геотегированные местоположения ближайших точек доступа Wi-Fi и вышек сотовой связи в Apple для пополнения базы данных Apple, полученной с помощью краудсорсинга. точек доступа Wi-Fi и вышек сотовой связи. Если вы путешествуете (например, в машине) и службы геолокации включены, устройство iOS с поддержкой GPS также будет периодически отправлять в Apple информацию о местоположении, скорости движения и атмосферном давлении, базы данных о дорожном движении и давлении внутри помещений. Данные о местоположении, собранные Apple из краудсорсинга, хранятся в зашифрованном виде и не идентифицируют вас лично.
О Bluetooth, данных и службах определения местоположения
В iOS 13 и iPadOS 13 приложение должно запрашивать разрешение на использование функций Bluetooth, за исключением воспроизведения звука на устройстве Bluetooth, для которого разрешение не требуется. Вы можете изменить разрешения Bluetooth вашего устройства в меню «Настройки» > «Конфиденциальность и безопасность» > «Bluetooth».
Информация о вашем местоположении во время экстренных вызовов
В целях безопасности информация о местоположении вашего iPhone может использоваться при совершении экстренного вызова для оказания помощи независимо от того, включены ли службы определения местоположения.
Подробнее
- Узнайте больше об использовании служб определения местоположения для отслеживания вашего местоположения в Картах и других приложениях в руководстве пользователя вашего продукта.
- Узнайте больше об Apple и конфиденциальности.
1. iPad (модели Wi-Fi + Cellular): убедитесь, что параметр «Сотовые данные» включен в меню «Настройки» > «Сотовая связь» > «Сотовые данные», даже если вы не подписаны на тарифный план сотовой связи. Это позволит вашему устройству более точно откалибровать себя, используя информацию о сетевом времени и местоположении. В некоторых случаях может потребоваться отключение PIN-кода SIM-карты.
2. Устройства iOS и iPadOS, продаваемые в континентальном Китае и Германии, могут использовать термин «беспроводная локальная сеть» (WLAN) вместо Wi-Fi.
3. GPS доступен на моделях iPhone и iPad Wi-Fi + Cellular.
4. Bluetooth взаимодействует с iBeacons, чтобы обеспечить способ создания и мониторинга областей, которые рекламируют определенную идентифицирующую информацию.
5. Устройства iOS и iPadOS без сотовой связи используют только Wi-Fi для служб определения местоположения (если сеть Wi-Fi доступна). Некоторые сторонние приложения используют соединение Wi-Fi для мониторинга региона. Если устройство заблокировано паролем, эта функция может быть ограничена или неточна.
Информация о продуктах, не производимых Apple, или о независимых веб-сайтах, не контролируемых и не тестируемых Apple, предоставляется без рекомендации или одобрения. Apple не несет ответственности за выбор, работу или использование сторонних веб-сайтов или продуктов. Apple не делает никаких заявлений относительно точности или надежности сторонних веб-сайтов. Свяжитесь с поставщиком для получения дополнительной информации.
Дата публикации:
Как добавить или изменить геолокацию фотографии на iPhone или iPad
Автор Махмуд Итани
Ваш iPhone и iPad позволяют добавлять или изменять геолокацию фото или видео, не завися от сторонних приложений. Вот как это сделать.
Независимо от того, есть ли у вас новый iPhone, такой как iPhone 14 Pro Max, или один из отличных iPad, ваше iDevice будет оснащено функциями Pro. Это означает, что вы можете выполнять множество сложных задач, не всегда полагаясь на сторонние решения. Одним из таких предложений iOS/iPadOS является возможность добавления или изменения геолокации фото или видео. Ниже вы найдете подробные инструкции о том, как воспользоваться этой функцией.
- Запустите приложение Photos .
- Перейдите к фото или видео, которое хотите изменить.
- Коснитесь меню с тремя точками в правом верхнем углу.
- Нажмите Настройка местоположения .
- Это позволит вам ввести любое местоположение или полностью удалить геотег с помощью кнопки Нет местоположения . 4 Изображения
Как видите, изменение геолокации фото или видео на iPhone или iPad — простой процесс. Все, что вам нужно, это название или координаты местоположения, и все готово. Эта функция удобна, когда человек делится фотографией, лишенной метаданных. Вы можете просто добавить к нему геотег, чтобы помнить, где оно было снято. Если вы снимаете несколько фотографий подряд, приложение «Камера» иногда пропускает добавление геотега, поэтому эта функция также может помочь вам легко пометить ваши медиафайлы правильным местоположением. Точно так же вы можете изменить дату и время на видео или фото, и этот процесс также очень прост.
Существуют и другие сложные функции фотосъемки, которые вы можете проверить на своем iPhone или iPad, включая режим камеры Pro и удаленное управление камерой с помощью Apple Watch.
Apple iPhone 14
iPhone 14 — это базовая модель серии iPhone 2022 года, предлагающая сбалансированный набор функций для среднего пользователя.
800 долларов в Best Buy 800 долларов в AT&T 799 долларов в Apple
Apple iPhone 14 Pro
iPhone 14 Pro предлагает новый дизайн передней панели, улучшенные камеры и новый всемогущий кремний Apple для самого премиального iPhone.
1000 долларов в Best Buy 1000 долларов в AT&T 999 долларов в Verizon 999 долларов в Apple
Подписывайтесь на нашу новостную рассылку
Похожие темы
- Мобильный телефон
- Мобильные учебники
- яблоко
- иос
- айфон
- iPadOS
- Apple iPad
Об авторе
Махмуд — уроженец Бейрута, который всегда стремился к свободе через писательство.