From 49b5f8ec0881daeb9c8bc62822a7e59e4e63e58d Mon Sep 17 00:00:00 2001
From: lpw <812862340@qq.com>
Date: Tue, 01 Jul 2025 15:29:24 +0800
Subject: [PATCH] 提交版本 4.5.0

---
 frameworks/Didomi.xcframework/xros-arm64/Didomi.framework/web_sdk_utilities.js |  486 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 256 insertions(+), 230 deletions(-)

diff --git a/frameworks/Didomi.xcframework/xros-arm64/Didomi.framework/web_sdk_utilities.js b/frameworks/Didomi.xcframework/xros-arm64/Didomi.framework/web_sdk_utilities.js
index 014f7f1..cfe1c68 100644
--- a/frameworks/Didomi.xcframework/xros-arm64/Didomi.framework/web_sdk_utilities.js
+++ b/frameworks/Didomi.xcframework/xros-arm64/Didomi.framework/web_sdk_utilities.js
@@ -1,10 +1,15 @@
+/** Script allowing to use the Web SDK from a WebView */
+
+// Check if notice was initially displayed
+var noticeReady = false;
+
 /**
  * Initialize the SDK with the specified configuration
  */
-function initSdk(config, gvl, sdkURL, languageCode) {
+function initSdk(config, gvl, sdkURL, languageCode, isUnderage) {
   if (config) {
     // Set the global window configuration to the config object
-    window.didomiConfig = prepareConfigFromMobile(config, languageCode);
+    window.didomiConfig = prepareConfigFromMobile(config, languageCode, isUnderage);
 
     // If app, vendors, and iab exist, set the vendorList property
     if (
@@ -57,9 +62,11 @@
 /**
  * Open the notice screen
  */
-function openNotice(options) {
+function openNotice(userStatus, options) {
+  handleWebSDKEvents();
   window.didomiOnReady = window.didomiOnReady || [];
   window.didomiOnReady.push(function (Didomi) {
+    Didomi.setUserStatus(userStatus);
     if (options != null && options.deepLinkView != null) {
       Didomi.preferences.show(
         options.deepLinkView == 0 ? "purposes" : "vendors"
@@ -67,243 +74,249 @@
     } else {
       Didomi.notice.show();
     }
+    noticeReady = true;
   });
+}
 
-  window.didomiEventListeners = window.didomiEventListeners || [];
-  // TODO: Handle all iOS events
-  window.didomiEventListeners.push(
-    {
-      event: 'api.error',
-      listener: function ({ id, reason }) {
-        if (window.webkit && window.webkit.messageHandlers) {
-          window.webkit.messageHandlers.onError.postMessage(reason);
-        } else {
-          androidInterface.onError(id, reason);
-        }
-      }
-    },
-    {
-      event: "consent.changed",
-      listener: function (event) {
-        // If the change is coming from the WebView we don't want to trigger the message back to the WebView.
-        if (event.action == "webview") {
-          return;
-        }
-
-        if (isIOS()) {
-          window.webkit.messageHandlers.consentChanged.postMessage(Didomi.getUserStatus());
-        } else {
-          androidInterface.onConsentChanged(JSON.stringify(Didomi.getUserStatus()));
+/**
+ * Listen to SDK events
+ */
+function handleWebSDKEvents() {
+    window.didomiEventListeners = window.didomiEventListeners || [];
+    // TODO: Handle all iOS events
+    window.didomiEventListeners.push(
+      {
+        event: 'api.error',
+        listener: function ({ id, reason }) {
+          if (window.webkit && window.webkit.messageHandlers) {
+            window.webkit.messageHandlers.onError.postMessage(reason);
+          } else {
+            androidInterface.onError(id, reason);
+          }
         }
       },
-    },
-    {
-      event: 'notice.clickagree',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.noticeClickAgree.postMessage("");
-        } else {
-          androidInterface.onNoticeClickAgree();
+      {
+        event: "consent.changed",
+        listener: function (event) {
+          // If the change is coming from the WebView we don't want to trigger the message back to the WebView.
+          if (event.action == "webview") {
+            return;
+          }
+
+          if (isIOS()) {
+            window.webkit.messageHandlers.consentChanged.postMessage(Didomi.getUserStatus());
+          } else {
+            androidInterface.onConsentChanged(JSON.stringify(Didomi.getUserStatus()));
+          }
+        },
+      },
+      {
+        event: 'notice.clickagree',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.noticeClickAgree.postMessage("");
+          } else {
+            androidInterface.onNoticeClickAgree();
+          }
         }
-      }
-    },
-    {
-      event: 'notice.clickdisagree',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.noticeClickDisagree.postMessage("");
-        } else {
-          androidInterface.onNoticeClickDisagree();
+      },
+      {
+        event: 'notice.clickdisagree',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.noticeClickDisagree.postMessage("");
+          } else {
+            androidInterface.onNoticeClickDisagree();
+          }
         }
-      }
-    },
-    {
-      event: 'notice.clickmoreinfo',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.noticeClickMoreInfo.postMessage("");
-        } else {
-          androidInterface.onNoticeClickMoreInfo();
+      },
+      {
+        event: 'notice.clickmoreinfo',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.noticeClickMoreInfo.postMessage("");
+          } else {
+            androidInterface.onNoticeClickMoreInfo();
+          }
         }
-      }
-    },
-    {
-      event: 'notice.clickviewvendors',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.noticeClickViewVendors.postMessage("");
-        } else {
-          androidInterface.onNoticeClickViewVendors();
+      },
+      {
+        event: 'notice.clickviewvendors',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.noticeClickViewVendors.postMessage("");
+          } else {
+            androidInterface.onNoticeClickViewVendors();
+          }
         }
-      }
-    },
-    {
-      event: 'notice.hidden',
-      listener: function () {
-        if (isIOS()) {
+      },
+      {
+        event: 'notice.hidden',
+        listener: function () {
+          if (noticeReady && !Didomi.preferences.isVisible()) {
+            if (isIOS()) {
+              window.webkit.messageHandlers.noticeHidden.postMessage("");
+            } else {
+              androidInterface.onNoticeHidden();
+            }
+          }
+        }
+      },
+      {
+        event: 'notice.shown',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.noticeShown.postMessage("");
+          } else {
+            androidInterface.onNoticeShown();
+          }
+        }
+      },
+      {
+        event: 'preferences.clickagreetoall',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickAgreeToAll.postMessage("");
+          } else {
+            androidInterface.onPreferencesClickAgreeToAll();
+          }
+        }
+      },
+      {
+        event: 'preferences.clickcategoryagree',
+        listener: function ({ categoryId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickCategoryAgree.postMessage(categoryId);
+          } else {
+            androidInterface.onPreferencesClickCategoryAgree(categoryId);
+          }
+        }
+      },
+      {
+        event: 'preferences.clickcategorydisagree',
+        listener: function ({ categoryId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickCategoryDisagree.postMessage(categoryId);
+          } else {
+            androidInterface.onPreferencesClickCategoryDisagree(categoryId);
+          }
+        }
+      },
+      {
+        event: "preferences.clickclose",
+        listener: function () {
+          // Not handled by mobile SDKs
+        },
+      },
+      {
+        event: 'preferences.clickdisagreetoall',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickDisagreeToAll.postMessage("");
+          } else {
+            androidInterface.onPreferencesClickDisagreeToAll();
+          }
+        }
+      },
+      {
+        event: 'preferences.clickpurposeagree',
+        listener: function ({ purposeId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickPurposeAgree.postMessage(purposeId);
+          } else {
+            androidInterface.onPreferencesClickPurposeAgree(purposeId);
+          }
+        }
+      },
+      {
+        event: 'preferences.clickpurposedisagree',
+        listener: function ({ purposeId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickPurposeDisagree.postMessage(purposeId);
+          } else {
+            androidInterface.onPreferencesClickPurposeDisagree(purposeId);
+          }
+        }
+      },
+      {
+        event: 'preferences.clicksavechoices',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickSaveChoices.postMessage("");
+          } else {
+            androidInterface.onPreferencesClickSaveChoices();
+          }
+        }
+      },
+      {
+        event: 'preferences.clickvendoragree',
+        listener: function ({ vendorId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickVendorAgree.postMessage(vendorId);
+          } else {
+            androidInterface.onPreferencesClickVendorAgree(vendorId);
+          }
+        }
+      },
+      {
+        event: 'preferences.clickvendordisagree',
+        listener: function ({ vendorId }) {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickVendorDisagree.postMessage(vendorId);
+          } else {
+            androidInterface.onPreferencesClickVendorDisagree(vendorId);
+          }
+        }
+      },
+      {
+        event: 'preferences.clickvendorsavechoices',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickVendorSaveChoices.postMessage("");
+          } else {
+            androidInterface.onPreferencesClickVendorSaveChoices();
+          }
+        }
+      },
+      {
+        event: 'preferences.clickviewvendors',
+        listener: function () {
+          if (isIOS()) {
+            window.webkit.messageHandlers.preferencesClickViewVendors.postMessage("");
+          } else {
+            androidInterface.onPreferencesClickViewVendors();
+          }
+        }
+      },
+      {
+        event: "preferences.hidden",
+        listener: function () {
           if (Didomi.notice.isVisible()) {
-            window.webkit.messageHandlers.noticeHidden.postMessage();
+            if (isIOS()) {
+              window.webkit.messageHandlers.preferencesHidden.postMessage("");
+            } else {
+              androidInterface.onPreferencesHidden();
+            }
+          } else {
+            if (isIOS()) {
+              window.webkit.messageHandlers.dismissWebView.postMessage("");
+            } else {
+              androidInterface.onDismissPreferences();
+            }
           }
-        } else {
-          androidInterface.onNoticeHidden();
         }
-      }
-    },
-    {
-      event: 'notice.shown',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.noticeShown.postMessage("");
-        } else {
-          androidInterface.onNoticeShown();
-        }
-      }
-    },
-    {
-      event: 'preferences.clickagreetoall',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickAgreeToAll.postMessage("");
-        } else {
-          androidInterface.onPreferencesClickAgreeToAll();
-        }
-      }
-    },
-    {
-      event: 'preferences.clickcategoryagree',
-      listener: function ({ categoryId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickCategoryAgree.postMessage(categoryId);
-        } else {
-          androidInterface.onPreferencesClickCategoryAgree(categoryId);
-        }
-      }
-    },
-    {
-      event: 'preferences.clickcategorydisagree',
-      listener: function ({ categoryId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickCategoryDisagree.postMessage(categoryId);
-        } else {
-          androidInterface.onPreferencesClickCategoryDisagree(categoryId);
-        }
-      }
-    },
-    {
-      event: "preferences.clickclose",
-      listener: function () {
-        // Not handled by mobile SDKs
       },
-    },
-    {
-      event: 'preferences.clickdisagreetoall',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickDisagreeToAll.postMessage("");
-        } else {
-          androidInterface.onPreferencesClickDisagreeToAll();
-        }
-      }
-    },
-    {
-      event: 'preferences.clickpurposeagree',
-      listener: function ({ purposeId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickPurposeAgree.postMessage(purposeId);
-        } else {
-          androidInterface.onPreferencesClickPurposeAgree(purposeId);
-        }
-      }
-    },
-    {
-      event: 'preferences.clickpurposedisagree',
-      listener: function ({ purposeId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickPurposeDisagree.postMessage(purposeId);
-        } else {
-          androidInterface.onPreferencesClickPurposeDisagree(purposeId);
-        }
-      }
-    },
-    {
-      event: 'preferences.clicksavechoices',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickSaveChoices.postMessage("");
-        } else {
-          androidInterface.onPreferencesClickSaveChoices();
-        }
-      }
-    },
-    {
-      event: 'preferences.clickvendoragree',
-      listener: function ({ vendorId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickVendorAgree.postMessage(vendorId);
-        } else {
-          androidInterface.onPreferencesClickVendorAgree(vendorId);
-        }
-      }
-    },
-    {
-      event: 'preferences.clickvendordisagree',
-      listener: function ({ vendorId }) {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickVendorDisagree.postMessage(vendorId);
-        } else {
-          androidInterface.onPreferencesClickVendorDisagree(vendorId);
-        }
-      }
-    },
-    {
-      event: 'preferences.clickvendorsavechoices',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickVendorSaveChoices.postMessage("");
-        } else {
-          androidInterface.onPreferencesClickVendorSaveChoices();
-        }
-      }
-    },
-    {
-      event: 'preferences.clickviewvendors',
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesClickViewVendors.postMessage("");
-        } else {
-          androidInterface.onPreferencesClickViewVendors();
-        }
-      }
-    },
-    {
-      event: "preferences.hidden",
-      listener: function () {
-        if (Didomi.notice.isVisible()) {
+      {
+        event: "preferences.shown",
+        listener: function () {
           if (isIOS()) {
-            window.webkit.messageHandlers.preferencesHidden.postMessage("");
+            window.webkit.messageHandlers.preferencesShown.postMessage("");
           } else {
-            androidInterface.onPreferencesHidden();
-          }
-        } else {
-          if (isIOS()) {
-            window.webkit.messageHandlers.dismissWebView.postMessage("");
-          } else {
-            androidInterface.onDismissPreferences();
+            androidInterface.onPreferencesShown();
           }
         }
-      }
-    },
-    {
-      event: "preferences.shown",
-      listener: function () {
-        if (isIOS()) {
-          window.webkit.messageHandlers.preferencesShown.postMessage("");
-        } else {
-          androidInterface.onPreferencesShown();
-        }
-      }
-    },
-  );
+      },
+    );
 }
 
 /**
@@ -385,7 +398,7 @@
 
 /**
  * Remove all accents and special characters from id field
- * @param {string} id 
+ * @param {string} id
  * @returns the sanitized id
  */
 function sanitizeID(id) {
@@ -398,16 +411,14 @@
 }
 
 /**
- * Fix unescaped quotes and html tags.
+ * Fix unescaped quotes.
  * @param {string} text
  * @returns the sanitized text
  */
 function sanitizeText(text) {
   return text
     // Escape unescaped quotes
-    .replace(/(?<!\\)(['"])/g, '\$1')
-    // Remove html tags
-    .replace(/[<>]/g, '');
+    .replace(/(?<!\\)(['"])/g, '\$1');
 }
 
 /**
@@ -483,9 +494,10 @@
  * Prepare config file to be consumed by the Web SDK, by disabling the features already handled by Mobile SDKs.
  * @param {*} configFromMobile Config provided by mobile.
  * @param {string} languageCode language code to be set in the Config.
+ * @param {boolean} isUnderage whether the notice should be underage or not.
  * @returns Config with unneeded features disabled
  */
-function prepareConfigFromMobile(configFromMobile, languageCode) {
+function prepareConfigFromMobile(configFromMobile, languageCode, isUnderage) {
   if (configFromMobile == null) {
     return null;
   }
@@ -504,10 +516,24 @@
     configFromMobile.app.consentString.signatureEnabled = false;
   }
 
+  // Ignore daysBeforeShowingAgain as this is already handled by the mobile SDKs.
+  if (configFromMobile.notice) {
+    delete configFromMobile.notice.daysBeforeShowingAgain;
+  }
+
   if (languageCode) {
+    if (languageCode == "pt-PT") {
+      // Temporary workaround for https://didomi.atlassian.net/browse/CMP-5552
+      languageCode = "pt";
+    }
     configFromMobile.languages = { enabled: [languageCode], default: languageCode };
   }
 
+  if (isUnderage) {
+    configFromMobile.user = configFromMobile.user || {};
+    configFromMobile.user.isUnderage = isUnderage;
+  }
+
   return configFromMobile;
 }
 

--
Gitblit v1.8.0