Giter Site home page Giter Site logo

googleads-consent-sdk-android's Introduction

Google Mobile Ads Consent SDK

This SDK is no longer being maintained. We recommend using the User Messaging Platform SDK instead.

Under the Google EU User Consent Policy, you must make certain disclosures to your users in the European Economic Area (EEA) and obtain their consent to use cookies or other local storage, where legally required, and to use personal data (such as AdID) to serve ads. This policy reflects the requirements of the EU ePrivacy Directive and the General Data Protection Regulation (GDPR). To support publishers in meeting their duties under this policy, Google offers this Consent SDK.

Documentation

For additional documentation on the Google Mobile Ads Consent SDK, refer to the Consent SDK developer docs.

License

Apache 2.0 License

googleads-consent-sdk-android's People

Contributors

ericleich avatar jweisbaum avatar mirkoddd avatar rampara avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

googleads-consent-sdk-android's Issues

onFailedToUpdateConsentInfo exception

Android 8.1 nexus 5x:
onFailedToUpdateConsentInfo:
"Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference"

What's the meaning? onConsentInfoUpdated never called. I am not in EEA. If I use genymotion, it give me onFailedToUpdateConsentInfo's errorDescription value is null.

What is the problem?

Confused about ConsentInformation Api and parameters.

Hi, I'm quite confused about the 'requestConsentInfoUpdate' api and how does it work.
I have some questions below:

(1) Beacuse the request url paramters require neither 'packagename' nor 'any deviceInfo', how does it work without knowing who the apps are and who is EEA user? As I know EEA should be geographically independent. So IP address may not reliable as it will not reflect to actual status. Let alone many users use proxy.

(2) I did not noticed any 'upload' interface in ConsentInformation source code. And Response Status are stored in SharedPreference. So Does it mean the 'requestConsentInfoUpdate' api always returns the same result, if I use same publisherIDs?

(3) As the response use SharedPreference to save config,and not update to server(Cuz app lost data). When users uninstall and reinstall the app. EEA users may need to select the dialog again.? Or app needs a server to store users choices for convenience?

(4) For PublisherIDs, as I know one publisherID may constains multiple apps.
Does it mean If I accept and modified the consent status, it will(or need) also apply to other apps in the same accout?

[No thanks] button on ConsentForm

My app has no "ads-free" version, only "ads" version.
So, I want to quit my app when user did not consent "see ads that are less relevant".

Current version of this SDK, only
[Yes, contiinue to see relevant ads]
[No, see ads that are less lerevant]
[Pay for the ads-free version]
buttons.

I need a new button, like a "No thanks, I will not use this app.".

Failed resolution of: Landroid/webkit/SafeBrowsingResponse

I can show test form but it not full working: not show all button with this:

         .withPersonalizedAdsOption()
         .withNonPersonalizedAdsOption()
         .withAdFreeOption()
         .build();

The error log:

I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.hb>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse; at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)

UNKNOWN for adfree?

Looking through your code, it's kind of dumb to return UNKNOWN for both errors where can't determine consent, and when the user selects to prefer adfree, Why is there not a ConsentStatus,ADFREE_PREFERRED or something similar?

ConsentForm issue

I tried to integrate ConsentForm dialog and get these errors:

I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.hb>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse; at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.*****ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) 05-22 20:08:22.083 22666-22666/ru.***I/zygote64: at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/lib/arm64, /data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.****.ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374) 05-22 20:08:22.084 22666-22666/ru.**** I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.hb>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse; at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.***ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/lib/arm64, /data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.****ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374) 05-22 20:08:22.085 22666-22666/ru.***** I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<com.android.webview.chromium.hb>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse; at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.*****.ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/lib/arm64, /data/app/com.android.chrome-whbR54H_cxKt1g8Z0TyVvg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379) at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312) at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:564) at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:551) at void android.webkit.WebView.<init>(android.content.Context) (WebView.java:541) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79) at void com.google.ads.consent.ConsentForm.<init>(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45) at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208) at void ru.*****.ui.quote.ListActivity.onCreate(android.os.Bundle) (ListActivity.java:107) at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7174) at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1220) at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2908) at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:3030) at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1) at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1696) at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105) at void android.os.Looper.loop() (Looper.java:164) at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938) at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327) at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)

My code:

` ConsentInformation consentInformation = ConsentInformation.getInstance(ListActivity.this);
String[] publisherIds = {"pub-deleted"};
consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
@OverRide
public void onConsentInfoUpdated(ConsentStatus consentStatus) {
// User's consent status successfully updated.
}

        @Override
        public void onFailedToUpdateConsentInfo(String errorDescription) {
            // User's consent status failed to update.
        }
    });

    Boolean inEea = ConsentInformation.getInstance(ListActivity.this).isRequestLocationInEeaOrUnknown();
    inEea = true;
    ConsentInformation.getInstance(this).addTestDevice("deleted");
    ConsentInformation.getInstance(this).setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);

    if (inEea) {
        URL privacyUrl = null;
        try {
            privacyUrl = new URL("deleted");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        ConsentForm form = new ConsentForm.Builder(ListActivity.this, privacyUrl)
                .withListener(new ConsentFormListener() {
                    @Override
                    public void onConsentFormLoaded() {
                        // Consent form loaded successfully.
                    }

                    @Override
                    public void onConsentFormOpened() {
                        // Consent form was displayed.
                    }

                    @Override
                    public void onConsentFormClosed(
                            ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                        // Consent form was closed.
                    }

                    @Override
                    public void onConsentFormError(String errorDescription) {
                        // Consent form error.
                    }
                })
                .withPersonalizedAdsOption()
                .withNonPersonalizedAdsOption()
                .withAdFreeOption()
                .build();

        form.load();
        form.show();
    }`

ListActivity.java:107 line is .build(); for ConsentForm.Builder. What is wrong?

ClassCastException for AdaptiveIconDrawable to BitmapDrawable

05-21 21:50:04.859 18303-18303/ E/AndroidRuntime: FATAL EXCEPTION: main Process: , PID: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable at com.google.ads.consent.ConsentForm.getAppIconURIString(ConsentForm.java:219) at com.google.ads.consent.ConsentForm.updateDialogContent(ConsentForm.java:237) at com.google.ads.consent.ConsentForm.access$900(ConsentForm.java:45) at com.google.ads.consent.ConsentForm$2.onPageFinished(ConsentForm.java:147) at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:546) at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:201) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Permission "android.permission.READ_PHONE_STATE" added

I've just tried the consent SDK and it seems that it adds

android.permission.READ_PHONE_STATE

Is the permission needed? If yes, I am guessing that it will cause issues since almost all of the apps that uses the Admob SDK will have to include this permission if they don't have it already. Adding new permissions might cause users to not update or even uninstall the app.

Is this intentional or should we wait for a fix?

Consent Form not showing

Hi i have a problem: The consentform is not showing on for example Samung Galaxy S9+ with Android 8

Update: Does not work on Android 7.12 too. Same problem

i have the following logfile :

the main problem seems to be :
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file

it would be good if you can fix this asap !

at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:80)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:46)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:215)
at void shoppinglist.com.checklist.MainApp$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (MainApp.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:269)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.android.chrome-PxcsJgPrdsd1orI9WHkgHA==/base.apk"],nativeLibraryDirectories=[/data/app/com.android.chrome-PxcsJgPrdsd1orI9WHkgHA==/lib/arm64, /data/app/com.android.chrome-PxcsJgPrdsd1orI9WHkgHA==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (WebViewChromium.java:48)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:80)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:46)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:215)
at void shoppinglist.com.checklist.MainApp$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (MainApp.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:269)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)

isRequestLocationInEeaOrUnknown() is always return false?

Hi, I intergate the Consent sdk in app with gray release.
I have test for 3 day and tack events shows 'isRequestLocationInEeaOrUnknown' always return false.
I have test for over 200 thousands users(unique),and I am sure app have users in EEA. I am confused with test result. Can any one tells me how to make it right?
I will keep tracking the result for a couple of days.

an exception error when calling requestConsentInfoUpdate()

When I call requestConsentInfoUpdate() in UK, I got the onFailedToUpdateConsentInfo() called with the following error string.

com.google.gson.internal.LinkedTreeMap cannot be cast to com.google.ads.consent.ConsentInformation$AdNetworkLookupResponse

Many crasches "tgkill" in Google Play Console

Hi.

After adding the Consent SDK, the application displays errors in the Google Play console. Errors occur in about 2 per 1000 updates and apply only to European users.

I was able to make a similar error when I turned off the browser in my device. Then, after clicking the link to the Privacy policy (Google Partners or own link) in Consent Form, an error occurred.

I wonder if the Constent SDK should not check if the user has a web browser installed..

The error snapshots look like:

backtrace:
#00 pc 000000000003a2e8 /system/lib/libc.so (tgkill+12)
#1 pc 0000000000013739 /system/lib/libc.so (pthread_kill+52)
#2 pc 0000000000014357 /system/lib/libc.so (raise+10)
#3 pc 0000000000010c7d /system/lib/libc.so (__libc_android_abort+36)
#4 pc 000000000000f1c4 /system/lib/libc.so (abort+4)
#5 pc 00000000000374d3 /data/app/com.google.android.webview-2/lib/arm/libwebviewchromium.so

or..

backtrace:
#00 pc 000000000004a948 /system/lib/libc.so (tgkill+12)
#1 pc 00000000000480c3 /system/lib/libc.so (pthread_kill+34)
#2 pc 000000000001dc4d /system/lib/libc.so (raise+10)
#3 pc 0000000000019341 /system/lib/libc.so (__libc_android_abort+34)
#4 pc 00000000000173a8 /system/lib/libc.so (abort+4)
#5 pc 0000000000799ae3 /data/app/com.android.chrome-2/base.apk

I added the Google Analytics tracking code to onConsentFormError(String errorDescription) and caught the following errors:

errorDescription: com.android.webview.chromium.WebViewContentsClientAdapter$WebResourceErrorImpl@213a2fe

The error occurs regardless of the android version and the brand of the device.

I will be grateful for suggestions and information if someone has a similar problem.

Regards
Szymon

Error runtime with proguard

Currently, I didn't use implementation 'com.google.android.ads.consent:consent-library:1.0.1' because it includes the permission READ_PHONE_STATE and it error bitmap when calling from.show()

I cloned and imported this lib is the module to use, it doesn't include READ_PHONE_STATE but it has a bug with Gson while using proguard. Caused by: java.lang.NoSuchFieldException: UNKNOWN . Even I keep class or enum in the proguard file then it still makes the bug.

Thanks.

Show activity contents behind dialog

Is is possible to display the apps home screen behind the dialog like it does in the iOS version, rather than the outside of the dialog being completely white?

Currently when launching the app, first the apps home screen displays and them screen changes to show the dialog on a white background which can be quite jarring.

Memory Leaks

Hi! It seems there is memory leaks appears when i am using this SDK. Please check simple example:

public class MainActivity extends AppCompatActivity {

    private static String mPublishedId = "pub-..................";
    private static String mPrivacyUrl = "https://........................";

    private ConsentForm mForm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        showConsent();
    }

    private void showConsent() {
        ConsentInformation consentInformation = ConsentInformation.getInstance(this);

        String[] publisherIds = {mPublishedId};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {

            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                if (ConsentInformation.getInstance(MainActivity.this).isRequestLocationInEeaOrUnknown() && consentStatus == ConsentStatus.UNKNOWN) {
                    showForm();
                }
            }

            @Override
            public void onFailedToUpdateConsentInfo(String reason) {
            }
        });
    }

    private void showForm() {
        URL url = null;
        try {
            url = new URL(mPrivacyUrl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        mForm = new ConsentForm.Builder(this, url)
            .withListener(new ConsentFormListener() {
                @Override
                public void onConsentFormLoaded() {
                    mForm.show();
                    mForm = null;
                }
            })
            .withNonPersonalizedAdsOption()
            .withPersonalizedAdsOption()
            .withAdFreeOption()
            .build();

        mForm.load();
    }

}

When form was shown the MainActivity stays in memory forever, even after GC.

crashes on android 4.0.3

05-25 14:22:20.960 9626-9711/com.vent E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NoClassDefFoundError: java.util.Objects
at com.google.ads.consent.ConsentData.getSDKPlatformString(ConsentData.java:128)
at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground(ConsentInformation.java:262)
at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground(ConsentInformation.java:189)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
at java.lang.Thread.run(Thread.java:856) 

exaple text

you have an example of text with personal data protection to page privacyUrl.
everything that happens with the data is through the SDK component Admob. I do not know anything about users.

Dialog backlground does not fully cover

On Moto G (first generation, Android 5.0.1) the white background behind the dialog does not fully cover the application. There is a gap at the upper edge (Padding for a non-existing title bar? I barely remember similar bug in one of my applications. The space has the size of the old gray non-material title bar^^).

App requires permission WRITE_EXTERNAL_STORAGE needed

When I build my apps using the consent-library 1.0.1 my AndroidManifest is extended by READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE. If I remove the dependency, no permission is added. This is reproducable. Didn't somebody test this?

Also it is not possible to localize the text. This library is a ridicolous. It is not compliant with GDPR/DSGVO to show a german user an english data policy. You could at least add the possibility by overriding text files in localized raw folders or anything else. When did Google start to develop this library, last week? It was released 5 days before GDPR/DSGVO comes into effect. So many hard working developers who need to build it by themselves now :(

onConsentFormError (using 12 ad tech providers)

After saved 12 ad tech providers in Admob, I am still unable to load the consent dialog.

onConsentFormError: Consent form is not ready to be displayed.
onConsentFormError: Error: consent form can be used with custom provider selection only.

Do I have to wait for some time???

ConsentForm issue

Hello,
I run into strange issues using ConsentForm, when try to load form I get: "Error: invalid data. Unexpected end of JSON input" and on show: "Consent form is not ready to be displayed." even if show is called after 2 seconds delay.
Also I noticed that ConsentInformation.getInstance(this).setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA); has no effect because consentInformation.isRequestLocationInEeaOrUnknown() return false;
Last thing, onFailedToUpdateConsentInfo return: "Could not parse Event FE preflight response." and for me isn't clear that mean such error.
Thanks in advance.

How do i call the show() method?

This is my code

final ConsentForm form = new ConsentForm.Builder(MainActivity.this, privacyUrl)
                                .withListener(new ConsentFormListener() {
                                    @Override
                                    public void onConsentFormLoaded() {
                                        // Consent form loaded successfully.
                                        Log.d("Consent", "loaded");
                                        form.show();
                                    }
                                })
                                .withPersonalizedAdsOption()
                                .withNonPersonalizedAdsOption()
                                .withAdFreeOption()
                                .build();

                        form.load();

Android Studio warns me that variable form may not have been initialized, when i call form.show()
So, how can i call it?

Phone and Storage permissions added

I see Storage read and write and Phone permissions added

uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
IMPLIED from /home/lakshman/Projects/android-projects/GN/src/main/AndroidManifest.xml:2:1-59:12 reason: com.google.android.ads.consent has a targetSdkVersion < 4
uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from /home/lakshman/Projects/android-projects/GN/src/main/AndroidManifest.xml:2:1-59:12 reason: com.google.android.ads.consent has a targetSdkVersion < 4
uses-permission#android.permission.READ_EXTERNAL_STORAGE
IMPLIED from /home/lakshman/Projects/android-projects/GN/src/main/AndroidManifest.xml:2:1-59:12 reason: com.google.android.ads.consent requested WRITE_EXTERNAL_STORAGE

What should i do when no internet? and no Paid version

  • What should i do when user not have internet connection? Can not load consent form? While user using app, internet connection comeback? How to solve this problem and display Ads?

  • I do not want to create paid version? can i close app when user not select NPA/ PA??

  • Consent form alway show when launch app. It will give user bad experiences. Why SDK not save their choice and give a option to revoke if user want? Form show only one time.

  • Please give us a sample, demo for SDK.

  • Deadline to update app to play store?

request consent when offline.

I open app with internet. Select Personalized Ads.

I open app again without internet. The function requestConsentInfoUpdate() alway go to onFailedToUpdateConsentInfo(). Why it not go to onConsentInfoUpdated() with consent state is Personalized Ads?

If have internet connection, it OK.

Is Google Play Instant supported?

Hi,
I'm trying to use Consent SDK with Google Play Instant but I'm getting the following error:
onFailedToUpdateConsentInfo : Cleartext HTTP traffic to adservice.google.com not permitted

How can I solve it?

Text Localization

Hi,

Is it possible to localise the text so that it supports multiple languages? I have a number of users from non-english speaking countries.

Consent status randomly unknown

At least once a day ConsentInfoUpdateListener returns the unknown status for my users (at random times it seems), although the user has already given consent. This leads my app to show them the consent form again which is super annoying. Is there anything I can do about this?

Running on Emulator but not in the Actual Real Device, Can't load and show Consent Form

Setting to Test Device is not working
Setting to Debug EU not working always tell not in EU even i already set it to EU
Running on Samsung S8 Oreo 8.0

Here's the logs

05-28 22:45:45.605 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: contextcom.gigadrillgames.androidplugin.gdpradmob.gdpr.MainActivity@26b825c
05-28 22:45:45.611 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: setDebugGeography to EU
addTestDevice 33BE2250B43518CCDA7DE426D04EE231
setConsentStatus: 2
05-28 22:45:46.104 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: User's consent status successfully updated
consentStatus: UNKNOWN
05-28 22:45:46.114 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: isInEU false
ConsentStatus: UNKNOWN
buildConsentForm privacyUrlString some privacy url here
buildConsentForm removeFreeOption false
05-28 22:45:46.333 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/zygote64: Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse;
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk"],nativeLibraryDirectories=[/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/lib/arm64, /data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
05-28 22:45:46.334 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/zygote64: Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse;
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk"],nativeLibraryDirectories=[/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/lib/arm64, /data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
Rejecting re-init on previously-failed class java.lang.Class: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/SafeBrowsingResponse;
at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.webkit.SafeBrowsingResponse" on path: DexPathList[[zip file "/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk"],nativeLibraryDirectories=[/data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/lib/arm64, /data/app/com.chrome.beta-GwoOaxnLpD73wLQ5kx4hbg==/base.apk!/lib/arm64-v8a, /system/lib64, /system/vendor/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:93)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
05-28 22:45:46.335 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/zygote64: at void com.android.webview.chromium.WebViewChromium.init(java.util.Map, boolean) (PG:53)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:651)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:581)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet, int) (WebView.java:564)
at void android.webkit.WebView.(android.content.Context, android.util.AttributeSet) (WebView.java:551)
at void android.webkit.WebView.(android.content.Context) (WebView.java:541)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder) (ConsentForm.java:79)
at void com.google.ads.consent.ConsentForm.(com.google.ads.consent.ConsentForm$Builder, com.google.ads.consent.ConsentForm$1) (ConsentForm.java:45)
at com.google.ads.consent.ConsentForm com.google.ads.consent.ConsentForm$Builder.build() (ConsentForm.java:208)
at com.google.ads.consent.ConsentForm com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.buildConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:238)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController.createConsentForm(java.lang.String, boolean) (GDPRAdmobController.java:245)
at void com.gigadrillgames.androidplugin.gdpradmob.GDPRAdmobController$1.onConsentInfoUpdated(com.google.ads.consent.ConsentStatus) (GDPRAdmobController.java:179)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(com.google.ads.consent.ConsentInformation$ConsentInfoUpdateResponse) (ConsentInformation.java:278)
at void com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.onPostExecute(java.lang.Object) (ConsentInformation.java:189)
at void android.os.AsyncTask.finish(java.lang.Object) (AsyncTask.java:695)
at void android.os.AsyncTask.-wrap1(android.os.AsyncTask, java.lang.Object) (AsyncTask.java:-1)
at void android.os.AsyncTask$InternalHandler.handleMessage(android.os.Message) (AsyncTask.java:712)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6938)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.Zygote$MethodAndArgsCaller.run() (Zygote.java:327)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1374)
05-28 22:45:46.395 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: buildConsentForm form com.google.ads.consent.ConsentForm@47c30b1
05-28 22:45:46.411 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: loadConsentForm
05-28 22:45:47.048 32434-32434/com.gigadrillgames.androidplugin.gdpradmob.gdpr I/GDPRAdmobController: Consent form error. Error: request is not in EEA or unknown.

a resource leakage error

Turn on the StrictMode for detectLeakedClosableObjects() and we may see the following error in some cases.

E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'end' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:180)
at java.util.zip.Inflater.(Inflater.java:82)
at com.android.okhttp.okio.GzipSource.(GzipSource.java:62)
at com.android.okhttp.internal.http.HttpEngine.unzip(HttpEngine.java:645)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:827)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)
at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.makeConsentLookupRequest(ConsentInformation.java:233)
at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground(ConsentInformation.java:263)
at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground(ConsentInformation.java:189)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)

Multilingual

Hi

ist it possible to make the sdk multilingual for all european countries ?
I think the main problem ist here that for example a french guy, italian and so on does not understand whats going on. The main problem is that people from other eu countries do not speak or understand english.

NoClassDefFoundError causing crashes in version 1.2

All occurences happening on Android 4.2

java.lang.RuntimeException:  
  at android.os.AsyncTask$3.done (AsyncTask.java:299) 
  at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:352) 
  at java.util.concurrent.FutureTask.setException (FutureTask.java:219) 
  at java.util.concurrent.FutureTask.run (FutureTask.java:239) 
  at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:230) 
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1080) 
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:573) 
  at java.lang.Thread.run (Thread.java:856)
Caused by: java.lang.NoClassDefFoundError:  
  at com.google.ads.consent.ConsentData.getSDKPlatformString (ConsentData.java:128) 
  at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground (ConsentInformation.java:262) 
  at com.google.ads.consent.ConsentInformation$ConsentInfoUpdateTask.doInBackground (ConsentInformation.java:189) 
  at android.os.AsyncTask$2.call (AsyncTask.java:287) 
  at java.util.concurrent.FutureTask.run (FutureTask.java:234)

Consent Form not display

  • I selected 9 providers and implement code.
  • Add test id .
  • setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);

But form not displayed:

Consent form is not ready to be displayed.
05-24 08:42:57.173 8968-8968/demo.sdk.consent.com.cssample E/demo.sdk.consent.com.cssample: Form loaded
05-24 08:42:57.189 8968-8968/demo.sdk.consent.com.cssample E/demo.sdk.consent.com.cssample: Form loaded

Error when updating consent status

Hi, thanks for the open source Consent SDK! Was trying to get it to work today and the consent status update keeps failing with Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

This is the code I'm using that's producing the error. context is a reference to my main activity and this is taking place in the first few lines of onCreate() for that activity:

    final ConsentInformation consentInformation = ConsentInformation.getInstance(context);

    consentInformation.addTestDevice(TEST_DEVICE_1);
    consentInformation.addTestDevice(TEST_DEVICE_2);
    consentInformation.addTestDevice(TEST_DEVICE_3);

    String[] publisherIds = {"pub-XXXXXXXXXXXXXXXX"};
    consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
        @Override
        public void onConsentInfoUpdated(ConsentStatus consentStatus) {
            // User's consent status successfully updated.
            System.out.println("Updated consent! Consent is " + consentStatus.name());
            if (consentStatus == ConsentStatus.PERSONALIZED || !consentInformation.isRequestLocationInEeaOrUnknown()) {
                showPersonalizedAds = true;
                readyForAds = true;
            } else if (consentStatus == ConsentStatus.UNKNOWN) {
                getConsent();
            } else {
                showPersonalizedAds = false;
                readyForAds = true;
            }
        }

        @Override
        public void onFailedToUpdateConsentInfo(String errorDescription) {
            // User's consent status failed to update.
            System.out.println("Failed to update consent info with error: " + errorDescription);
            if (!consentInformation.isRequestLocationInEeaOrUnknown()) {
                showPersonalizedAds = true;
                readyForAds = true;
            } else {
                // We'll just try again next time.
            }
        }
    });

I can tell onFailedToUpdateConsentInfo() is being called with an error because that is the line that's printing out to Logcat. I'm just not sure what the problem is. I've made a custom list of 12 ad providers on my admob EU page and I copied my publisher ID into the code.

I'm running the app on TEST_DEVICE_2 so it should be in test mode and should function properly. Device is a BLU Advance 5.0 running Android 5.1. Any ideas?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.