Kepatuhan Peraturan Perlindungan Data Umum (GDPR) dan Undang-Undang Perlindungan Privasi Konsumen California (CCPA) dalam menggunakan API

Sekilas : Artikel ini adalah untuk penggunaan pelanggan AppsFlyer (pemilik aplikasi) dengan menggunakan platform AppsFlyer untuk data pengguna aplikasi atribut. Pemilik aplikasi menerapkan API OpenGDPR untuk mematuhi undang-undang perlindungan data yang berlaku seperti CCPA dan GDPR.

Pernyataan dari advokat kami: Tidak ada pernyataan di sini yang merupakan nasihat hukum. Panduan ini hanya disediakan untuk informasi dan kenyamanan Anda. Anda harus bekerja sama dengan penasihat hukum dan profesional lainnya untuk menentukan dengan pasti apakah  GDPR, CCPA, atau undang-undang lainnya berlaku atau tidak untuk Anda. Hubungan privasi antara Anda dan AppsFlyer diatur oleh Kebijakan Privasi Layanan AppsFlyer   

Peraturan perlindungan privasi

Dalam artikel ini, referensi ke peraturan privasi meliputi:

  • GDPR: Peraturan Perlindungan Data Umum adalah peraturan Uni Eropa (UE) terkait perlindungan data dan privasi untuk warga negara Uni Eropa.
  • CCPA: Undang-Undang Perlindungan Privasi Konsumen California 

Istilah peraturan perlindungan privasi, GDPR, dan CCPA dapat saling dipertukarkan dalam artikel ini. 

Inisiatif OpenGDPR

Untuk menangani dan mengelola permintaan dari Subjek Data sesuai dengan peraturan perlindungan privasi, AppsFlyer, bersama-sama dengan mParticle, Amplitude, dan Braze, menginisiasi protokol OpenGDPR.

OpenGDPR adalah framework open source terpadu, yang memfasilitasi kerja sama antara perusahaan teknologi untuk penggunaan data konsumen yang wajar dan transparan. OpenGDPR memungkinkan vendor untuk melakukan tindakan privasi data di berbagai sistem yang memproses dan menyimpan data konsumen.

Anda dapat membaca inisiatif tersebut lebih lanjut di sini.

Definisi

Istilah GDPR Istilah AppsFlyer Deskripsi
User Pengguna Aplikasi atau Pengguna Akhir Pengguna Aplikasi adalah orang yang datanya dikumpulkan
Pengontrol Data Pemilik Aplikasi atau Pengiklan Pemilik Aplikasi menentukan tujuan dan sarana yang digunakan untuk memproses data pribadi. 
Pemroses Data AppsFlyer dan mitra AppsFlyer dan partnernya memproses data pribadi atas nama pengontrol data

Persyaratan GDPR

GDPR merinci hak-hak wajib dari Subjek Data, yang harus dipatuhi oleh Pengontrol Data. Untuk keperluan API, hak-hak ini diterjemahkan ke dalam berbagai jenis permintaan. Berikut ini adalah detail tentang bagaimana AppsFlyer memproses berbagai jenis permintaan. 

Jenis permintaan

(Hak)

Definisi GDPR

Memproses permintaan oleh AppsFlyer 

Akses

  • Jika diminta, Pengguna Aplikasi memiliki hak untuk mengetahui apa, mengapa, dan untuk berapa lama pemilik Aplikasi akan memproses data mereka.
  • Jika data dibagikan dengan pihak ketiga, seperti AppsFlyer, Pengguna Aplikasi memiliki hak untuk mengetahui siapa pihak ketiga tersebut.
  • Hak untuk mengetahui kategori data yang sedang diproses.
  • Jika ada pemrosesan otomatis yang memiliki efek signifikan pada user
Pemilik Aplikasi menerima salinan data pribadi Pengguna Aplikasi yang diproses.

 Portabilitas

Pengguna Aplikasi harus menerima semua data pribadi mereka dalam format yang terstruktur, umum digunakan, dan dalam format yang dapat dibaca sistem, seperti file CSV.

Pemilik Aplikasi menerima salinan data pribadi Pengguna Aplikasi yang diproses.

Rektifikasi

Mengizinkan Pengguna Aplikasi untuk mengoreksi data miliknya jika mereka melihat adanya ketidakakuratan atau ketidakbenaran. Pemilik Aplikasi harus menghapus atau mengoreksi ketidakakuratan atau ketidaklengkapan data.

  • AppsFlyer menghapus data Pengguna Aplikasi yang direkam sebelum tanggal permintaan koreksi .
  • Data yang diterima setelahnya direkam oleh AppsFlyer.

Penghapusan

Hak penghapusan memaksa Pemilik Aplikasi untuk menghapus data pribadi dalam waktu satu bulan sejak diterimanya permintaan tersebut.

Data dihapus

GDPR Requests API AppsFlyer

Kepatuhan terhadap persyaratan GDPR yang dijelaskan dalam dokumen ini dipenuhi menggunakan GDPR Requests API AppsFlyer

  1. Permintaan GDPR: Melakukan salah satu dari jenis permintaan di atas: akses, portabilitas, penghapusan, koreksi.
  2. Permintaan Status - Kueri terhadap status permintaan GDPR saat ini
  3. Permintaan Keterangan: Pertanyaan tentang versi API dan Format Data yang didukung
  4. Pembatalan: Membatalkan permintaan GDPR selama tahap tertunda.

Pemilik Aplikasi harus menerapkan perubahan UI ke aplikasi mereka, sehingga Pengguna Aplikasi dapat mengajukan permintaan. Harap diperhatikan bahwa permintaan GDPR adalah per satu pengguna dalam satu waktu.

1. Permintaan GDPR

Alur Permintaan GDPR

Jenis-jenis permintaan GDPR, akses, portabilitas, penghapusan, dan koreksi, memiliki alur yang sama:

  1. Pengguna Aplikasi mengajukan permintaan.
  2. Pemilik Aplikasi membuat permintaan GDPR (lihat di bawah) dan mengirimkannya ke AppsFlyer.
  3. AppsFlyer menerima permintaan tersebut dan memberi respons "201 OK" untuk permintaan yang valid.
  4. Selama 48 jam berikutnya, permintaan ini menunggu giliran untuk diproses dan memiliki status tertunda. Pengguna Aplikasi dapat membatalkan permintaan tersebut. 
  5. Setelah 48 jam, status permintaan berubah menjadi in_progress (dalam proses). AppsFlyer mengirimkan postingan balik (postback)'perubahan status’. Permintaan tersebut tidak dapat dibatalkan. 
  6. a) Dalam 28 hari, AppsFlyer akan memenuhi permintaan tersebut.
    Dalam kasus penghapusan atau koreksi, data Pengguna Aplikasi dihapus.
    Dalam kasus portabilitas or akses, data Pengguna Aplikasi dapat diakses di AppsFlyer dashboard di bawah GDPR, atau via Request API (lihat di bawah).
    b) Status permintaan diperbarui menjadi selesai.  AppsFlyer mengirimkan postingan balik perubahan status .

Format Permintaan GDPR

GDPR Request API dapat dikirimkan via HTTP POST ke endpoint berikut ini - 

https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token=[api token]

Token API adalah token API yang sama dengan yang digunakan untuk Pull API. Admin,  mengambil token Pull API dari halaman token API di Dasbor.  

Parameter
Nama Properti Wajib Deskripsi
subject_request_id Ya String UUID v4. Dihasilkan oleh pengontrol pada saat pengajuan permintaan ke Prosesor. String ini dapat digunakan untuk memeriksa status permintaan, memperbarui, atau membatalkannya.
subject_request_type Ya

Nilai string yang mewakili jenis Permintaan GDPR.  Nilai bantuan:

  • erasure
  • portability
  • access
  • rectification
subject_identities Ya
  • Serangkaian objek identitas yang mendefinisikan identitas pemohon (lihat di bawah).
  • Setiap permintaan hanya dapat berisi satu identitas subjek.
submitted_time Ya
  • String tanggal RFC 3339 yang mewakili waktu permintaan aktual dari subjek data
  • Stempelwaktu  di UTC
property_id Ya

String yang mewakili aplikasi mobile yang mana�permintaan ini dicakup

Contoh:

  • iOS: id123456789 
  • Android: com.example, com.publishers.name 
  • Android out-of-store: com.publisher.name-channel
    Catatan: Dalam beberapa kasus, pemilik aplikasi merekam atribusi out-of-store menggunakan nama Google Play Android. Dalam kasus ini, gunakan nama aplikasi reguler seperti yang ditampilkan di Dashboard.
api_version Tidak Versi string yang diinginkan dari API GDPR Requests
status_callback_urls Ya
  • Array untuk status callback endpoint yang akan dikirim ke perubahan status permintaan.
  • Hanya titik akhir https yang didukung.
Objek Subject_identities
Jenis Objek Wajib Deskripsi
identity_type Ya
  • Jenis identitas dalam format string:
    • ios_advertising_id
    • android_advertising_id
    • fire_advertising_id
    • microsoft_advertising_id
    • appsflyer_id
  • Misalnya: "android_advertising_id"
identity_value Ya
  • Format: String
  • Misalnya: "a7551968-d5d6-44b2-9831-815ac9017798"
identity_format Ya
  • Metode ini digunakan untuk menyandikan identity_value: raw adalah satu-satunya yang didukung:
  • Contoh: "raw"

Contoh permintaan penghapusan GDPR 

HTTP POST 
https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token={api token] 
HTTP/1.1Host: example.processo.com
Accept: application/json
Content-Type: application/json
{ 
 "subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
 "subject_request_type":"erasure",
 "submitted_time":"2018-10-02T15:00:00Z",
 "subject_identities":[ 
  { 
   "identity_type":"android_advertising_id",
   "identity_value":"a55684fd-j661-46df-9149-f7bfd652egge",
   "identity_format":"raw"
  }
 ],
 "api_version":"0.1",
 "property_id":"com.example",
 "status_callback_urls":[ 
  "https://examplecontroller.com/opengdpr_callbacks"
 ]
}
 

 

Contoh Kode Permintaan Penghapusan GDPR

JavaPythonNode.jsC#
/* 
using the okhttp package install from maven
https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
 */

import okhttp3.*;
import java.io.IOException;

public class GdprSendRequest {
 public static void main(String[] args){

  OkHttpClient client = new OkHttpClient();
  RequestBody body = RequestBody.create(null, "" +
  "{\r\n\"subject_request_id\": \"<SUBJECT_ID>\"," +
  "\r\n\"subject_request_type\": \"erasure\"," +
  "\r\n\"submitted_time\": \"2018-11-02T15:00:00Z\"," +
  "\r\n\"subject_identities\": [\r\n" +
  "{\r\n\"identity_type\": \"android_advertising_id\"," +
  "\r\n\"identity_value\": \"<ADVERTISING_ID>\"," +
  "\r\n\"identity_format\": \"raw\"\r\n}" +
   "\r\n]," +
   "\r\n\"property_id\": \"com.example.application\"}");

  Request request = new Request.Builder()
  .url("https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token=<API_TOKEN>")
  .post(body)
  .addHeader("Content-Type", "application/json")
   .addHeader("Accept", "application/json")
  .build();

  try {
   Response response = client.newCall(request).execute();
   System.out.println(response.code());
   System.out.println(response.body().string());
   System.exit(0);
  } catch (IOException e) {
   e.printStackTrace();
   System.exit(1);
  }
 }
}

2. Permintaan Status

Setiap permintaan GDPR yang diajukan nanti akan dapat dilihat statusnya dengan menentukan subject_request_id. Ada empat jenis status yang tersedia:

  1. pending - Permintaan valid telah diterima dan sedang dalam antrean
  2. in_progress - Permintaan sedang diproses
  3. completed - Permintaan telah diselesaikan
  4. canceled - Permintaan telah dibatalkan

Format Permintaan Status

Permintaan dapat dikirimkan via HTTP GET ke endpoint berikut:

https://hq1.appsflyer.com/gdpr/opengdpr_requests/[subject_request_id]?api_token=[api token]

Contoh Respons Status

HTTP/1.1 200 OK
Content-Type: application/json
X-OpenGDPR-Processor Domain: example processor.com
X-OpenGDPR-Signature:
kiGlog3PdQx+FQmB8wYwFC1fekbJG7Dm9WdqgmXc9uKkFRSM4uPzylLi7j083461xLZ+mUloo3tpsmyIZpt5eMfgo7ejXPh6lqB4ZgCnN6+1b6Q3NoNcn/+11UOrvmDj772wvg6uIAFzsSVSjMQxRs8LAmHqFO4cF2pbuoPuK2diHOixxLj6+t97q0nZM7u3wmgkwF9EHIo3C6G1SI04/odvyY/VdMZgj3H1fLnz+X5rc42/wU4974u3iBrKgUnv0fcB4YB+L6Q3GsMbmYzuAbe0HpVA17ud/bVoyQZAkrW2yoSy1x4Ts6XKba6pLifIHf446Bubsf5r7x1kg6Eo7B8zur666NyWOYrglkOzU4IYO8ifJFRZZXazOgk7ggn9obEd78GBc3kjKKZdwaCrLx7WV5y9TMDCf+2FILOJM/MwTUy1dLZiaFHhGdzld2AjbjK1CfVzyPssch0iQYYtbR49GhumvkYl11S4oDfu0c3t/xUCZWg0hoR3XL3B7NjcrlrQinB1KbyTNZccKR0F4Lk9fDgwTVkrAg152UqPyzXxpdzXjfkDkSEgAevXQwVJWBNf18bMIEgdH2usF/XauQoyrne7rcMIWBISPgtBPj3mhcrwscjGVsxqJva8KCVCKD/4Axmo9DISib5/7A6uczJxQG2Bcrdj++vQqK2succ=
{
 "controller_id":"example_controller_id",
 "expected_completion_time":"2018-11-01T15:00:01Z",
 "subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
 "request_status":"pending",
 "api_version":"0.1"
}

Postback Status

Seperti dijelaskan pada Alur Permintaan GDPR di atas, saat status permintaan GDPR berubah, dari pending menjadi in_progress kemudian completed, AppsFlyer mengirimkan postback GDPR ke endpoint yang meminta, disertai dengan properti status_callback_urls .

Contoh Status Postback:

POST /opengdpr_callbacks HTTP/1.1
Host: examplecontroller.com
Content-Type: application/json
X-OpenGDPR-Processor Domain: appsflyer.com
X-OpenGDPR-Signature: kiGlog3PdQx+FQmB8wYwFC1fekbJG7Dm9WdqgmXc9uKkFRSM4uPzylLi7j083461xLZ+mUloo3tpsmyIZpt5eMfgo7ejXPh6lqB4ZgCnN6+1b6Q3NoNcn/+11UOrvmDj772wvg6uIAFzsSVSjMQxRs8LAmHqFO4cF2pbuoPuK2diHOixxLj6+t97q0nZM7u3wmgkwF9EHIo3C6G1SI04/odvyY/VdMZgj3H1fLnz+X5rc42/wU4974u3iBrKgUnv0fcB4YB+L6Q3GsMbmYzuAbe0HpVA17ud/bVoyQZAkrW2yoSy1x4Ts6XKba6pLifIHf446Bubsf5r7x1kg6Eo7B8zur666NyWOYrglkOzU4IYO8ifJFRZZXazOgk7ggn9obEd78GBc3kjKKZdwaCrLx7WV5y9TMDCf+2FILOJM/MwTUy1dLZiaFHhGdzld2AjbjK1CfVzyPssch0iQYYtbR49GhumvkYl11S4oDfu0c3t/xUCZWg0hoR3XL3B7NjcrlrQinB1KbyTNZccKR0F4Lk9fDgwTVkrAg152UqPyzXxpdzXjfkDkSEgAevXQwVJWBNf18bMIEgdH2usF/XauQoyrne7rcMIWBISPgtBPj3mhcrwscjGVsxqJva8KCVCKD/4Axmo9DISib5/7A6uczJxQG2Bcrdj++vQqK2succ=

{
"controller_id":"example controller id at the processor",
"expected_completion_time":"2018-11-01T15:00:01Z",
"status_callback_url":"https://examplecontroller.com/opengdpr_callbacks",
"Subject_request_id":"a7551968-d5d6-44b2-9831-815ac9017798",
"Request_status":"pending"
}

3. Permintaan Laporan

Saat Permintaan Akses atau Permintaan Portabilitas selesai, Anda dapat mendownload laporan via HTTP GET ke endpoint berikut:

https://hq1.appsflyer.com/gdpr/download/[REQUEST_ID]?api_token=[TOKEN]

Laporan yang dihasilkan akan tersedia selama tujuh hari dari waktu penyelesaian.

4. Permintaan Keterangan

Untuk mempelajari format yang didukung oleh AppsFlyer, permintaan keterangan dapat dikirimkan via HTTP GET ke endpoint berikut:

https://hq1.appsflyer.com/gdpr/discovery?api_token=[api token]

Contoh Respons Keterangan

HTTP/1.1 200 OK
Content-Type: application/json
{
 "api_version": "0.1",
 "supported_identities": [
 {
  "identity_type": "android_advertising_id",
  "identity_format": "raw"
 },
 ],
 "supported_subject_request_types": [
 "erasure", "access", "portability", "rectification"
 ],
 "processor_certificate": "https://exampleprocessor.com/cert.pem"
}

5. Permintaan Pembatalan

Anda dapat membatalkan permintaan GDPR, berdasarkan  subject_request_id, tetapi hanya selama fase pending . 

Untuk melakukan itu, kirimkan HTTP DELETE dengan subject_request_id ke:

https://hq1.appsflyer.com/gdpr/opengdpr_requests/[subject_request_id]?api_token=[api token]

Respons Pembatalan

Saat permintaan pembatalan GDPR diterima, AppsFlyer akan mengembalikan respons HTTP dengan kode status 202 dan beberapa parameter lainnya. Untuk informasi lebih lanjut, lihat GDPR bab "Properti Respons Pembatalan".

Setelah pembatalan permintaan diproses, AppsFlyer mengirimkan postback dengan status cancelled

6. Menguji API untuk Permintaan GDPR

API AppsFlyer ini adalah API pengujian untuk Requests GDPR API AppsFlyer. 

Bagaimana Cara Kerja API ini?

API pengujian bekerja seperti berikut:

1. Setelah permintaan GDPR dibuat, permintaan tersebut langsung mendapat status ‘Pending’. Untuk tujuan pengujian, status berubah setiap 30 detik.

2. Jika endpoint untuk postback status telah disertakan ke dalam permintaan GDPR, postback pertama akan dikirim segera setelah permintaan dan dua postback status tambahan akan dikirim dalam interval waktu 30 detik.

Endpoint Pengujian Permintaan GDPR:

https://hq1.appsflyer.com/gdpr/stub?api_token=[api token]

Endpoint Pengujian Permintaan Status:

https://hq1.appsflyer.com/gdpr/stub/[request id]?api_token=[api token]

Endpoint Pengujian Permintaan Keterangan:

https://hq1.appsflyer.com/gdpr/stub/discovery?api_token=[api token]

Endpoint Permintaan Pembatalan:

https://hq1.appsflyer.com/gdpr/stub/[request id]?api_token=[api token]

 Catatan

  • Token API yang valid harus disertakan bersamaan dengan permintaan API.
  • Pada properti ‘property_id’, ID App harus dimiliki oleh pemilik akun (berdasarkan token API).

Log Permintaan

Semua permintaan GDPR yang dikirimkan dapat dilihat di Log Dashboard, dan hanya dapat diakses oleh pemilik akun.

Laporan permintaan akses dan portabilitas lengkap juga dapat didownload dari dashboard ini.

Untuk mengakses Log Dashboard:

  1. 1.  Buka dashboard utama dan klik nama user anda.
  2. Klik Log dan jendela berikut dibuka:

GDPR_Table.png

Batasan

  • Akun klien dapat mengirim hingga 80 permintaan GDPR setiap 2 menit.

 

Apakah artikel ini membantu?