วิธีขอโฆษณา AdMob ที่ไม่ได้ปรับให้เหมาะกับแต่ละบุคคลด้วย Unified Messaging Platform SDK ใหม่สำหรับ Android
ฉันกำลังใช้ไลบรารีคำยินยอมของ Google (เลิกใช้แล้ว) เพื่อขอคำยินยอมสำหรับโฆษณาที่ปรับตามโปรไฟล์ของผู้ใช้ในยุโรป เอกสารประกอบระบุว่าหากสถานะการยินยอมของผู้ใช้ถูกตั้งค่าเป็น PERSONALIZED หรือ NON_PERSONALIZED แล้วคุณสามารถส่งต่อคำยินยอมไปยัง SDK โฆษณาบนอุปกรณ์เคลื่อนที่ของ Googleด้วย:
Bundle extras = new Bundle();
extras.putString("npa", "1");
AdRequest request = new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class, extras)
.build();
ตอนนี้ผมต้องการที่จะย้ายไปอยู่ที่ใหม่แบบครบวงจรแพลตฟอร์มการส่งข้อความ SDK สำหรับ Android เอกสารนี้ค่อนข้างตรงไปตรงมา แต่จะอธิบายวิธีขอความยินยอมเท่านั้นไม่ใช่วิธีใช้คำยินยอม นี้ไม่ได้หมายความว่าเมื่อใช้ SDK ขานใหม่สำหรับ Android ของเราไม่ได้มีการตั้งค่า"npa"
เป็น"1"
เมื่อขอโฆษณา AdMob สำหรับผู้ใช้ที่ไม่ยินยอมให้มีการโฆษณาที่ปรับเปลี่ยน?
แก้ไข 25 ส.ค. 2563
เมื่อวานนี้ฉันพบบทสนทนานี้ซึ่งมีคนจากทีม SDK โฆษณาบนอุปกรณ์เคลื่อนที่ตอบคำถามเดียวกันกับที่ฉันถามที่นี่ เขาบอกว่า:
"การส่งต่อความยินยอม" แบบเดิมผ่านnpa = 1จะได้รับเกียรติจาก SDK ของเราจนกว่าจะมีการแจ้งให้ทราบต่อไป
แก้ไข 31 ส.ค. 2563
ฉันเริ่มการสนทนาใหม่โดยถามคำถามเดียวกันกับคำถามในโพสต์นี้ แต่ไม่ได้รับคำตอบใด ๆ
คำตอบ
ด้วยแพลตฟอร์มการส่งข้อความใหม่ Unified Google จะทำงานเป็นแพลตฟอร์มผู้จัดการได้รับความยินยอม CMP เหล่านี้ใช้สตริง TCF เพื่อจัดเก็บค่ากำหนดความยินยอมของผู้ใช้ Google ตรวจสอบสตริง TCF นี้เพื่อดูว่าโฆษณาใดสามารถแสดงได้
ตามเอกสารของ Google :
Google จะแสดงโฆษณาที่ปรับให้เหมาะกับแต่ละบุคคลเมื่อเป็นไปตามเกณฑ์ทั้งหมดต่อไปนี้:
- ผู้ใช้ปลายทางให้ความยินยอมจาก Google ในการจัดเก็บและ / หรือเข้าถึงข้อมูลบนอุปกรณ์
- สร้างโปรไฟล์โฆษณาในแบบของคุณ
- เลือกโฆษณาที่ปรับให้เหมาะกับแต่ละบุคคล
และผลประโยชน์โดยชอบด้วยกฎหมาย (หรือคำยินยอมที่ผู้เผยแพร่กำหนดค่า CMP ของตนเพื่อขอ) กำหนดให้ Google:
- เลือกโฆษณาพื้นฐาน
- วัดประสิทธิภาพโฆษณา
- ใช้การวิจัยตลาดเพื่อสร้างข้อมูลเชิงลึกของผู้ชม
- พัฒนาและปรับปรุงผลิตภัณฑ์
หากไม่ตรงตามข้อกำหนดการยินยอมสำหรับโฆษณาที่ปรับให้เหมาะกับแต่ละบุคคล Google จะแสดงโฆษณาที่ไม่ได้ปรับให้เหมาะกับแต่ละบุคคลเมื่อเป็นไปตามเกณฑ์ทั้งหมดต่อไปนี้:
- จัดเก็บและ / หรือเข้าถึงข้อมูลบนอุปกรณ์
ผลประโยชน์โดยชอบด้วยกฎหมาย (หรือคำยินยอมซึ่งผู้เผยแพร่กำหนดค่า CMP ของตนเพื่อขอ) กำหนดขึ้นเพื่อให้ Google:
- เลือกโฆษณาพื้นฐาน
วัดประสิทธิภาพโฆษณาใช้การวิจัยตลาดเพื่อสร้างข้อมูลเชิงลึกของผู้ชมพัฒนาและปรับปรุงผลิตภัณฑ์- เปิดใช้งาน Google ในรายชื่อผู้ให้บริการ
อัปเดต 20 ตุลาคม: ไม่จำเป็นต้องใช้ 3,4,5 อีกต่อไปเพื่อแสดงโฆษณาที่ไม่ใช่ส่วนบุคคล SO @Georg เพื่อให้ข้อมูลนี้
หากไม่ตรงตามเงื่อนไขข้างต้น Google จะไม่แสดงโฆษณา ..
ฉันหวังว่านี่จะตอบคำถามของคุณ แต่หากคุณต้องการข้อมูลเพิ่มเติมโปรดแจ้งให้เราทราบ!
เพียงจำประโยคเหล่านี้:
อย่ายอมแพ้และแก้วจะเต็มครึ่งเสมอ :-) -> มองโลกในแง่ดี!
ดังนั้นจะไม่มีทางแก้ไขอีกต่อไปในการเปลี่ยนแปลงสิ่งที่ใช้ได้ในยุโรป สิ่งที่เราทำได้คือ:
หลังจากที่ผู้ใช้กด "ยอมรับ" หรือกด "ส่ง" ในแบบฟอร์มตัวเลือกการระดมทุนแล้วพารามิเตอร์บางอย่างจะถูกบันทึกไว้ในค่ากำหนดที่ใช้ร่วมกันเริ่มต้นบน Android เมื่อกล่องโต้ตอบถูกปิด !! สิ่งเดียวกันนี้กำลังเกิดขึ้นบน IOS (ดังนั้นทุกคนสามารถตั้งโปรแกรมโซลูชันนี้ได้อย่างรวดเร็วเช่นกัน
ก่อนหน้านี้เป็นสิทธิ์ของ "เรา" ในการนำเสนอแอปที่ จำกัด นั่นหมายความว่าก่อนหน้านี้คุณสามารถเสนอเวอร์ชันเบาพร้อมข้อ จำกัด และเวอร์ชันเต็มให้ซื้อได้
ดังนั้นสิ่งที่เราทำได้คือการอ่านคีย์ pref
คีย์การตั้งค่าสำหรับกรอบความโปร่งใสและความยินยอมมีอธิบายไว้ที่นี่: https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#in-app-details
เราต้องการคีย์ pref ต่อไปนี้เพื่ออ่าน (Android หรือ IOS):
IABTCF_PurposeLegitimateInterests
IABTCF_VendorConsents
IABTCF_PurposeConsents
ดังนั้นขึ้นอยู่กับค่าเหล่านี้เราสามารถตรวจสอบได้ว่ามีการแสดงโฆษณาหรือโฆษณา "ไม่" แสดงหลังจากปิดแบบฟอร์ม
จากนั้นคุณสามารถบล็อกตัวเลือกที่สำคัญในแอปของคุณและอาจแสดงกล่องโต้ตอบ:
"โฆษณาถูกปิดใช้งานคุณกำลังใช้แอปเวอร์ชัน light อยู่ในขณะนี้คุณสามารถเปลี่ยนใจหรือซื้อเวอร์ชันโปร ฯลฯ เป็นต้น"
-> อาจเพิ่มปุ่มหลังจากคำอธิบาย "เปิดใช้งานโฆษณา" และแสดงแบบฟอร์มอีกครั้งหรือ "ซื้อ Pro"
ขึ้นอยู่กับว่าคุณมาทำอะไรที่นี่!
ชั้นเรียนของฉันอยู่ใน kotlin หรือ java!
สิ่งที่คุณต้องทำ: ใส่ UMP SDK จาก Google เพื่อการพึ่งพาของคุณในการไล่ระดับและตั้งค่าตัวเลือกการระดมทุนสำหรับแอปของคุณในบัญชีผู้ดูแลระบบของคุณ! จากนั้นเขียนกิจวัตรของคุณเพื่อตั้งค่าแบบฟอร์มตัวเลือกการระดมทุน
ในการเลือกระดมทุนเพิ่มเฉพาะ "Google" เป็นผู้ให้บริการ!
https://developers.google.com/admob/ump/android/quick-start
คุณยังต้องตั้งโปรแกรมหลาย ๆ อย่างด้วยตัวเองเพื่อให้ทุกอย่างทำงานต่อไป แต่อย่างน้อยชั้นเรียนนี้จะช่วยให้คุณได้รับข้อมูลว่ามีการแสดงโฆษณาหรือไม่ นอกจากนี้คุณต้องแจ้งให้ตัวเองทราบว่าทุกอย่างทำงานอย่างไรเพื่อเจาะลึกเรื่องนี้
จำไว้ !!!
ทดสอบด้วยรหัสทดสอบใน admob เสมอ !! อย่าใช้รหัสการผลิตมิฉะนั้นคุณอาจมีปัญหากับบัญชีของคุณ! สร้างแอปทดสอบใหม่ใน admob พร้อมรหัสทดสอบเฉพาะในกรณีที่คุณต้องการทำการทดสอบก่อน !!!
วิธีใช้คลาส:
Consentfunctions consentfunction;
consentfunction = new Consentfunctions(this);
// Check if Ads are serving
if (consentfunction.AdsAreServing()) {
// No need to do anything because everything is fine
} else {
// Decide what to do here. Block important functions of your app
// and open a help page with explanations etc. etc
}
รหัส Java:
public class ConsentFunctions {
private ConsentInformation consentInformation;
SharedPreferences.Editor editor;
private Context mContext;
private String consinfosaved;
private String vendorconsent;
private SharedPreferences preferences;
private String LegitimateInterests;
public ConsentFunctions(Context context){
mContext = context;
preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
consentInformation = UserMessagingPlatform.getConsentInformation(mContext);
}
public Boolean AdsAreServing() {
vendorconsent = preferences.getString("IABTCF_VendorConsents", "");
LegitimateInterests = preferences.getString("IABTCF_PurposeLegitimateInterests", "");
// Not required = not in europe -- return true because everything is fine !
if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.NOT_REQUIRED) {
return true;
}
Boolean vendoractive = vendorconsent.contains("1");
consinfosaved = preferences.getString("IABTCF_PurposeConsents", "0");
switch (consinfosaved) {
case "1011": // Personal 1 - rest legitimate interest
case "1111111011": // Personal 2
case "1111001011": // Personal 3
case "1000001011": // Non personal ok
case "1100001011": // Non Peronal ok
case "11": // Non Personal ok - rest is legitimate interest
case "1111001001":
case "1": // Non personalized
{
// Check also if vendor is activated
if (!vendoractive) {
return false;
}
else {
// Legitimate must be always = 0100111011 and vendor contains 1
if (LegitimateInterests.equals("0100111011") || LegitimateInterests.equals("0100001011"))
return true;
else
return false;
}
}
default: {
return false;
}
}
}
}
รหัส Kotlin:
class ConsentFunctionsKotlin(private val mContext: Context) {
private val consentInformation: ConsentInformation
var editor: SharedPreferences.Editor
private var consinfosaved: String? = null
private var vendorconsent: String? = null
private val preferences: SharedPreferences
private var LegitimateInterests: String? = null
init {
preferences = PreferenceManager.getDefaultSharedPreferences(mContext)
consentInformation = UserMessagingPlatform.getConsentInformation(mContext)
}
fun AdsAreServing(): Boolean {
vendorconsent = preferences.getString("IABTCF_VendorConsents", "")
LegitimateInterests = preferences.getString("IABTCF_PurposeLegitimateInterests", "")
// Not required = not in europe -- return true because everything is fine !
if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.NOT_REQUIRED) {
return true
}
val vendoractive = vendorconsent!!.contains("1")
consinfosaved = preferences.getString("IABTCF_PurposeConsents", "0")
return when (consinfosaved) {
"1111001001","1011", "1111111011", "1111001011", "1000001011", "1100001011", "11", "1" -> {
// Check also if vendor is activated
if (!vendoractive) {
false
} else {
// Legitimate must be always = 0100111011 and vendor contains 1
if (LegitimateInterests == "0100111011" || LegitimateInterests == "0100001011") true else false
}
}
else -> {
false
}
}
}
}