Menggunakan AppsFlyer OpenGDPR API untuk mematuhi peraturan privasi

Sekilas : Artikel ini ditujukan untuk penggunaan klien AppsFlyer, sering disebut sebagai pengiklan, atau pemilik aplikasi, yang menggunakan platform AppsFlyer untuk mengatribusikan data pengguna aplikasi. Pemilik aplikasi mengimplementasikan OpenGDPR API untuk mematuhi hukum perlindungan data yang berlaku seperti CCPA (California), GDPR (Eropa), dan LGPD (Brasil)

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  Untuk pertanyaan apa pun terkait dengan Kebijakan Privasi Layanan ini atau untuk menghubungi petugas perlindungan data kami, silakan kirim email kepada kami ke: privacy@appsflyer.com. Untuk kepentingan Pasal 27 Peraturan Perlindungan Data Umum, perwakilan AppsFlyer dalam UE adalah AppsFlyer Germany GmbH Kurfürstendamm 11, c/o WeWork, 10719 Berlin, Germany (hubungi privacy@appsflyer.com; +49-30-3119-9129)

Peraturan perlindungan privasi

Dalam artikel ini, referensi peraturan privasi mencakup peraturan yang tercantum dalam tabel berikut.  

Peraturan Logo Deskripsi
GDPR GDPR.png Peraturan Perlindungan Data Umum adalah peraturan UE (Uni Eropa) yang berkaitan dengan perlindungan data dan privasi untuk warga negara Uni Eropa
CCPA CCPA.png Undang-Undang Privasi Konsumen California 
LGPD LGPD.png Lei Geral de Proteção de Dados
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

Gunakan GDPR Requests API seperti yang dijelaskan pada sesi ini untuk menerapkan kepatuhan terhadap GDPR. 

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

Pemilik Aplikasi harus menerapkan perubahan UI ke aplikasi mereka, sehingga Pengguna Aplikasi dapat mengajukan permintaan. Perhatikan bahwa permintaan GDPR adalah per satu pengguna pada 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
  • Contoh: 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 

curl --location --request POST 'https://hq1.appsflyer.com/gdpr/opengdpr_requests?api_token=[api_token]' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{ 
 "subject_request_id":"f4e5a271-f25e-4107-b681-************",
 "subject_request_type":"erasure",
 "submitted_time":"2020-07-05T10:00:00Z",
 "subject_identities":[ 
  { 
   "identity_type":"android_advertising_id",
   "identity_value":"55*****-****-****-************",
   "identity_format":"raw"
  }
 ],
 "api_version":"0.1",
 "property_id":"com.*********.*******.********",
 "status_callback_url":"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 empat belas 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.

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).

7. Permintaan log

Admin akun dapat mengakses permintaan GDPR yang diajukan di Dashboard Log.

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

8. Kode pengembalian API GDPR dan pesan kesalahan

Kode pengembalian HTTP API GDPR dan pesan kesalahan dirinci dalam sesi ini. 

Kode pengembalian Deskripsi
201 Dibuat
202 Permintaan pembatalan diterima
400

Bad request (permintaan bermasalah). Bodi berisi kode dan pesan kesalahan seperti yang tercantum pada tabel berikut.

Kode pengembalian API GDPR

Kode pengembalian kode 400 - bad request

Pesan yang memiliki kode 400 berisi JSON dengan kode dan pesan kesalahan.

{ "error": { "Code":400, "af_gdpr_code": "%AF error code%", "message":"%error message text%" } }

Kode Error

Deskripsi (pesan) kesalahan

e111 Melebihi batas nilai
e211 Tidak dapat membatalkan permintaan dengan status tidak valid
e212 Permintaan tidak diizinkan. Penghapusan sedang berlangsung untuk identifier (pengidentifikasi).
e213 Permintaan sudah ada
e214 Permintaan tidak ditemukan
e311 Jenis konten permintaan tidak valid
e312 Versi API tidak valid
e313 subject_request_id tidak valid
e314 submitted_time format tidak valid
e315 status_callback_url length tidak valid
e316 status_callback_url format tidak valid
e317 app_id format tidak valid
e318 identity_type tidak valid
e319 Platform aplikasi tidak sesuai dengan jenis identitas
e320 identity_type tidak valid
e321 Pengguna LAT tidak didukung via api
e322 subject_request_type tidak valid
e323 subject_identities format tidak valid
e324 subject_identities length tidak valid
e325 subject_identities value tidak valid
e411 AppID salah atau bukan milik akun Anda
e412 Tidak ada hak akses untuk membatalkan permintaan penghapusan
e413 Tidak ada hak akses untuk melihat permintaan
e511 Masalah internal, tunggu 60 menit lalu coba lagi. Jika masalah berlanjut, hubungi tim dukungan AppsFlyer. support@AppsFlyer.com 
Pesan kode pengembalian 400 bad request

Batasan

  • Batasan nilai: 80 permintaan GDPR setiap 2 menit pada level akun. 
Apakah artikel ini membantu?