@@ -17,9 +14,26 @@
Client-Side ${IDENTITY_NAME} Integration with Google Secure Signals
- This example demonstrates how a content publisher can integrate ${IDENTITY_NAME} with Google Secure Signals for Google Ad Manager, using client-side token generation. For documentation, see the Client-Side Integration Guide for JavaScript and Google Ad Manager Secure Signals Integration Guide.
+ This example demonstrates how a content publisher can integrate ${IDENTITY_NAME} with Google Secure Signals for Google Ad Manager, using client-side token generation. For documentation, see the Client-Side Integration Guide for JavaScript and Google Ad Manager Secure Signals Integration Guide. [Source Code]
+
+
+
+
+
+
+
${IDENTITY_NAME} Integration Status
@@ -93,6 +107,13 @@ ${IDENTITY_NAME} Integration Status
|
+
+
+
+
Google Secure Signals Status
+
Secure Signals automatically reads the token from storage and shares it with Google Ad Manager.
+
+
|
@@ -123,6 +144,7 @@ ${IDENTITY_NAME} Integration Status
|
+
-
-
-
-
-
diff --git a/web-integrations/google-secure-signals/client-side/html/styles/app.css b/web-integrations/google-secure-signals/client-side/html/styles/app.css
index 7c9ace9d..5e13b7d1 100644
--- a/web-integrations/google-secure-signals/client-side/html/styles/app.css
+++ b/web-integrations/google-secure-signals/client-side/html/styles/app.css
@@ -143,13 +143,26 @@ h2 {
border-bottom: 3px solid var(--primary-orange);
}
+/* Teal section header for Google Secure Signals */
+h2.section-teal {
+ border-bottom: 3px solid var(--accent-teal);
+}
+
p {
font-size: 0.95rem;
- color: var(--text-gray);
+ color: var(--text-dark);
margin-bottom: 2rem;
line-height: 1.8;
}
+/* Section summary - same styling as intro but gray */
+p.section-summary {
+ font-size: 0.95rem;
+ color: var(--text-gray);
+ margin-bottom: 1rem;
+ line-height: 1.8;
+}
+
a {
color: var(--link-color);
text-decoration: underline;
@@ -161,33 +174,37 @@ a:hover {
opacity: 0.8;
}
-/* State Table */
-#uid_state {
+/* State Tables */
+#uid_state,
+#secure_signals_state {
width: 100%;
border-collapse: separate;
border-spacing: 0;
- margin: 2rem 0;
+ margin: 1rem 0 2rem 0;
border: 2px solid var(--border-color);
border-radius: 8px;
- overflow: hidden;
+ overflow: visible;
font-size: 0.875rem;
position: relative;
- overflow: visible;
}
-#uid_state tr {
+#uid_state tr,
+#secure_signals_state tr {
border-bottom: 1px solid var(--border-color);
}
-#uid_state tr:last-child {
+#uid_state tr:last-child,
+#secure_signals_state tr:last-child {
border-bottom: none;
}
-#uid_state tr:nth-child(even) {
+#uid_state tr:nth-child(even),
+#secure_signals_state tr:nth-child(even) {
background-color: var(--bg-light);
}
-#uid_state td {
+#uid_state td,
+#secure_signals_state td {
padding: 1rem;
vertical-align: top;
}
@@ -217,6 +234,11 @@ a:hover {
margin-top: 2rem;
}
+.form.top-form {
+ margin-top: 0;
+ margin-bottom: 2rem;
+}
+
.email_prompt {
display: flex;
gap: 0;
@@ -277,7 +299,6 @@ a:hover {
border-radius: 8px;
}
-/* Opt-out Banner */
/* Success Message */
.message {
background: linear-gradient(135deg, rgba(34, 197, 94, 0.1) 0%, rgba(34, 197, 94, 0.05) 100%);
@@ -365,6 +386,39 @@ a:hover {
opacity: 1;
}
+/* Video Container Styling */
+#page-content {
+ margin-top: 2rem;
+}
+
+#video-container {
+ position: relative;
+ max-width: 600px;
+}
+
+#video-element {
+ width: 100%;
+ border-radius: 8px;
+}
+
+#play-button {
+ width: 100px;
+ height: 36px;
+ margin-top: 0.5rem;
+ background: var(--button-navy);
+ color: white;
+ border: none;
+ border-radius: 6px;
+ font-size: 0.9rem;
+ font-weight: 600;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+
+#play-button:hover {
+ background: var(--button-navy-hover);
+}
+
/* Responsive Design */
@media (max-width: 1024px) {
.page-wrapper {
diff --git a/web-integrations/google-secure-signals/react-client-side/src/SecureSignalsApp.tsx b/web-integrations/google-secure-signals/react-client-side/src/SecureSignalsApp.tsx
index 61829c5b..24bae32c 100644
--- a/web-integrations/google-secure-signals/react-client-side/src/SecureSignalsApp.tsx
+++ b/web-integrations/google-secure-signals/react-client-side/src/SecureSignalsApp.tsx
@@ -383,71 +383,86 @@ const SecureSignalsApp = () => {
return (
+ {/* Main Content Area */}
-
- React Client-Side {IDENTITY_NAME} SDK Integration Example with Google Secure Signals
-
-
- This example demonstrates how a content publisher can integrate {IDENTITY_NAME} with Google Secure Signals using client-side token generation with React, where the SDK generates tokens directly in the browser. For documentation, see the{' '}
-
- Client-Side Integration Guide for JavaScript
- {' '}
- and{' '}
-
- Google Ad Manager Secure Signals Integration Guide
- .
+
React Client-Side {IDENTITY_NAME} Integration with Google Secure Signals
+
+ This example demonstrates how a content publisher can integrate {IDENTITY_NAME} with Google Secure Signals for Google Ad Manager, using client-side token generation. For documentation, see the{' '}
+ Client-Side Integration Guide for JavaScript and{' '}
+ Google Ad Manager Secure Signals Integration Guide.
-
-
-
-
+ {/* Generate/Clear buttons at the top for easy access */}
+ {isOptedOut ? (
+ <>
+
+
The email address you entered has opted out of {IDENTITY_NAME}.
+
+
+
+
+ >
+ ) : !isLoggedIn ? (
+
-
-
+ ) : (
+
+
+
+ )}
+ {/* UID2 Integration Status Section */}
{IDENTITY_NAME} Integration Status
-
+
+
- |
+ |
Ready for Targeted Advertising:
?
- Indicates whether a valid {IDENTITY_NAME} token is present and can be passed to Google Secure Signals for targeted advertising.
+ Indicates whether a valid {IDENTITY_NAME} token is present and can be used for personalized ad targeting.
|
-
- {targetedAdvertisingReady ? 'yes' : 'no'}
- |
+ {targetedAdvertisingReady ? 'yes' : 'no'} |
- |
+ |
Advertising Token:
?
- The encrypted {IDENTITY_NAME} token passed to Google Secure Signals for advertising. It is automatically refreshed by the SDK in the background when expired.
+ The encrypted {IDENTITY_NAME} token passed to Google Ad Manager for advertising. It is automatically refreshed by the SDK in the background when expired.
|
-
- {advertisingToken}
- |
+ {advertisingToken} |
- |
+ |
Is Login Required?
@@ -458,14 +473,12 @@ const SecureSignalsApp = () => {
|
-
- {loginRequired ? 'yes' : 'no'}
- |
+ {loginRequired ? 'yes' : 'no'} |
- |
+ |
- Has opted out?
+ Has Opted Out?
?
@@ -474,12 +487,10 @@ const SecureSignalsApp = () => {
|
-
- {isOptedOut ? 'yes' : 'no'}
- |
+ {isOptedOut ? 'yes' : 'no'} |
- |
+ |
Identity Callback State:
@@ -490,81 +501,64 @@ const SecureSignalsApp = () => {
|
-
- {identityState}
- |
+ {identityState} |
+
+
+
+ {/* Google Secure Signals Section */}
+ Google Secure Signals Status
+ Secure Signals automatically reads the token from storage and shares it with Google Ad Manager.
+
+
+
- |
+ |
Secure Signals Loaded?
?
- Indicates whether Google Secure Signals has successfully loaded and cached the {IDENTITY_NAME} token.
+ Indicates whether Google Secure Signals has successfully loaded and stored the {IDENTITY_NAME} token. Returns "yes" when signals are available in localStorage.
|
-
- {secureSignalsLoaded ? 'yes' : 'no'}
- |
+ {secureSignalsLoaded ? 'yes' : 'no'} |
- |
+ |
Secure Signals Value:
?
- The {IDENTITY_NAME} data stored by Google Secure Signals in local storage for use in ad requests.
+ The encrypted {IDENTITY_NAME} signals stored by Google in localStorage under the key '{SECURE_SIGNALS_STORAGE_KEY}'. These signals are shared with Google Ad Manager.
|
-
- {secureSignalsValue}
- |
+ {secureSignalsValue} |
- {isOptedOut ? (
- <>
-
-
The email address you entered has opted out of {IDENTITY_NAME}.
-
-
-
-
- >
- ) : !isLoggedIn ? (
-
- ) : (
-
+ {/* Sidebar for Instructions */}