iOS14 隱私適配及部分解決方案

阿里巴巴淘系技術發表於2020-07-31

背景

Trust is built over time, and starting out by showing respect for users data by asking for access to as little as possible is a great first step.
  • 在剛剛結束的線上 WWDC 2020 釋出會上蘋果向我們展示了新的 iOS14 系統。
  • iOS14 的適配,很重要的一環就集中在使用者隱私和安全方面。在 iOS13 及以前,當使用者首次訪問應用程式時,會被要求開放大量許可權,比如相簿、定位、聯絡人,實際上該應用可能僅僅需要一個選擇圖片功能,卻被要求開放整個照片庫的許可權,這確實是不合理的。對於相簿,在 iOS14 中引入了 “Limited Photos Library” 的概念,使用者可以授予應用訪問其一部分的照片,對於應用來說,僅能讀取到使用者選擇讓應用來讀取的照片,讓我們看到了 Apple 對於使用者隱私的尊重。
  • 這僅僅是一部分,在 iOS14 中,可以看到諸多類似的保護使用者隱私的措施,也需要我們升級適配。
  • 最近在調研 iOS14 的適配方案,本文主要分享一下 iOS14 上對於隱私授權的變更和部分適配方案,歡迎補充指正。

( WWDC 2020精彩內容思否專欄:https://segmentfault.com/blog...  

本篇內容來自於阿里巴巴淘系技術部,無線開發工程師嵐遙。
更多精彩內容可關注【淘系技術】公眾號。)

適配點

相簿

  • iOS14 新增了“Limited Photo Library Access” 模式,在授權彈窗中增加了 Select Photo 選項。使用者可以在 App 請求呼叫相簿時選擇部分照片讓 App 讀取。從 App 的視角來看,你的相簿裡就只有這幾張照片,App 無法得知其它照片的存在。
  • iOS14 中當使用者選擇“PHAuthorizationStatusLimited” 時,如果未進行適配,有可能會在每次觸發相簿功能時都進行彈窗詢問使用者是否需要修改照片許可權。
  • 對於這種情況可通過在 Info.plist 中設定 “PHPhotoLibraryPreventAutomaticLimitedAccessAlert” 的值為 YES  來阻止該彈窗反覆彈出,並且可通過下面這個 API 來主動控制何時彈出 PHPickerViewController 進行照片選擇。

螢幕快照 2020-07-16 下午2.42.21.png

  • 在 iOS14 中官方推薦使用  PHPicker 來替代原 API 進行圖片選擇。PHPicker 為獨立程式,會在檢視最頂層進行展示,應用內無法對其進行截圖也無法直接訪問到其內的資料。
  • UIImagePickerController  -> PHPickerViewController, UIImagePickerViewController 功能受限,每次只能選擇一張圖片,將逐漸被廢棄。
  • PHPicker 支援多選,支援搜尋,支援按 image,video,livePhotos 等進行選擇。
  • 新API及遷移demo:

螢幕快照 2020-07-16 下午2.43.54.png
螢幕快照 2020-07-16 下午2.44.06.png

  • 需要注意的是,在 limit Photo 模式下,AssetsLibrary 訪問相簿會失敗;在 writeOnly 模式下,AssetLibrary 也會有顯示問題。建議還在使用 AssetsLibrary 的同學儘快遷移到新 API。
  • 授權相關:舊 API 廢棄,增加 PHAccessLevel 引數。如果再使用以前的API來獲取許可權狀態,PHAuthorizationStatusLimited 狀態下也會返回 PHAuthorizationStatusAuthorized

螢幕快照 2020-07-16 下午2.45.53.png
螢幕快照 2020-07-16 下午2.46.01.png

定位

  • 在 iOS13 及以前,App 請求使用者定位授權時為如下形態:一旦使用者同意應用獲取定位資訊,當前應用就可以獲取到使用者的精確定位。
  • iOS14 新增使用者大致位置選項可供使用者選擇,原因是大多數 App 實際上並不需要獲取使用者到使用者最準確的定位資訊。iOS14 授權彈窗新增的 Precise的開關預設會選中精確位置。使用者通過這個開關可以進行更改,當把這個值設為 On 時,地圖上會顯示精確位置;切換為Off時,將顯示使用者的大致位置。
  • 對於對使用者位置敏感度不高的 App 來說,這個似乎無影響,但是對於強依賴精確位置的 App 適配工作就顯得非常重要了。可以通過使用者在 “隱私設定” 中設定來開啟精確定位,但是可能使用者寧可放棄使用這個應用也不願意開啟。這個時候,iOS14 在 CLLocationManager 新增兩個方法可用於向使用者申請臨時開啟一次精確位置許可權。
    使用方式也很簡單,需要首先在 Info.plist 中配置“NSLocationTemporaryUsageDescriptionDictionary”字典中需要配置 key 和 value 表明使用位置的原因,以及具體的描述。
    在本例中,key 即為獲取使用者許可權時傳的 "purposeKey",最終呈現給使用者的就是左圖,右圖為當App主動關閉精確定位許可權申請。
  • 對於地理位置不敏感的App 來說,iOS14 也可以通過直接在 info.plist 中新增 NSLocationDefaultAccuracyReduced  為 true 預設請求大概位置。
  • 這樣設定之後,即使使用者想要為該 App 開啟精確定位許可權,也無法開啟。
  • 也可以直接通過API來根據不同的需求設定不同的定位精確度。
  • 需要注意的是,當 App 在 Background 模式下,如果並未獲得精確位置授權,那麼 Beacon 及其他位置敏感功能都將受到限制。

Local Network

  • iOS14 當 App 要使用 Bonjour 服務時或者訪問本地區域網,使用 mDNS 服務等,都需要授權,開發者需要在 Info.plist 中詳細描述使用的為哪種服務以及用途。下圖為需要無需申請許可權與需要授權的服務:
  • 在 "隱私設定" 中也可以檢視和修改具體有哪些 App 正在使用 LocalNetwork  
  • 如果應用中需要使用 LocalNetwork 需要在 Info.plist 中配置兩個選項,詳細描述為什麼需要使用該許可權,以及需要列出具體使用 LocalNetwork 的服務列表。
  • 對於使用了下列包含 Bonjour 的 framework,都需要更新描述

Wi-Fi Address

  • iOS8 - iOS13 ,使用者在不同的網路間切換和接入時,mac 地址都不會改變,這也就使得網路運營商還是可以通過 mac 地址對使用者進行匹配和使用者資訊收集,生成完整的使用者資訊。iOS14 提供 Wifi 加密服務,每次接入不同的 WiFi 使用的 mac 地址都不同。每過 24 小時,mac 地址還會更新一次。需要關注是否有使用使用者網路 mac 地址的服務。
  • 下圖為 iOS13 及之前使用者接入網路時 mac 地址並不會進行改變
  • 下圖為 iOS14 使用者接入 Wi-Fi 時 mac 地址的變化情況
  • 並且使用者也可以自行選擇是否開啟 private Wi-Fi address

剪下板

  • 在 iOS14 中,讀取使用者剪下板的資料會彈出提示。
  • 彈出提示的原因是使用 UIPasteboard 訪問使用者資料,訪問以下資料都會彈出 toast 提示。
  • 相容方案:如果應用訪問剪下板僅僅用於判斷是否為URL格式,則 iOS14 新增了兩個 API 可以用於規避該提示。如果應用想直接訪問剪下板的資料,暫時可能無法做到規避該提示。 iOS14 新增兩種 UIPasteboardDetectionPattern。
  • 上面的兩個 API 可用於規避提示,但只能用於判斷剪下板中是否有 URL,並不是真正的訪問剪貼簿資料,也拿不到剪下板的真實資料。下面兩個 API 可以獲得具體的 URL 資訊,但是會觸發剪下板提示。並且實測當使用者剪下板中包含多個 URL 時只會返回第一個。
  • 使用示例

螢幕快照 2020-07-16 下午2.47.30.png

相機和麥克風

  • iOS14 中 App 使用相機和麥克風時會有圖示提示以及綠點和黃點提示,並且會顯示當前是哪個 App 在使用此功能。我們無法控制是否顯示該提示。
  • 會觸發錄音小黃點的程式碼示例:

螢幕快照 2020-07-16 下午2.48.07.png

  • 觸發相機小綠點的程式碼示例:

螢幕快照 2020-07-16 下午2.48.14.png

IDFA

  • IDFA 全稱為 Identity for Advertisers ,即廣告識別符號。用來標記使用者,目前最廣泛的用途是用於投放廣告、個性化推薦等。
  • 在 iOS13 及以前,系統會預設為使用者開啟允許追蹤設定,我們可以簡單的通過程式碼來獲取到使用者的 IDFA 識別符號。

螢幕快照 2020-07-16 下午2.49.28.png

  • 但是在 iOS14 中,這個判斷使用者是否允許被追蹤的方法已經廢棄。
  • iOS14 中,系統會預設為使用者關閉廣告追蹤許可權。
  • 對於這種情況,我們需要去請求使用者許可權。首先需要在 Info.plist 中配置" NSUserTrackingUsageDescription " 及描述文案,接著使用 AppTrackingTransparency 框架中的 ATTrackingManager 中的 requestTrackingAuthorizationWithCompletionHandler 請求使用者許可權,在使用者授權後再去訪問 IDFA 才能夠獲取到正確資訊。

螢幕快照 2020-07-16 下午2.49.40.png

上傳 AppStore

  • 更加嚴格的隱私稽核,可以讓使用者在下載 App 之前就知道此 App 將會需要哪些許可權。目前蘋果商店要求所有應用在上架時都必須提供一份隱私政策。如果引入了第三方收集使用者資訊等SDK,都需要向蘋果說明是這些資訊的用途。

總結

  • 對於這次 iOS14 的隱私許可權大升級和新嘗試,體現了蘋果對於使用者隱私的尊重。
  • 從使用者角度來說,近年來越來越精準的廣告投放讓我們越來越感覺自己被”監視“著,此次升級後,我們有了更多保護自己隱私的方式以及避免廣告騷擾的方法,蘋果此舉無疑會加大我們對其的好感度和信任感。
  • 但從另一個角度來說,對於 IDFA 的限制,可能會導致之前許多依靠廣告投放收入的免費 App 難以繼續維持生計,也可能也會導致免費 App 的數量有所降低。從開發者的角度來說,除了對 iOS14 隱私升級的積極適配外,也讓我們感受到了 iOS14 中對於使用者隱私的重視無疑會提高獲取使用者行為資訊的成本。
  • 衝擊最大的應該就是廣告行業,對於目前的推薦演算法和使用者拉新都會受到影響,如何在充分尊重使用者隱私的前提下進行廣告的精準投放對於開發者和廣告商來說都是一個不小的機遇和挑戰。

參考資料

  • WWDC 2020 Apple Developer
  • Developer Documentation

廣告

歡迎大家加入手淘客戶端的小程式與跨平臺技術部!我們是支撐小程式、小遊戲、Flutter 等跨平臺技術的核心團隊,有技術廣度和也有技術深度,我們需要 iOS、Android、C++、Flutter、Canvas、遊戲引擎、WebGL 等各方面的人才。如果你善於學習,這是一個很好的接觸跨領域知識的機會。如果你是個對技術有追求對小夥伴,請別猶豫,立刻聯絡我!lanya.sly@alibaba-inc.com

更多有關手淘的技術內容分享敬請關注VX公眾號【淘系技術】

相關文章