I use this library to detect if data-sharing is enabled, by using this:
implementation("com.iabgpp:iabgpp-encoder:3.2.3")
/** @return returns null if not initialized yet, or initialized and it's ok to share data.
* When returned true, it means all kinds of data sharing is allowed:SALE_OPT_OUT, SHARING_OPT_OUT, TARGETED_ADVERTISING_OPT_OUT.
* Otherwise returns false*/
fun isDataShareAllowed(context: Context): Boolean? {
val defaultSharedPreferences = PreferenceUtil.getDefaultSharedPreferences(context)
val gppString = defaultSharedPreferences.getString("IABGPP_HDR_GppString", null) ?: return null
when(gppString){
"DBABL~BVQqAAAAAg" -> return true
"DBABL~BVQVAAAAAg" -> return false
}
CrashlyticsUtil.logException("AdConsentUtil isDataShareAllowed unknown gppString detected:$gppString, so using fallback")
val model = GppModel(gppString)
val usNatSection1 = model.getSection(UsNat.ID)
val fieldsToCheck = arrayOf(UsNatField.SALE_OPT_OUT, UsNatField.SHARING_OPT_OUT, UsNatField.TARGETED_ADVERTISING_OPT_OUT)
for (fieldName in fieldsToCheck) {
if (usNatSection1.hasField(fieldName)) {
val fieldValue = usNatSection1.getFieldValue(fieldName) ?: continue
if (fieldValue == 2)
continue
return false
}
}
return true
}
Recently I got a crash of this sort, reported via Crashlytics, on the line of "getFieldValue":
...
Caused by com.iab.gpp.encoder.error.DecodingException: Unable to decode KnownChildSensitiveDataConsents
at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:49)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)
Caused by com.iab.gpp.encoder.datatype.SubstringException: java.lang.StringIndexOutOfBoundsException: begin 56, end 62, length 60
at com.iab.gpp.encoder.datatype.EncodableFixedIntegerList.substring(EncodableFixedIntegerList.java:54)
at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:44)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)
Caused by java.lang.StringIndexOutOfBoundsException: begin 56, end 62, length 60
at java.lang.String.checkBoundsBeginEnd(String.java:4519)
at java.lang.String.substring(String.java:2537)
at com.iab.gpp.encoder.datatype.EncodableFixedIntegerList.substring(EncodableFixedIntegerList.java:52)
at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:44)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)
Why does it occur?
I use this library to detect if data-sharing is enabled, by using this:
implementation("com.iabgpp:iabgpp-encoder:3.2.3")
Recently I got a crash of this sort, reported via Crashlytics, on the line of "getFieldValue":
Why does it occur?