1<!DOCTYPE html> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87<html> 88<head> 89 90 91<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 92<meta name="viewport" content="width=device-width" /> 93 94<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> 95<title>DataLayer | Android Developers</title> 96 97<!-- STYLESHEETS --> 98<link rel="stylesheet" 99href="//fonts.googleapis.com/css?family=Roboto+Condensed"> 100<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" 101 title="roboto"> 102<link href="/assets/css/default.css?v=2" rel="stylesheet" type="text/css"> 103 104 105 106<!-- JAVASCRIPT --> 107<script src="//www.google.com/jsapi" type="text/javascript"></script> 108<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script> 109<script type="text/javascript"> 110 var toRoot = "/"; 111 var metaTags = []; 112 var devsite = false; 113</script> 114<script src="/assets/js/docs.js?v=2" type="text/javascript"></script> 115 116<script> 117 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 118 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 119 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 120 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 121 122 ga('create', 'UA-5831155-1', 'android.com'); 123 ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker); 124 ga('send', 'pageview'); 125 ga('universal.send', 'pageview'); // Send page view for new tracker. 126</script> 127 128</head> 129 130<body class="gc-documentation google 131 develop" itemscope itemtype="http://schema.org/Article"> 132 <div id="doc-api-level" class="" style="display:none"></div> 133 <a name="top"></a> 134 135 136<a name="top"></a> 137 138 <!-- Header --> 139 <div id="header-wrapper"> 140 <div id="header"> 141 <div class="wrap" id="header-wrap"> 142 <div class="col-3 logo"> 143 <a href="/index.html"> 144 <img src="/assets/images/dac_logo.png" 145 srcset="/assets/images/dac_logo@2x.png 2x" 146 width="123" height="25" alt="Android Developers" /> 147 </a> 148 <div class="btn-quicknav" id="btn-quicknav"> 149 <a href="#" class="arrow-inactive">Quicknav</a> 150 <a href="#" class="arrow-active">Quicknav</a> 151 </div> 152 </div> 153 <ul class="nav-x col-9"> 154 <li class="design"> 155 <a href="/design/index.html" 156 zh-tw-lang="設計" 157 zh-cn-lang="设计" 158 ru-lang="Проектирование" 159 ko-lang="디자인" 160 ja-lang="設計" 161 es-lang="Diseñar" 162 >Design</a></li> 163 <li class="develop"><a href="/develop/index.html" 164 zh-tw-lang="開發" 165 zh-cn-lang="开发" 166 ru-lang="Разработка" 167 ko-lang="개발" 168 ja-lang="開発" 169 es-lang="Desarrollar" 170 >Develop</a></li> 171 <li class="distribute last"><a href="/distribute/index.html" 172 zh-tw-lang="發佈" 173 zh-cn-lang="分发" 174 ru-lang="Распространение" 175 ko-lang="배포" 176 ja-lang="配布" 177 es-lang="Distribuir" 178 >Distribute</a></li> 179 </ul> 180 181 182 183 184<div class="menu-container"> 185 <div class="moremenu"> 186 <div id="more-btn"></div> 187 </div> 188 <div class="morehover" id="moremenu"> 189 <div class="top"></div> 190 <div class="mid"> 191 <div class="header">Links</div> 192 <ul> 193 <li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li> 194 <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li> 195 <li><a href="/about/index.html">About Android</a></li> 196 </ul> 197 <div class="header">Android Sites</div> 198 <ul> 199 <li><a href="http://www.android.com">Android.com</a></li> 200 <li class="active"><a>Android Developers</a></li> 201 <li><a href="http://source.android.com">Android Open Source Project</a></li> 202 </ul> 203 204 205 206 <div class="header">Language</div> 207 <div id="language" class="locales"> 208 <select name="language" onChange="changeLangPref(this.value, true)"> 209 <option value="en">English</option> 210 <option value="es">Español</option> 211 <option value="ja">日本語</option> 212 <option value="ko">한국어</option> 213 <option value="ru">Русский</option> 214 <option value="zh-cn">中文 (中国)</option> 215 <option value="zh-tw">中文 (台灣)</option> 216 </select> 217 </div> 218 <script type="text/javascript"> 219 <!-- 220 loadLangPref(); 221 //--> 222 </script> 223 224 225 <br class="clearfix" /> 226 </div><!-- end 'mid' --> 227 <div class="bottom"></div> 228 </div><!-- end 'moremenu' --> 229 230 <div class="search" id="search-container"> 231 <div class="search-inner"> 232 <div id="search-btn"></div> 233 <div class="left"></div> 234 <form onsubmit="return submit_search()"> 235 <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q" 236 onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)" 237 onkeydown="return search_changed(event, true, '/')" 238 onkeyup="return search_changed(event, false, '/')" /> 239 </form> 240 <div class="right"></div> 241 <a class="close hide">close</a> 242 <div class="left"></div> 243 <div class="right"></div> 244 </div><!-- end search-inner --> 245 </div><!-- end search-container --> 246 247 <div class="search_filtered_wrapper reference"> 248 <div class="suggest-card reference no-display"> 249 <ul class="search_filtered"> 250 </ul> 251 </div> 252 </div> 253 254 <div class="search_filtered_wrapper docs"> 255 <div class="suggest-card dummy no-display"> </div> 256 <div class="suggest-card develop no-display"> 257 <ul class="search_filtered"> 258 </ul> 259 <div class="child-card guides no-display"> 260 </div> 261 <div class="child-card training no-display"> 262 </div> 263 <div class="child-card samples no-display"> 264 </div> 265 </div> 266 <div class="suggest-card design no-display"> 267 <ul class="search_filtered"> 268 </ul> 269 </div> 270 <div class="suggest-card distribute no-display"> 271 <ul class="search_filtered"> 272 </ul> 273 </div> 274 </div> 275</div><!-- end menu-container (search and menu widget) --> 276 277 278 279 <!-- Expanded quicknav --> 280 <div id="quicknav" class="col-13"> 281 <ul> 282 <li class="about"> 283 <ul> 284 <li><a href="/about/index.html">About</a></li> 285 <li><a href="/wear/index.html">Wear</a></li> 286 <li><a href="/tv/index.html">TV</a></li> 287 <li><a href="/auto/index.html">Auto</a></li> 288 </ul> 289 </li> 290 <li class="design"> 291 <ul> 292 <li><a href="/design/index.html">Get Started</a></li> 293 <li><a href="/design/devices.html">Devices</a></li> 294 <li><a href="/design/style/index.html">Style</a></li> 295 <li><a href="/design/patterns/index.html">Patterns</a></li> 296 <li><a href="/design/building-blocks/index.html">Building Blocks</a></li> 297 <li><a href="/design/downloads/index.html">Downloads</a></li> 298 <li><a href="/design/videos/index.html">Videos</a></li> 299 </ul> 300 </li> 301 <li class="develop"> 302 <ul> 303 <li><a href="/training/index.html" 304 zh-tw-lang="訓練課程" 305 zh-cn-lang="培训" 306 ru-lang="Курсы" 307 ko-lang="교육" 308 ja-lang="トレーニング" 309 es-lang="Capacitación" 310 >Training</a></li> 311 <li><a href="/guide/index.html" 312 zh-tw-lang="API 指南" 313 zh-cn-lang="API 指南" 314 ru-lang="Руководства по API" 315 ko-lang="API 가이드" 316 ja-lang="API ガイド" 317 es-lang="Guías de la API" 318 >API Guides</a></li> 319 <li><a href="/reference/packages.html" 320 zh-tw-lang="參考資源" 321 zh-cn-lang="参考" 322 ru-lang="Справочник" 323 ko-lang="참조문서" 324 ja-lang="リファレンス" 325 es-lang="Referencia" 326 >Reference</a></li> 327 <li><a href="/sdk/index.html" 328 zh-tw-lang="相關工具" 329 zh-cn-lang="工具" 330 ru-lang="Инструменты" 331 ko-lang="도구" 332 ja-lang="ツール" 333 es-lang="Herramientas" 334 >Tools</a> 335 </li> 336 <li><a href="/google/index.html">Google Services</a> 337 </li> 338 339 <li><a href="/samples/index.html">Samples</a> 340 </li> 341 342 </ul> 343 </li> 344 <li class="distribute last"> 345 <ul> 346 <li><a href="/distribute/googleplay/index.html">Google Play</a></li> 347 <li><a href="/distribute/essentials/index.html">Essentials</a></li> 348 <li><a href="/distribute/users/index.html">Get Users</a></li> 349 <li><a href="/distribute/engage/index.html">Engage & Retain</a></li> 350 <li><a href="/distribute/monetize/index.html">Monetize</a></li> 351 <li><a href="/distribute/tools/index.html">Tools & Reference</a></li> 352 <li><a href="/distribute/stories/index.html">Developer Stories</a></li> 353 </ul> 354 </li> 355 </ul> 356 </div><!-- /Expanded quicknav --> 357 </div><!-- end header-wrap.wrap --> 358 </div><!-- end header --> 359 360 361 <!-- Secondary x-nav --> 362 <div id="nav-x"> 363 <div class="wrap"> 364 <ul class="nav-x col-9 develop" style="width:100%"> 365 <li class="training"><a href="/training/index.html" 366 zh-tw-lang="訓練課程" 367 zh-cn-lang="培训" 368 ru-lang="Курсы" 369 ko-lang="교육" 370 ja-lang="トレーニング" 371 es-lang="Capacitación" 372 >Training</a></li> 373 <li class="guide"><a href="/guide/index.html" 374 zh-tw-lang="API 指南" 375 zh-cn-lang="API 指南" 376 ru-lang="Руководства по API" 377 ko-lang="API 가이드" 378 ja-lang="API ガイド" 379 es-lang="Guías de la API" 380 >API Guides</a></li> 381 <li class="reference"><a href="/reference/packages.html" 382 zh-tw-lang="參考資源" 383 zh-cn-lang="参考" 384 ru-lang="Справочник" 385 ko-lang="참조문서" 386 ja-lang="リファレンス" 387 es-lang="Referencia" 388 >Reference</a></li> 389 <li class="tools"><a href="/sdk/index.html" 390 zh-tw-lang="相關工具" 391 zh-cn-lang="工具" 392 ru-lang="Инструменты" 393 ko-lang="도구" 394 ja-lang="ツール" 395 es-lang="Herramientas" 396 >Tools</a></li> 397 <li class="google"><a href="/google/index.html" 398 >Google Services</a> 399 </li> 400 401 <li class="samples"><a href="/samples/index.html" 402 >Samples</a> 403 </li> 404 405 </ul> 406 </div> 407 </div> 408 <!-- /Sendondary x-nav DEVELOP --> 409 410 411 412 <div id="searchResults" class="wrap" style="display:none;"> 413 <h2 id="searchTitle">Results</h2> 414 <div id="leftSearchControl" class="search-control">Loading...</div> 415 </div> 416 </div> <!--end header-wrapper --> 417 418 <div id="sticky-header"> 419 <div> 420 <a class="logo" href="#top"></a> 421 <a class="top" href="#top"></a> 422 <ul class="breadcrumb"> 423 424 <li class="current">DataLayer</li> 425 </ul> 426 </div> 427 </div> 428 429 430 431 432 433 434 <div class="wrap clearfix" id="body-content"> 435 <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement"> 436 <div id="devdoc-nav" class="scroll-pane"> 437 438 439 440<ul id="nav"> 441 442 <li class="nav-section"> 443 <div class="nav-section-header empty"><a href="/google/index.html"> 444 <span class="en">Overview</span> 445 </a></div> 446 </li> 447 448 <li class="nav-section"> 449 <div class="nav-section-header empty"><a href="/google/play-services/games.html"> 450 <span class="en">Games</span> 451 </a></div> 452 </li> 453 <li class="nav-section"> 454 <div class="nav-section-header empty"><a href="/google/play-services/location.html"> 455 <span class="en">Location</span> 456 </a></div> 457 </li> 458 <li class="nav-section"> 459 <div class="nav-section-header empty"><a href="/google/play-services/plus.html"> 460 <span class="en">Google+</span> 461 </a></div> 462 </li> 463 <li class="nav-section"> 464 <div class="nav-section-header empty"><a href="/google/play-services/maps.html"> 465 <span class="en">Maps</span> 466 </a></div> 467 </li> 468 <li class="nav-section"> 469 <div class="nav-section-header empty"><a href="/google/play-services/drive.html"> 470 <span class="en">Drive</span> 471 </a></div> 472 </li> 473 <li class="nav-section"> 474 <div class="nav-section-header empty"><a href="/google/play-services/cast.html"> 475 <span class="en">Cast</span> 476 </a></div> 477 </li> 478 <li class="nav-section"> 479 <div class="nav-section-header"><a href="/google/play-services/ads.html"> 480 <span class="en">Ads</span></a> 481 </div> 482 <ul> 483 <li><a href="/google/play-services/id.html"> 484 <span class="en">Advertising ID</span></a> 485 </li> 486 </ul> 487 </li> 488 <li class="nav-section"> 489 <div class="nav-section-header empty"><a href="/google/play-services/wallet.html"> 490 <span class="en">Wallet</span> 491 </a></div> 492 </li> 493 494 495 <li class="nav-section"> 496 <div class="nav-section-header"><a href="/google/play-services/index.html"> 497 <span class="en">Google Play Services</span></a> 498 </div> 499 <ul> 500 <li><a href="/google/play-services/setup.html"> 501 <span class="en">Setting Up Google Play Services</span></a> 502 </li> 503 <li class="nav-section"> 504 <div class="nav-section-header"><a href="/google/auth/api-client.html"> 505 <span class="en">Accessing Google APIs</span></a> 506 </div> 507 <ul> 508 <li> 509 <a href="/google/auth/http-auth.html"> 510 <span class="en">Authorizing with Google for REST APIs</span> 511 </a> 512 </li> 513 </ul> 514 </li> 515 <li id="gms-tree-list" class="nav-section"> 516 <div class="nav-section-header"> 517 <a href="/reference/gms-packages.html"> 518 <span class="en">Reference</span> 519 </a> 520 <div> 521 </li> 522 </ul> 523 </li> 524 525 526 <li class="nav-section"> 527 <div class="nav-section-header"><a href="/google/play/billing/index.html"> 528 <span class="en">Google Play In-app Billing</span></a> 529 </div> 530 <ul> 531 <li><a href="/google/play/billing/billing_overview.html"> 532 <span class="en">Overview</span></a> 533 </li> 534 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html"> 535 <span class="en">Version 3 API</span></a></div> 536 <ul> 537 <li><a href="/google/play/billing/billing_integrate.html"> 538 <span class="en">Implementing the API</span></a></li> 539 <li><a href="/google/play/billing/billing_reference.html"> 540 <span class="en">Reference</span></a></li> 541 </ul> 542 </li> 543 <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html"> 544 <span class="en">Version 2 API</span></a></div> 545 <ul> 546 <li><a href="/google/play/billing/v2/billing_integrate.html"> 547 <span class="en">Implementing the API</span></a></li> 548 <li><a href="/google/play/billing/v2/billing_subscriptions.html"> 549 <span class="en">Subscriptions</span></a></li> 550 <li><a href="/google/play/billing/v2/billing_reference.html"> 551 <span class="en">Reference</span></a></li> 552 </ul> 553 </li> 554 <li><a href="/google/play/billing/billing_subscriptions.html"> 555 <span class="en">Subscriptions</span></a> 556 </li> 557 <li><a href="/google/play/billing/billing_best_practices.html"> 558 <span class="en">Security and Design</span></a> 559 </li> 560 <li><a href="/google/play/billing/billing_testing.html"> 561 <span class="en">Testing In-app Billing</span></a> 562 </li> 563 <li><a href="/google/play/billing/billing_admin.html"> 564 <span class="en">Administering In-app Billing</span></a> 565 </li> 566 <li><a href="/google/play/billing/versions.html"> 567 <span class="en">Version Notes</span></a> 568 </li> 569 </ul> 570 </li> 571 572 573 574 <li class="nav-section"> 575 <div class="nav-section-header"><a href="/google/gcm/index.html"> 576 <span class="en">Google Cloud Messaging</span></a> 577 </div> 578 <ul> 579 <li><a href="/google/gcm/gcm.html"> 580 <span class="en">Overview</span></a> 581 </li> 582 <li><a href="/google/gcm/gs.html"> 583 <span class="en">Getting Started</span></a> 584 </li> 585 <li><a href="/google/gcm/client.html"> 586 <span class="en">Implementing GCM Client</span></a> 587 </li> 588 <li class="nav-section"><div class="nav-section-header"><a href="/google/gcm/server.html"> 589 <span class="en">Implementing GCM Server</span></a></div> 590 <ul> 591 <li><a href="/google/gcm/ccs.html"> 592 <span class="en">CCS (XMPP)</span></a></li> 593 <li><a href="/google/gcm/http.html"> 594 <span class="en">HTTP</span></a></li> 595 </ul> 596 </li> 597 <li><a href="/google/gcm/notifications.html"> 598 <span class="en">User Notifications</span></a> 599 </li> 600 <li><a href="/google/gcm/adv.html"> 601 <span class="en">Advanced Topics</span></a> 602 </li> 603 <li><a href="/google/gcm/c2dm.html"> 604 <span class="en">Migration</span></a> 605 </li> 606 <li id="gcm-tree-list" class="nav-section"> 607 <div class="nav-section-header"> 608 <a href="/reference/gcm-packages.html"> 609 <span class="en">Reference</span> 610 </a> 611 <div> 612 </li> 613 </ul> 614 </li> 615 616 <li class="nav-section"> 617 <div class="nav-section-header empty"><a href="/google/gcs/index.html"> 618 <span class="en">Google Cloud Save</span></a> 619 </div> 620 </li> 621 622 <li class="nav-section"> 623 <div class="nav-section-header"><a href="/google/play/dist.html"> 624 <span class="en">Google Play Distribution</span></a> 625 </div> 626 <ul> 627 <li><a href="/google/play/filters.html"> 628 <span class="en">Filters on Google Play</span></a> 629 </li> 630 <li><a href="/google/play/billing/gp-purchase-status-api.html"> 631 <span class="en">Google Play Developer API</span></a> 632 </li> 633 <li><a href="/google/play/publishing/multiple-apks.html"> 634 <span class="en">Multiple APK Support</span></a> 635 </li> 636 <li><a href="/google/play/expansion-files.html"> 637 <span class="en">APK Expansion Files</span></a> 638 </li> 639 <li class="nav-section"> 640 <div class="nav-section-header"><a href="/google/play/licensing/index.html"> 641 <span class="en">Application Licensing</span></a> 642 </div> 643 <ul> 644 <li><a href="/google/play/licensing/overview.html"> 645 <span class="en">Licensing Overview</span></a> 646 </li> 647 <li><a href="/google/play/licensing/setting-up.html"> 648 <span class="en">Setting Up for Licensing</span></a> 649 </li> 650 <li><a href="/google/play/licensing/adding-licensing.html"> 651 <span class="en">Adding Licensing to Your App</span></a> 652 </li> 653 <li><a href="/google/play/licensing/licensing-reference.html"> 654 <span class="en">Licensing Reference</span></a> 655 </li> 656 </ul> 657 </li> 658 659 <li class="nav-section"> 660 <div class="nav-section-header"><a href="/google/backup/index.html"> 661 Android Backup Service</a> 662 </div> 663 <ul> 664 <li><a href="/google/backup/signup.html"> 665 Register</a> 666 </li> 667 </ul> 668 </li> 669 670 </ul> 671 672</li> 673 674 675 676</ul> 677 678<script type="text/javascript"> 679<!-- 680 buildToggleLists(); 681 changeNavLang(getLangPref()); 682//--> 683</script> 684 685 686 687 688 </div> 689 <script type="text/javascript"> 690 showGoogleRefTree(); 691 692 </script> 693 </div> <!-- end side-nav --> 694 <script> 695 $(document).ready(function() { 696 scrollIntoView("devdoc-nav"); 697 }); 698 </script> 699 700 701 702 703 704 705<div class="col-12" id="doc-col"> 706 707<div id="api-info-block"> 708 709 710 711 712 713 714 715 716 717 718 719<div class="sum-details-links"> 720 721Summary: 722 723 724 725 726 727 <a href="#constants">Constants</a> 728 729 730 731 732 | <a href="#lfields">Fields</a> 733 734 735 736 737 738 739 | <a href="#pubmethods">Methods</a> 740 741 742 743 744 | <a href="#inhmethods">Inherited Methods</a> 745 746| <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a> 747 748</div><!-- end sum-details-links --> 749<div class="api-level"> 750 751 752 753 754</div> 755</div><!-- end api-info-block --> 756 757 758<!-- ======== START OF CLASS DATA ======== --> 759 760<div id="jd-header"> 761 public 762 763 764 765 class 766<h1 itemprop="name">DataLayer</h1> 767 768 769 770 771 extends Object<br/> 772 773 774 775 776 777 778 779 780 781</div><!-- end header --> 782 783<div id="naMessage"></div> 784 785<div id="jd-content" class="api apilevel-"> 786<table class="jd-inheritance-table"> 787 788 789 <tr> 790 791 <td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td> 792 </tr> 793 794 795 <tr> 796 797 <td class="jd-inheritance-space"> ↳</td> 798 799 <td colspan="1" class="jd-inheritance-class-cell">com.google.android.gms.tagmanager.DataLayer</td> 800 </tr> 801 802 803</table> 804 805 806 807 808 809 810 811<div class="jd-descr"> 812 813 814<h2>Class Overview</h2> 815<p itemprop="articleBody">The data layer is a map holding generic information about the application. It uses a standard set 816 of keys so it can be read by any party that understands the specification. The data layer state 817 is updated through its API. For example, an app might start with the following dataLayer: 818 819 <pre> 820 { 821 "title": "Original screen title" 822 } 823</pre> 824 825 As the state/data of an app can change, the app can update the dataLayer with a call such as: 826 827 <pre> 828 dataLayer.push(DataLayer.mapOf("title", "New screen title")); 829</pre> 830 831 Now the data layer contains: 832 833 <pre> 834 { 835 "title": "New screen title" 836 } 837</pre> 838 839 After another push happens: 840 841 <pre> 842 dataLayer.push(DataLayer.mapOf("xyz", 3)); 843</pre> 844 845 The dataLayer contains: 846 847 <pre> 848 { 849 "title": "New screen title", 850 "xyz": 3 851 } 852</pre> 853 854 The following example demonstrates how array and map merging works. If the original dataLayer 855 contains: 856 857 <pre> 858 { 859 "items": ["item1", null, "item2", {"a": "aValue", "b": "bValue"}] 860 } 861</pre> 862 863 After this push happens: 864 865 <pre> 866 dataLayer.push("items", DataLayer.listOf(null, "item6", DataLayer.OBJECT_NOT_PRESENT, 867 DataLayer.mapOf("a", null))); 868</pre> 869 870 The dataLayer contains: 871 872 <pre> 873 { 874 "items": [null, "item6", "item2", {"a": null, "b": "bValue"}] 875 } 876</pre> 877 <p> 878 Pushes happen synchronously; after the push, changes have been reflected in the model. 879 <p> 880 When an event is pushed to the data layer, rules for tags are evaluated and any 881 tags matching this event will fire. For example, given a container with a tag whose firing rule 882 is that "event" is equal to "openScreen", after this push: 883 884 <pre> 885 dataLayer.pushEvent("openScreen", DataLayer.mapOf()); 886 </pre> 887 888 that tag will fire. 889</p> 890 891 892 893 894 895</div><!-- jd-descr --> 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912<div class="jd-descr"> 913 914 915<h2>Summary</h2> 916 917 918 919 920 921 922 923 924 925 926 927 928 929<!-- =========== ENUM CONSTANT SUMMARY =========== --> 930<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr> 931 932 933 934 <tr class="alt-color api apilevel-" > 935 <td class="jd-typecol">String</td> 936 <td class="jd-linkcol"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#EVENT_KEY">EVENT_KEY</a></td> 937 <td class="jd-descrcol" width="100%">If a map is pushed containing this key, it's treated as an event, and tags are evaluated.</td> 938 </tr> 939 940 941 942</table> 943 944 945 946 947 948 949 950<!-- =========== FIELD SUMMARY =========== --> 951<table id="lfields" class="jd-sumtable"><tr><th colspan="12">Fields</th></tr> 952 953 954 955 <tr class="alt-color api apilevel-" > 956 <td class="jd-typecol"><nobr> 957 public 958 static 959 final 960 Object</nobr></td> 961 <td class="jd-linkcol"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#OBJECT_NOT_PRESENT">OBJECT_NOT_PRESENT</a></td> 962 <td class="jd-descrcol" width="100%">Values of this type used in a List causes the List to be sparse when merging; it's as if 963 there were no element at that index.</td> 964 </tr> 965 966 967 968</table> 969 970 971 972 973 974 975 976 977 978 979 980<!-- ========== METHOD SUMMARY =========== --> 981<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr> 982 983 984 985 986 <tr class="alt-color api apilevel-" > 987 <td class="jd-typecol"><nobr> 988 989 990 991 992 993 Object</nobr> 994 </td> 995 <td class="jd-linkcol" width="100%"><nobr> 996 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#get(java.lang.String)">get</a></span>(String key)</nobr> 997 998 <div class="jd-descrdiv">Returns the object in the model associated with the given key.</div> 999 1000 </td></tr> 1001 1002 1003 1004 <tr class=" api apilevel-" > 1005 <td class="jd-typecol"><nobr> 1006 1007 1008 1009 static 1010 1011 List<Object></nobr> 1012 </td> 1013 <td class="jd-linkcol" width="100%"><nobr> 1014 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#listOf(java.lang.Object...)">listOf</a></span>(Object... objects)</nobr> 1015 1016 <div class="jd-descrdiv">Utility method that creates a list.</div> 1017 1018 </td></tr> 1019 1020 1021 1022 <tr class="alt-color api apilevel-" > 1023 <td class="jd-typecol"><nobr> 1024 1025 1026 1027 static 1028 1029 Map<String, Object></nobr> 1030 </td> 1031 <td class="jd-linkcol" width="100%"><nobr> 1032 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#mapOf(java.lang.Object...)">mapOf</a></span>(Object... objects)</nobr> 1033 1034 <div class="jd-descrdiv">Utility method that creates a map.</div> 1035 1036 </td></tr> 1037 1038 1039 1040 <tr class=" api apilevel-" > 1041 <td class="jd-typecol"><nobr> 1042 1043 1044 1045 1046 1047 void</nobr> 1048 </td> 1049 <td class="jd-linkcol" width="100%"><nobr> 1050 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#push(java.util.Map<java.lang.String, java.lang.Object>)">push</a></span>(Map<String, Object> update)</nobr> 1051 1052 <div class="jd-descrdiv">Merges the given <code>update</code> object into the existing data model, calling any 1053 listeners with the update (after the merge occurs).</div> 1054 1055 </td></tr> 1056 1057 1058 1059 <tr class="alt-color api apilevel-" > 1060 <td class="jd-typecol"><nobr> 1061 1062 1063 1064 1065 1066 void</nobr> 1067 </td> 1068 <td class="jd-linkcol" width="100%"><nobr> 1069 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#push(java.lang.String, java.lang.Object)">push</a></span>(String key, Object value)</nobr> 1070 1071 <div class="jd-descrdiv">Pushes a key/value pair of data to the data layer.</div> 1072 1073 </td></tr> 1074 1075 1076 1077 <tr class=" api apilevel-" > 1078 <td class="jd-typecol"><nobr> 1079 1080 1081 1082 1083 1084 void</nobr> 1085 </td> 1086 <td class="jd-linkcol" width="100%"><nobr> 1087 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#pushEvent(java.lang.String, java.util.Map<java.lang.String, java.lang.Object>)">pushEvent</a></span>(String eventName, Map<String, Object> update)</nobr> 1088 1089 <div class="jd-descrdiv">Pushes an event, along with an update map, to the data layer.</div> 1090 1091 </td></tr> 1092 1093 1094 1095 <tr class="alt-color api apilevel-" > 1096 <td class="jd-typecol"><nobr> 1097 1098 1099 1100 1101 1102 String</nobr> 1103 </td> 1104 <td class="jd-linkcol" width="100%"><nobr> 1105 <span class="sympad"><a href="/reference/com/google/android/gms/tagmanager/DataLayer.html#toString()">toString</a></span>()</nobr> 1106 1107 <div class="jd-descrdiv">Returns a human readable string representing the Data Layer object.</div> 1108 1109 </td></tr> 1110 1111 1112 1113</table> 1114 1115 1116 1117 1118 1119 1120 1121<!-- ========== METHOD SUMMARY =========== --> 1122<table id="inhmethods" class="jd-sumtable"><tr><th> 1123 <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a> 1124 <div style="clear:left;">Inherited Methods</div></th></tr> 1125 1126 1127<tr class="api apilevel-" > 1128<td colspan="12"> 1129 <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed" 1130 ><img id="inherited-methods-java.lang.Object-trigger" 1131 src="/assets/images/triangle-closed.png" 1132 class="jd-expando-trigger-img" /></a> 1133From class 1134 1135 java.lang.Object 1136 1137<div id="inherited-methods-java.lang.Object"> 1138 <div id="inherited-methods-java.lang.Object-list" 1139 class="jd-inheritedlinks"> 1140 </div> 1141 <div id="inherited-methods-java.lang.Object-summary" style="display: none;"> 1142 <table class="jd-sumtable-expando"> 1143 1144 1145 1146 1147 <tr class="alt-color api apilevel-" > 1148 <td class="jd-typecol"><nobr> 1149 1150 1151 1152 1153 1154 Object</nobr> 1155 </td> 1156 <td class="jd-linkcol" width="100%"><nobr> 1157 <span class="sympad">clone</span>()</nobr> 1158 1159 </td></tr> 1160 1161 1162 1163 <tr class=" api apilevel-" > 1164 <td class="jd-typecol"><nobr> 1165 1166 1167 1168 1169 1170 boolean</nobr> 1171 </td> 1172 <td class="jd-linkcol" width="100%"><nobr> 1173 <span class="sympad">equals</span>(Object arg0)</nobr> 1174 1175 </td></tr> 1176 1177 1178 1179 <tr class="alt-color api apilevel-" > 1180 <td class="jd-typecol"><nobr> 1181 1182 1183 1184 1185 1186 void</nobr> 1187 </td> 1188 <td class="jd-linkcol" width="100%"><nobr> 1189 <span class="sympad">finalize</span>()</nobr> 1190 1191 </td></tr> 1192 1193 1194 1195 <tr class=" api apilevel-" > 1196 <td class="jd-typecol"><nobr> 1197 1198 1199 final 1200 1201 1202 Class<?></nobr> 1203 </td> 1204 <td class="jd-linkcol" width="100%"><nobr> 1205 <span class="sympad">getClass</span>()</nobr> 1206 1207 </td></tr> 1208 1209 1210 1211 <tr class="alt-color api apilevel-" > 1212 <td class="jd-typecol"><nobr> 1213 1214 1215 1216 1217 1218 int</nobr> 1219 </td> 1220 <td class="jd-linkcol" width="100%"><nobr> 1221 <span class="sympad">hashCode</span>()</nobr> 1222 1223 </td></tr> 1224 1225 1226 1227 <tr class=" api apilevel-" > 1228 <td class="jd-typecol"><nobr> 1229 1230 1231 final 1232 1233 1234 void</nobr> 1235 </td> 1236 <td class="jd-linkcol" width="100%"><nobr> 1237 <span class="sympad">notify</span>()</nobr> 1238 1239 </td></tr> 1240 1241 1242 1243 <tr class="alt-color api apilevel-" > 1244 <td class="jd-typecol"><nobr> 1245 1246 1247 final 1248 1249 1250 void</nobr> 1251 </td> 1252 <td class="jd-linkcol" width="100%"><nobr> 1253 <span class="sympad">notifyAll</span>()</nobr> 1254 1255 </td></tr> 1256 1257 1258 1259 <tr class=" api apilevel-" > 1260 <td class="jd-typecol"><nobr> 1261 1262 1263 1264 1265 1266 String</nobr> 1267 </td> 1268 <td class="jd-linkcol" width="100%"><nobr> 1269 <span class="sympad">toString</span>()</nobr> 1270 1271 </td></tr> 1272 1273 1274 1275 <tr class="alt-color api apilevel-" > 1276 <td class="jd-typecol"><nobr> 1277 1278 1279 final 1280 1281 1282 void</nobr> 1283 </td> 1284 <td class="jd-linkcol" width="100%"><nobr> 1285 <span class="sympad">wait</span>()</nobr> 1286 1287 </td></tr> 1288 1289 1290 1291 <tr class=" api apilevel-" > 1292 <td class="jd-typecol"><nobr> 1293 1294 1295 final 1296 1297 1298 void</nobr> 1299 </td> 1300 <td class="jd-linkcol" width="100%"><nobr> 1301 <span class="sympad">wait</span>(long arg0, int arg1)</nobr> 1302 1303 </td></tr> 1304 1305 1306 1307 <tr class="alt-color api apilevel-" > 1308 <td class="jd-typecol"><nobr> 1309 1310 1311 final 1312 1313 1314 void</nobr> 1315 </td> 1316 <td class="jd-linkcol" width="100%"><nobr> 1317 <span class="sympad">wait</span>(long arg0)</nobr> 1318 1319 </td></tr> 1320 1321 1322</table> 1323 </div> 1324</div> 1325</td></tr> 1326 1327 1328</table> 1329 1330 1331</div><!-- jd-descr (summary) --> 1332 1333<!-- Details --> 1334 1335 1336 1337 1338 1339 1340 1341 1342<!-- XML Attributes --> 1343 1344 1345<!-- Enum Values --> 1346 1347 1348<!-- Constants --> 1349 1350 1351<!-- ========= ENUM CONSTANTS DETAIL ======== --> 1352<h2>Constants</h2> 1353 1354 1355 1356 1357<A NAME="EVENT_KEY"></A> 1358 1359<div class="jd-details api apilevel-"> 1360 <h4 class="jd-details-title"> 1361 <span class="normal"> 1362 public 1363 static 1364 final 1365 String 1366 </span> 1367 EVENT_KEY 1368 </h4> 1369 <div class="api-level"> 1370 1371 1372 1373 1374 </div> 1375 <div class="jd-details-descr"> 1376 1377 <div class="jd-tagdata jd-tagdescr"><p>If a map is pushed containing this key, it's treated as an event, and tags are evaluated. 1378</p></div> 1379 1380 1381 <div class="jd-tagdata"> 1382 <span class="jd-tagtitle">Constant Value: </span> 1383 <span> 1384 1385 "event" 1386 1387 </span> 1388 </div> 1389 1390 </div> 1391</div> 1392 1393 1394 1395 1396<!-- Fields --> 1397 1398 1399<!-- ========= FIELD DETAIL ======== --> 1400<h2>Fields</h2> 1401 1402 1403 1404 1405<A NAME="OBJECT_NOT_PRESENT"></A> 1406 1407<div class="jd-details api apilevel-"> 1408 <h4 class="jd-details-title"> 1409 <span class="normal"> 1410 public 1411 static 1412 final 1413 Object 1414 </span> 1415 OBJECT_NOT_PRESENT 1416 </h4> 1417 <div class="api-level"> 1418 1419 1420 1421 1422 </div> 1423 <div class="jd-details-descr"> 1424 1425 <div class="jd-tagdata jd-tagdescr"><p>Values of this type used in a List causes the List to be sparse when merging; it's as if 1426 there were no element at that index. 1427</p></div> 1428 1429 1430 </div> 1431</div> 1432 1433 1434 1435 1436<!-- Public ctors --> 1437 1438 1439 1440<!-- ========= CONSTRUCTOR DETAIL ======== --> 1441<!-- Protected ctors --> 1442 1443 1444 1445<!-- ========= METHOD DETAIL ======== --> 1446<!-- Public methdos --> 1447 1448<h2>Public Methods</h2> 1449 1450 1451 1452<A NAME="get(java.lang.String)"></A> 1453 1454<div class="jd-details api apilevel-"> 1455 <h4 class="jd-details-title"> 1456 <span class="normal"> 1457 public 1458 1459 1460 1461 1462 Object 1463 </span> 1464 <span class="sympad">get</span> 1465 <span class="normal">(String key)</span> 1466 </h4> 1467 <div class="api-level"> 1468 <div></div> 1469 1470 1471 1472 </div> 1473 <div class="jd-details-descr"> 1474 1475 <div class="jd-tagdata jd-tagdescr"><p>Returns the object in the model associated with the given key. If the key is not found, 1476 <code>null</code> is returned. 1477 <p> 1478 The key can can have embedded periods. For example: a key of <code>"a.b.c"</code> 1479 returns a map with key <code>"c"</code> in a map with key 1480 <code>"b"</code> in a map with key <code>"a"</code> in the 1481 model. 1482</p></div> 1483 1484 </div> 1485</div> 1486 1487 1488<A NAME="listOf(java.lang.Object...)"></A> 1489 1490<div class="jd-details api apilevel-"> 1491 <h4 class="jd-details-title"> 1492 <span class="normal"> 1493 public 1494 static 1495 1496 1497 1498 List<Object> 1499 </span> 1500 <span class="sympad">listOf</span> 1501 <span class="normal">(Object... objects)</span> 1502 </h4> 1503 <div class="api-level"> 1504 <div></div> 1505 1506 1507 1508 </div> 1509 <div class="jd-details-descr"> 1510 1511 <div class="jd-tagdata jd-tagdescr"><p>Utility method that creates a list. 1512 <p> 1513 For example, the following creates a list containing <code>"object1"</code> and 1514 <code>"object2"</code>: 1515 1516 <pre> 1517 List<Object> list = DataLayer.listOf("object1", "object2"); 1518 </pre> 1519</p></div> 1520 1521 </div> 1522</div> 1523 1524 1525<A NAME="mapOf(java.lang.Object...)"></A> 1526 1527<div class="jd-details api apilevel-"> 1528 <h4 class="jd-details-title"> 1529 <span class="normal"> 1530 public 1531 static 1532 1533 1534 1535 Map<String, Object> 1536 </span> 1537 <span class="sympad">mapOf</span> 1538 <span class="normal">(Object... objects)</span> 1539 </h4> 1540 <div class="api-level"> 1541 <div></div> 1542 1543 1544 1545 </div> 1546 <div class="jd-details-descr"> 1547 1548 <div class="jd-tagdata jd-tagdescr"><p>Utility method that creates a map. The parameters should be pairs of key values. 1549 <p> 1550 For example, the following creates a map mapping <code>"key1"</code> to 1551 <code>"value1"</code> and <code>"key2" 1552 </code> to <code>"value2"</code>: 1553 1554 <pre> 1555 Map<String, Object> map = DataLayer.mapOf("key1", "value1", 1556 "key2", "value2"); 1557 </pre></p></div> 1558 <div class="jd-tagdata"> 1559 <h5 class="jd-tagtitle">Throws</h5> 1560 <table class="jd-tagtable"> 1561 <tr> 1562 <th>IllegalArgumentException</td> 1563 <td>if there are an odd number of parameters or a key is not a 1564 string 1565</td> 1566 </tr> 1567 </table> 1568 </div> 1569 1570 </div> 1571</div> 1572 1573 1574<A NAME="push(java.util.Map<java.lang.String, java.lang.Object>)"></A> 1575 1576<div class="jd-details api apilevel-"> 1577 <h4 class="jd-details-title"> 1578 <span class="normal"> 1579 public 1580 1581 1582 1583 1584 void 1585 </span> 1586 <span class="sympad">push</span> 1587 <span class="normal">(Map<String, Object> update)</span> 1588 </h4> 1589 <div class="api-level"> 1590 <div></div> 1591 1592 1593 1594 </div> 1595 <div class="jd-details-descr"> 1596 1597 <div class="jd-tagdata jd-tagdescr"><p>Merges the given <code>update</code> object into the existing data model, calling any 1598 listeners with the update (after the merge occurs). 1599 <p> 1600 If you want to represent a missing value (like an empty index in a List), use the 1601 <code>OBJECT_NOT_PRESENT</code> object. 1602 <p> 1603 If another thread is executing a push, this call blocks until that thread is finished. 1604 <p> 1605 This is normally a synchronous call. However, if, while the thread is executing the push, 1606 another push happens from the same thread, then that second push is asynchronous (the second 1607 push will return before changes have been made to the data layer). This second push from the 1608 same thread can occur, for example, if a data layer push is made in response to a tag firing. 1609 <p> 1610 If the <code>update</code> contains the key <code>event</code>, rules will be evaluated and 1611 matching tags will fire.</p></div> 1612 <div class="jd-tagdata"> 1613 <h5 class="jd-tagtitle">Parameters</h5> 1614 <table class="jd-tagtable"> 1615 <tr> 1616 <th>update</td> 1617 <td>the update object to process 1618</td> 1619 </tr> 1620 </table> 1621 </div> 1622 1623 </div> 1624</div> 1625 1626 1627<A NAME="push(java.lang.String, java.lang.Object)"></A> 1628 1629<div class="jd-details api apilevel-"> 1630 <h4 class="jd-details-title"> 1631 <span class="normal"> 1632 public 1633 1634 1635 1636 1637 void 1638 </span> 1639 <span class="sympad">push</span> 1640 <span class="normal">(String key, Object value)</span> 1641 </h4> 1642 <div class="api-level"> 1643 <div></div> 1644 1645 1646 1647 </div> 1648 <div class="jd-details-descr"> 1649 1650 <div class="jd-tagdata jd-tagdescr"><p>Pushes a key/value pair of data to the data layer. This is just a convenience method that 1651 calls <code>push(DataLayer.mapOf(key, value))</code>. 1652 <p> 1653 A key with value <code>event</code> will cause rules to be evaluated and matching tags 1654 to be fired. 1655</p></div> 1656 1657 </div> 1658</div> 1659 1660 1661<A NAME="pushEvent(java.lang.String, java.util.Map<java.lang.String, java.lang.Object>)"></A> 1662 1663<div class="jd-details api apilevel-"> 1664 <h4 class="jd-details-title"> 1665 <span class="normal"> 1666 public 1667 1668 1669 1670 1671 void 1672 </span> 1673 <span class="sympad">pushEvent</span> 1674 <span class="normal">(String eventName, Map<String, Object> update)</span> 1675 </h4> 1676 <div class="api-level"> 1677 <div></div> 1678 1679 1680 1681 </div> 1682 <div class="jd-details-descr"> 1683 1684 <div class="jd-tagdata jd-tagdescr"><p>Pushes an event, along with an update map, to the data layer. 1685 <p> 1686 This is just a convenience method that pushes a map containing a key <code>event</code> whose 1687 value is <code>eventName</code> along with the contents of <code>update</code> via 1688 <code>push(Map<String, Object>)</code>. 1689</p></div> 1690 1691 </div> 1692</div> 1693 1694 1695<A NAME="toString()"></A> 1696 1697<div class="jd-details api apilevel-"> 1698 <h4 class="jd-details-title"> 1699 <span class="normal"> 1700 public 1701 1702 1703 1704 1705 String 1706 </span> 1707 <span class="sympad">toString</span> 1708 <span class="normal">()</span> 1709 </h4> 1710 <div class="api-level"> 1711 <div></div> 1712 1713 1714 1715 </div> 1716 <div class="jd-details-descr"> 1717 1718 <div class="jd-tagdata jd-tagdescr"><p>Returns a human readable string representing the Data Layer object. 1719</p></div> 1720 1721 </div> 1722</div> 1723 1724 1725 1726 1727 1728<!-- ========= METHOD DETAIL ======== --> 1729 1730 1731 1732<!-- ========= END OF CLASS DATA ========= --> 1733<A NAME="navbar_top"></A> 1734 1735<div id="footer" class="wrap" > 1736 1737 1738 <div id="copyright"> 1739 1740 Except as noted, this content is licensed under <a 1741 href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 1742 For details and restrictions, see the <a href="/license.html"> 1743 Content License</a>. 1744 </div> 1745 <div id="build_info"> 1746 1747<script src="/timestamp.js" type="text/javascript"></script> 1748<script>document.write(BUILD_TIMESTAMP)</script> 1749 1750 </div> 1751 1752 1753 <div id="footerlinks"> 1754 1755 <p> 1756 <a href="/about/index.html">About Android</a> | 1757 <a href="/legal.html">Legal</a> | 1758 <a href="/support.html">Support</a> 1759 </p> 1760 </div> 1761 1762</div> <!-- end footer --> 1763</div> <!-- jd-content --> 1764 1765</div><!-- end doc-content --> 1766 1767</div> <!-- end body-content --> 1768 1769 1770 1771 1772 1773 1774</body> 1775</html> 1776