• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&nbsp;</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 &amp; Retain</a></li>
350                <li><a href="/distribute/monetize/index.html">Monetize</a></li>
351                <li><a href="/distribute/tools/index.html">Tools &amp; 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  &#124; <a href="#lfields">Fields</a>
733
734
735
736
737
738
739  &#124; <a href="#pubmethods">Methods</a>
740
741
742
743
744  &#124; <a href="#inhmethods">Inherited Methods</a>
745
746&#124; <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">&nbsp;&nbsp;&nbsp;&#x21b3;</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(&quot;openScreen&quot;, 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&lt;Object&gt;</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&lt;String,&nbsp;Object&gt;</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&lt;String,&nbsp;Object&gt; 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&lt;String,&nbsp;Object&gt; 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&lt;?&gt;</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>&quot;a.b.c&quot;</code>
1479 returns a map with key <code>&quot;c&quot;</code> in a map with key
1480 <code>&quot;b&quot;</code> in a map with key <code>&quot;a&quot;</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&lt;Object&gt;
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>&quot;object1&quot;</code> and
1514 <code>&quot;object2&quot;</code>:
1515
1516 <pre>
1517 List&lt;Object&gt; list = DataLayer.listOf(&quot;object1&quot;, &quot;object2&quot;);
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&lt;String,&nbsp;Object&gt;
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>&quot;key1&quot;</code> to
1551 <code>&quot;value1&quot;</code> and <code>&quot;key2&quot;
1552 </code> to <code>&quot;value2&quot;</code>:
1553
1554 <pre>
1555 Map&lt;String, Object&gt; map = DataLayer.mapOf(&quot;key1&quot;, &quot;value1&quot;,
1556         &quot;key2&quot;, &quot;value2&quot;);
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&lt;String,&nbsp;Object&gt; 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&lt;String,&nbsp;Object&gt; 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>&nbsp;&nbsp;|&nbsp;
1757    <a href="/legal.html">Legal</a>&nbsp;&nbsp;|&nbsp;
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