gpt4 book ai didi

Android - 欧盟 Cookie 法

转载 作者:IT老高 更新时间:2023-10-28 23:25:22 29 4
gpt4 key购买 nike

即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.permission.ACCESS_COARSE_LOCATION)。因此,我创建了一个功能来测试欧盟用户:

安卓

boolean showCookieHint()
{
final SharedPreferences settings = getSharedPreferences("localPreferences", Context.MODE_PRIVATE);
if (settings.getBoolean("termsAccepted", true) == false) return false;

List<String> list = new ArrayList<String>();
list.add("AT"); //Austria
list.add("BE"); //Belgium
list.add("BG"); //Bulgaria
list.add("HR"); //Croatia
list.add("CY"); //Cyprus
list.add("CZ"); //Czech Republic
list.add("DK"); //Denmark
list.add("EE"); //Estonia
list.add("FI"); //Finland
list.add("FR"); //France
list.add("GF"); //French Guiana
list.add("PF"); //French Polynesia
list.add("TF"); //French Southern Territories
list.add("DE"); //Germany
list.add("GR"); //Greece
list.add("HU"); //Hungary
list.add("IE"); //Ireland
list.add("IT"); //Italy
list.add("LV"); //Latvia
list.add("LT"); //Lithuania
list.add("LU"); //Luxembourg
list.add("MT"); //Malta
list.add("NL"); //Netherlands
list.add("PL"); //Poland
list.add("PT"); //Portugal
list.add("RO"); //Romania
list.add("SK"); //Slovakia
list.add("SI"); //Slovenia
list.add("ES"); //Spain
list.add("SE"); //Sweden
list.add("ES"); //Spain
list.add("GB"); //United Kingdom of Great Britain and Northern Ireland

boolean error = false;

/* is eu sim ? */
try {
final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String simCountry = tm.getSimCountryIso();
if (simCountry != null && simCountry.length() == 2) {
simCountry = simCountry.toUpperCase();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i).equalsIgnoreCase(simCountry) == true) {
ASCore.log(TAG, "is EU User (sim)");
return true;
}
}
}
}
catch (Exception e) { error = true; }


/* is eu network */
try {
final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) {
String networkCountry = tm.getNetworkCountryIso();
if (networkCountry != null && networkCountry.length() == 2) {
networkCountry = networkCountry.toUpperCase();
for (int i = 0; i < list.size(); ++i) {
if (list.get(i).equalsIgnoreCase(networkCountry) == true) {
ASCore.log(TAG, "is EU User (net)");
return true;
}
}
}
}
}
catch (Exception e) { error = true; }

/* is eu time zone id */
try {
String tz = TimeZone.getDefault().getID().toLowerCase();
if (tz.length() < 10) {
error = true;
} else if (tz.contains("euro") == true) {
ASCore.log(TAG, "is EU User (time)");
return true;
}
} catch (Exception e) {
error = true;
}

/* is eu time zone id */
try {
String tz = TimeZone.getDefault().getID().toLowerCase();
if (tz.length() < 10) {
error = true;
} else if (tz.contains("europe") == true) {
ASCore.log(TAG, "is EU User (time) ");
return true;
}
} catch (Exception e) {
error = true;
}


if (error == true) {
ASCore.log(TAG, "is EU User (err)");
return true;
}

return false;
}

iOS

-(bool) showCookieHint {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:@"termsAccepted"]) return false;

CTTelephonyNetworkInfo *network_Info = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = network_Info.subscriberCellularProvider;


std::vector<NSString*> list;
list.push_back(@"AT"); //Austria
list.push_back(@"BE"); //Belgium
list.push_back(@"BG"); //Bulgaria
list.push_back(@"HR"); //Croatia
list.push_back(@"CY"); //Cyprus
list.push_back(@"CZ"); //Czech Republic
list.push_back(@"DK"); //Denmark
list.push_back(@"EE"); //Estonia
list.push_back(@"FI"); //Finland
list.push_back(@"FR"); //France
list.push_back(@"GF"); //French Guiana
list.push_back(@"PF"); //French Polynesia
list.push_back(@"TF"); //French Southern Territories
list.push_back(@"DE"); //Germany
list.push_back(@"GR"); //Greece
list.push_back(@"HU"); //Hungary
list.push_back(@"IE"); //Ireland
list.push_back(@"IT"); //Italy
list.push_back(@"LV"); //Latvia
list.push_back(@"LT"); //Lithuania
list.push_back(@"LU"); //Luxembourg
list.push_back(@"MT"); //Malta
list.push_back(@"NL"); //Netherlands
list.push_back(@"PL"); //Poland
list.push_back(@"PT"); //Portugal
list.push_back(@"RO"); //Romania
list.push_back(@"SK"); //Slovakia
list.push_back(@"SI"); //Slovenia
list.push_back(@"ES"); //Spain
list.push_back(@"SE"); //Sweden
list.push_back(@"ES"); //Spain
list.push_back(@"GB"); //United Kingdom of Great Britain and Northern Ireland

/* is eu sim ? */
NSString* sim = carrier.isoCountryCode;
if (sim != nil) {
if ([sim length] == 2) {
NSString* simU = [sim uppercaseString];
for (int i = 0; i < list.size(); ++i) {
if ([list[i] compare:simU] == 0) {
ASCore::log("Core", "is EU User (sim)");
return true;
}
}
}
}

/* is eu network */
NSString* net = carrier.mobileCountryCode;
if (net != nil) {
if ([net length] == 2) {
NSString* netU = [net uppercaseString];
for (int i = 0; i < list.size(); ++i) {
if ([list[i] compare:netU] == 0) {
ASCore::log("Core", "is EU User (net)");
return true;
}
}
}
}


bool error = false;
/* is local eu time zone id */
NSTimeZone* timeZoneLocal = [NSTimeZone localTimeZone];
NSString* time1 = [[timeZoneLocal name] lowercaseString];
if ([time1 length] > 10) {
if ([time1 containsString:@"europe"]) {
ASCore::log("Core", "is EU User (local time)");
return true;
}
} else error = true;


/* is default eu time zone id */
NSTimeZone *timeZoneDefault = [NSTimeZone defaultTimeZone];
NSString *time2 = [[timeZoneDefault name] lowercaseString];
if ([time2 length] > 10) {
if ([time2 containsString:@"europe"]) {
ASCore::log("Core", "is EU User (default time)");
return true;
}
} else error = true;


if (error == true) {
ASCore::log("Core", "is EU User (err)");
return true;
}

return false;
}

我的功能是否足以检测欧盟用户?

谢谢

罗纳德

最佳答案

以下是基于 Betatester 先生使用枚举的回答而有所改进的 Android 代码。我注意到芬兰失踪了,西类牙被错误地输入了两次。我还删除了 /* is eu time zone id */ 下的重复代码。

private enum EUCountry {
AT,BE,BG,HR,CY,CZ,DK,EE,FI,FR,DE,GR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE,GB, //28 member states
GF,PF,TF, //French territories French Guiana,Polynesia,Southern Territories
EL,UK, //alternative EU names for GR and GB
ME,IS,AL,RS,TR,MK; //candidate countries

public static boolean contains(String s)
{
for (EUCountry eucountry:values())
if (eucountry.name().equalsIgnoreCase(s))
return true;
return false;
}

};

public static boolean isEU(Activity activity)
{
boolean error = false;

/* is eu sim */

try {
final TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
String simCountry = tm.getSimCountryIso();
if (simCountry != null && simCountry.length() == 2) {
simCountry = simCountry.toUpperCase();

if (EUCountry.contains(simCountry)) {
Log.v(TAG, "is EU User (sim)");
return true;
}
}
}
catch (Exception e) { error = true; }


/* is eu network */
try {
final TelephonyManager tm = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA && tm.getPhoneType()!=TelephonyManager.PHONE_TYPE_NONE) {
String networkCountry = tm.getNetworkCountryIso();
if (networkCountry != null && networkCountry.length() == 2) {
networkCountry = networkCountry.toUpperCase();

if (EUCountry.contains(networkCountry)) {
Log.v(TAG, "is EU User (network)");
return true;
}
}
}
}
catch (Exception e) { error = true; }

/* is eu time zone id */
try {
String tz = TimeZone.getDefault().getID().toLowerCase();
if (tz.length() < 10) {
error = true;
} else if (tz.contains("euro")) {
Log.v(TAG, "is EU User (time)");
return true;
}
} catch (Exception e) {
error = true;
}


if (error == true) {
Log.v(TAG, "is EU User (err)");
return true;
}

return false;
}

关于Android - 欧盟 Cookie 法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31739347/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com