1. Privacy manifest files
1.1 简介
自己App或三方SDK(通过XCFrameworks|Swift packages|Xcode projects集成的)需要包含一个隐私清单文件(privacy manifest)叫作 PrivacyInfo.xcprivacy
。它是一个属性列表,记录了App或三方SDK收集数据的类型以及使用收集数据Api的原因,放置在bundle文件里。帮助开发者了解三方SDK中使用的Api以及数据收集的一些信息。
重要:
- 如果集成的三方SDK在下面的列表中,则需要三方SDK里面包含这样的隐私清单 Upcoming third-party SDK requirements.
- 如果集成的三方SDK没有在上面的列表中,但是它使用了需要说明使用原因的Api,最好也包含下
1.2 Create a privacy manifest
File > New File->App Privacy,然后选择target,这里的target可以是三方SDK,也可以是自身App的,如果更新三方SDK成本太大,或者最新版本的也没有提供隐私清单,可以通过这个方法,手动给三方SDK添加。每个三方SDK都是单独的,都需要单独添加
默认名字 PrivacyInfo.xcprivacy,不建议更改
在PrivacyInfo.xcprivacy字典里,添加下列的键:
NSPrivacyTracking
bool值,表示App或者三方SDK是否使用了
App Tracking Transparency framework下的数据 User Privacy and Data Use.
NSPrivacyTrackingDomains
string数组,表示App或者三方SDK在tracking时,链接的域名,如果用户没有统一跟踪的权限,请求这些域名就会失败,并收到一个error
,如果NSPrivacyTracking=true,则至少需要设置一个NSPrivacyTrackingDomains
NSPrivacyCollectedDataTypes
一个字典数组,表示App或者三方SDK收集的数据类型
Describing data use in privacy manifests.
NSPrivacyAccessedAPITypes
一个字典数据,表示App或者三方SDK,访问了哪些需要说明访问原因的api
Describing use of required reason API.- 只需要在iOS, iPadOS, tvOS, visionOS, watchOS上为App或者三方SDK上提供这个
1.3 Describing data use in privacy manifests
链接:Describing data use in privacy manifests | Apple Developer Documentation
需要注意的点:
- data type不能自定义key-value, 只能使用列表中列出来的
1.4 Describing use of required reason API
大体上包括以下几类:
1.5 需要包含隐私清单和签名的三方SDK
- Abseil
- AFNetworking
- Alamofire
- AppAuth
- BoringSSL / openssl_grpc
- Capacitor
- Charts
- connectivity_plus
- Cordova
- device_info_plus
- DKImagePickerController
- DKPhotoGallery
- FBAEMKit
- FBLPromises
- FBSDKCoreKit
- FBSDKCoreKit_Basics
- FBSDKLoginKit
- FBSDKShareKit
- file_picker
- FirebaseABTesting
- FirebaseAuth
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreExtension
- FirebaseCoreInternal
- FirebaseCrashlytics
- FirebaseDynamicLinks
- FirebaseFirestore
- FirebaseInstallations
- FirebaseMessaging
- FirebaseRemoteConfig
- Flutter
- flutter_inappwebview
- flutter_local_notifications
- fluttertoast
- FMDB
- geolocator_apple
- GoogleDataTransport
- GoogleSignIn
- GoogleToolboxForMac
- GoogleUtilities
- grpcpp
- GTMAppAuth
- GTMSessionFetcher
- hermes
- image_picker_ios
- IQKeyboardManager
- IQKeyboardManagerSwift
- Kingfisher
- leveldb
- Lottie
- MBProgressHUD
- nanopb
- OneSignal
- OneSignalCore
- OneSignalExtension
- OneSignalOutcomes
- OpenSSL
- OrderedSet
- package_info
- package_info_plus
- path_provider
- path_provider_ios
- Promises
- Protobuf
- Reachability
- RealmSwift
- RxCocoa
- RxRelay
- RxSwift
- SDWebImage
- share_plus
- shared_preferences_ios
- SnapKit
- sqflite
- Starscream
- SVProgressHUD
- SwiftyGif
- SwiftyJSON
- Toast
- UnityFramework
- url_launcher
- url_launcher_ios
- video_player_avfoundation
- wakelock
- webview_flutter_wkwebview
- 签名:
或者更准确地说,代码签名(Code Signing),是一种用于确认应用或软件包来源的安全技术,同时确保自签名之后代码未被篡改。代码签名通过使用数字证书和加密技术来实现。这个过程为软件或应用附加了一个数字签名,当用户下载或运行软件时,操作系统或其他软件可以验证这个签名,以确认软件的真实性和完整性。
1.6 总结
- 三方SDK在上面的列表中,分为两种情况:
- 以二进制集成(framework),需要包含签名和隐私清单,从目前来看,三方SDK都更新了
- 以源码集成,只需要包含隐私清单,如果三方SDK最新版SDK里面包含了,拿过来用即可,更不更新SDK都行,如果三方SDK最新版也没有包含,可以不用管
- 三方SDK不在上面的列表中:
- 签名和隐私文件有没有都行,最好有
- 自己的App里面,只需要包含本身App里用到的隐私Api说明
1.7 查看隐私报告
打包的时候,可以提前看,App的privacy 报告,会生成一个PDF