-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: privacy manifest files #677
Changes from all commits
a7b12d9
eb49008
7b099a1
b4ecc69
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<!-- | ||
Docs for this section: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests | ||
This section is describing what information our SDK collects about the app user. | ||
|
||
It's my understanding that this section is for what our SDK collects automatically, not the data a customer passes to our SDK. Therefore, if a piece of data is passed to our SDK, use `false`. | ||
Customers must create their own privacy file for what their app collects and provide that to Apple. That's where customers report what data they are passing to our SDK. | ||
--> | ||
<key>NSPrivacyCollectedDataTypes</key> | ||
<array> | ||
|
||
<!-- | ||
Section for SDKs that capture "Such as screen name, handle, account ID, assigned user ID, customer number, or other user- or account-level ID that can be used to identify a particular user or account." | ||
--> | ||
<dict> | ||
<key>NSPrivacyCollectedDataType</key> | ||
<string>NSPrivacyCollectedDataTypeUserID</string> | ||
<key>NSPrivacyCollectedDataTypeLinked</key> | ||
<false/> <!-- because of anonymous profiles, linking to a person is optional --> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. added a comment in notion about it There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am keeping this value as-is until we give others on team time to read documentation and give suggestions for this value. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since to utilize basically any functionality of Customer.io, we need to link usage data to a user typically email or a device. This is the rational for marking this as true. If we mark this as false, it means that Customer.io does not have any data linked to a user anywhere in our systems. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added comment on notion too. We only need a profile to function, so even if they use aliases to create profiles, sending push notifications and in-app messages should still be possible based on the data linked to the user, which I believe aligns with Apple's privacy details. For sending email, it's true that linking an actual email is necessary, but we don’t force it and it likely falls under the customer app's privacy? 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. From https://developer.apple.com/app-store/app-privacy-details/#linked-data
I believe we do both of these activities, which I why I tend to go for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This PR thread has been discussed in a Notion comment. |
||
<key>NSPrivacyCollectedDataTypeTracking</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypePurposes</key> | ||
<array> | ||
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||
</array> | ||
</dict> | ||
|
||
<!-- | ||
Section for SDKs that capture "Such as app launches, taps, clicks, scrolling information, music listening data, video views, saved place in a game, video, or song, or other information about how the user interacts with the app." | ||
--> | ||
<dict> | ||
<key>NSPrivacyCollectedDataType</key> | ||
<string>NSPrivacyCollectedDataTypeProductInteraction</string> | ||
<key>NSPrivacyCollectedDataTypeLinked</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypeTracking</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypePurposes</key> | ||
<array> | ||
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<!-- | ||
Document on this section: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api | ||
Documents if our SDK uses certain system calls and why. Prevents SDK using fingerprinting. | ||
--> | ||
<key>NSPrivacyAccessedAPITypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyAccessedAPIType</key> | ||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string> | ||
<key>NSPrivacyAccessedAPITypeReasons</key> | ||
<array> | ||
<string>CA92.1</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<!-- "third-party SDK uses data for tracking as defined under the App Tracking Transparency framework." | ||
See section "Asking permission to track" in this webpage: | ||
https://developer.apple.com/app-store/user-privacy-and-data-use/ | ||
--> | ||
<key>NSPrivacyTracking</key> | ||
<false/> | ||
|
||
<!-- Because we use NSPrivacyTracking=false, this section is not required. | ||
<key>NSPrivacyTrackingDomains</key> | ||
--> | ||
</dict> | ||
</plist> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<!-- | ||
See DataPipelines module for documentation of this file. Including resources for each section to learn more. | ||
--> | ||
<key>NSPrivacyCollectedDataTypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyCollectedDataType</key> | ||
<string>NSPrivacyCollectedDataTypeProductInteraction</string> | ||
<key>NSPrivacyCollectedDataTypeLinked</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypeTracking</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypePurposes</key> | ||
<array> | ||
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyAccessedAPITypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyAccessedAPIType</key> | ||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string> | ||
<key>NSPrivacyAccessedAPITypeReasons</key> | ||
<array> | ||
<string>CA92.1</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyTracking</key> | ||
<false/> | ||
</dict> | ||
</plist> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<!-- | ||
See DataPipelines module for documentation of this file. Including resources for each section to learn more. | ||
|
||
**Important** - Keep this file in sync with other push modules in SDK. | ||
--> | ||
<key>NSPrivacyCollectedDataTypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyCollectedDataType</key> | ||
<string>NSPrivacyCollectedDataTypeProductInteraction</string> | ||
<key>NSPrivacyCollectedDataTypeLinked</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypeTracking</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypePurposes</key> | ||
<array> | ||
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyAccessedAPITypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyAccessedAPIType</key> | ||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string> | ||
<key>NSPrivacyAccessedAPITypeReasons</key> | ||
<array> | ||
<string>CA92.1</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyTracking</key> | ||
<false/> | ||
</dict> | ||
</plist> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<!-- | ||
See DataPipelines module for documentation of this file. Including resources for each section to learn more. | ||
|
||
**Important** - Keep this file in sync with other push modules in SDK. | ||
--> | ||
<key>NSPrivacyCollectedDataTypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyCollectedDataType</key> | ||
<string>NSPrivacyCollectedDataTypeProductInteraction</string> | ||
<key>NSPrivacyCollectedDataTypeLinked</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypeTracking</key> | ||
<false/> | ||
<key>NSPrivacyCollectedDataTypePurposes</key> | ||
<array> | ||
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> | ||
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string> | ||
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyAccessedAPITypes</key> | ||
<array> | ||
<dict> | ||
<key>NSPrivacyAccessedAPIType</key> | ||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string> | ||
<key>NSPrivacyAccessedAPITypeReasons</key> | ||
<array> | ||
<string>CA92.1</string> | ||
</array> | ||
</dict> | ||
</array> | ||
|
||
<key>NSPrivacyTracking</key> | ||
<false/> | ||
</dict> | ||
</plist> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we have to specify the things we capture, like app name etc?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, you do not need to specify what you capture. Instead specify what categories that you capture.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I may have misunderstood your question.
Looking at the docs for
NSPrivacyCollectedDataTypes
, I do not see anything in there regarding app name, app version.If you see a category in this apple doc that is missing in this file, please mention the missing category in our notion doc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was based on this where it mentions adding custom data types but maybe we can skip these as I am unsure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm open to skipping adding any custom data types for now. Apples documents aren't always the most clear, so it will be tough to determine what qualifies as a custom data type that we might need to declare.