| OLD | NEW |
| 1 <div id="pageData-name" class="pageData">Tutorial: Google Analytics</div> | 1 <div id="pageData-name" class="pageData">Tutorial: Google Analytics</div> |
| 2 <div id="pageData-showTOC" class="pageData">true</div> | 2 <div id="pageData-showTOC" class="pageData">true</div> |
| 3 | 3 |
| 4 <p>This tutorial demonstrates using Google Analytics to track the usage of your | 4 <p>This tutorial demonstrates using Google Analytics to track the usage of your |
| 5 extension.</p> | 5 extension.</p> |
| 6 | 6 |
| 7 <h2 id="toc-requirements">Requirements</h2> | 7 <h2 id="toc-requirements">Requirements</h2> |
| 8 <p> | 8 <p> |
| 9 This tutorial expects that you have some familiarity writing extensions for | 9 This tutorial expects that you have some familiarity writing extensions for |
| 10 Google Chrome. If you need information on how to write an extension, please | 10 Google Chrome. If you need information on how to write an extension, please |
| 11 read the <a href="gettingstarted.html">Getting Started tutorial</a>. | 11 read the <a href="gettingstarted.html">Getting Started tutorial</a>. |
| 12 </p> | 12 </p> |
| 13 | 13 |
| 14 <p> | 14 <p> |
| 15 You will also need a <a href="http://www.google.com/analytics">Google | 15 You will also need a <a href="http://www.google.com/analytics">Google |
| 16 Analytics account</a> set up to track your extension. Note that when setting | 16 Analytics account</a> set up to track your extension. Note that when setting |
| 17 up the account, you can use any value in the Website's URL field, as your | 17 up the account, you can use any value in the Website's URL field, as your |
| 18 extension will not have an URL of its own. | 18 extension will not have an URL of its own. |
| 19 </p> | 19 </p> |
| 20 | 20 |
| 21 <p style="text-align: center"> | 21 <p style="text-align: center"> |
| 22 <img src="images/tut_analytics/screenshot01.png" | 22 <img src="images/tut_analytics/screenshot01.png" |
| 23 style="width:400px;height:82px;" | 23 style="width:400px;height:82px;" |
| 24 alt="The analytics setup with info for a chrome extension filled out." /> | 24 alt="The analytics setup with info for a chrome extension filled out." /> |
| 25 </p> | 25 </p> |
| 26 | 26 |
| 27 <p> | |
| 28 Also note that Google Analytics requires version <strong>4.0.302.2</strong> | |
| 29 of Google Chrome to work correctly. Users with an earlier version of Google | |
| 30 Chrome will not show up on your Google Analytics reports. View | |
| 31 <a href="faq.html#faq-dev-14">this FAQ entry</a> to learn how to check which | |
| 32 version of Google Chrome is deployed to which platform. | |
| 33 </p> | |
| 34 | |
| 35 <h2 id="toc-installing">Installing the tracking code</h2> | 27 <h2 id="toc-installing">Installing the tracking code</h2> |
| 36 | 28 |
| 37 <p> | 29 <p> |
| 38 The standard Google Analytics tracking code snippet fetches a file named | 30 The standard Google Analytics tracking code snippet fetches a file named |
| 39 <code>ga.js</code> from an SSL protected URL if the current page | 31 <code>ga.js</code> from an SSL protected URL if the current page |
| 40 was loaded using the <code>https://</code> protocol. <strong>It is strongly | 32 was loaded using the <code>https://</code> protocol. <strong>Chrome |
| 41 advised to use the SSL protected ga.js in an extension</strong>, | 33 extensions and applications may <em>only</em> use the SSL-protected version of |
| 42 but Google Chrome extension | 34 <code>ga.js</code></strong>. Loading <code>ga.js</code> over insecure HTTP is |
| 43 pages are hosted under <code>chrome-extension://</code> URLs, so the tracking | 35 disallowed by Chrome's default <a href="contentSecurityPolicy.html">Content |
| 44 snippet must be modified slightly to pull <code>ga.js</code> directly from | 36 Security Policy</a>. This, plus the fact that Chrome extensions are hosted |
| 45 <code>https://ssl.google-analytics.com/ga.js</code> instead of the default | 37 under the <code>chrome-extension://</code> schema, requires a slight |
| 46 location. | 38 modification to the usual tracking snippet to pull <code>ga.js</code> directly |
| 39 from <code>https://ssl.google-analytics.com/ga.js</code> instead of the |
| 40 default location. |
| 47 </p> | 41 </p> |
| 48 | 42 |
| 49 <p> | 43 <p> |
| 50 Below is a modified snippet for the | 44 Below is a modified snippet for the |
| 51 <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.htm
l">asynchronous | 45 <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.htm
l">asynchronous |
| 52 tracking API</a> (the modified line is bolded): | 46 tracking API</a> (the modified line is bolded): |
| 53 </p> | 47 </p> |
| 54 | 48 |
| 55 <pre> | 49 <pre> |
| 56 (function() { | 50 (function() { |
| 57 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.asy
nc = true; | 51 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.asy
nc = true; |
| 58 <strong>ga.src = 'https://ssl.google-analytics.com/ga.js';</strong> | 52 <strong>ga.src = 'https://ssl.google-analytics.com/ga.js';</strong> |
| 59 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(
ga, s); | 53 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(
ga, s); |
| 60 })(); | 54 })(); |
| 61 </pre> | 55 </pre> |
| 62 | 56 |
| 63 <p> | 57 <p> |
| 64 Here is a background page which loads the asynchronous tracking code and | 58 You'll also need to ensure that your extension has access to load the resource |
| 59 by relaxing the default content security policy. The policy definition in your |
| 60 <a href="manifest.html"><code>manifest.json</code></a> might look like: |
| 61 </p> |
| 62 |
| 63 <pre>{ |
| 64 ..., |
| 65 "content_security_policy": "script-src 'self' https://ssl.google-analytics.com
; object-src 'self'", |
| 66 ... |
| 67 }</pre> |
| 68 |
| 69 <p> |
| 70 Here is a popup page (<code>popup.html</code>) which loads the asynchronous |
| 71 tracking code via an external JavaScript file (<code>popup.js</code>) and |
| 65 tracks a single page view: | 72 tracks a single page view: |
| 66 </p> | 73 </p> |
| 67 | 74 |
| 68 <pre> | 75 <pre>popup.js: |
| 76 ========= |
| 77 |
| 78 var _gaq = _gaq || []; |
| 79 _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']); |
| 80 _gaq.push(['_trackPageview']); |
| 81 |
| 82 (function() { |
| 83 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.asy
nc = true; |
| 84 ga.src = 'https://ssl.google-analytics.com/ga.js'; |
| 85 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(
ga, s); |
| 86 })(); |
| 87 |
| 88 popup.html: |
| 89 =========== |
| 69 <!DOCTYPE html> | 90 <!DOCTYPE html> |
| 70 <html> | 91 <html> |
| 71 <head> | 92 <head> |
| 72 ... | 93 ... |
| 94 <script src="popup.js"></script> |
| 73 </head> | 95 </head> |
| 74 <body> | 96 <body> |
| 75 <script> | |
| 76 var _gaq = _gaq || []; | |
| 77 _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']); | |
| 78 _gaq.push(['_trackPageview']); | |
| 79 | |
| 80 (function() { | |
| 81 var ga = document.createElement('script'); ga.type = 'text/javascript'; g
a.async = true; | |
| 82 ga.src = 'https://ssl.google-analytics.com/ga.js'; | |
| 83 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBe
fore(ga, s); | |
| 84 })(); | |
| 85 </script> | |
| 86 | |
| 87 ... | 97 ... |
| 88 </body> | 98 </body> |
| 89 </html> | 99 </html> |
| 90 </pre> | 100 </pre> |
| 91 | 101 |
| 92 <p> | 102 <p> |
| 93 Keep in mind that the string <code>UA-XXXXXXXX-X</code> should be replaced | 103 Keep in mind that the string <code>UA-XXXXXXXX-X</code> should be replaced |
| 94 with your own Google Analytics account number. | 104 with your own Google Analytics account number. |
| 95 </p> | 105 </p> |
| 96 | 106 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 | 145 |
| 136 <h2 id="toc-tracking-events">Tracking events</h2> | 146 <h2 id="toc-tracking-events">Tracking events</h2> |
| 137 | 147 |
| 138 <p> | 148 <p> |
| 139 By configuring event tracking, you can determine which parts of your | 149 By configuring event tracking, you can determine which parts of your |
| 140 extension your users interact with the most. For example, if you have | 150 extension your users interact with the most. For example, if you have |
| 141 three buttons users may click: | 151 three buttons users may click: |
| 142 </p> | 152 </p> |
| 143 | 153 |
| 144 <pre> | 154 <pre> |
| 145 <button>Button 1</button> | 155 <button id='button1'>Button 1</button> |
| 146 <button>Button 2</button> | 156 <button id='button2'>Button 2</button> |
| 147 <button>Button 3</button> | 157 <button id='button3'>Button 3</button> |
| 148 </pre> | 158 </pre> |
| 149 | 159 |
| 150 <p> | 160 <p> |
| 151 Write a function that sends click events to Google Analytics: | 161 Write a function that sends click events to Google Analytics: |
| 152 </p> | 162 </p> |
| 153 | 163 |
| 154 <pre> | 164 <pre> |
| 155 function trackButton(button_id) { | 165 function trackButton(e) { |
| 156 _gaq.push(['_trackEvent', 'button' + button_id, 'clicked']); | 166 _gaq.push(['_trackEvent', e.target.id, 'clicked']); |
| 157 }; | 167 }; |
| 158 </pre> | 168 </pre> |
| 159 | 169 |
| 160 <p> | 170 <p> |
| 161 And call it when each button is pressed: | 171 And use it as an event handler for each button's click: |
| 162 </p> | 172 </p> |
| 163 | 173 |
| 164 <pre> | 174 <pre> |
| 165 <button onclick="trackButton(1);">Button 1</button> | 175 var buttons = document.querySelectorAll('button'); |
| 166 <button onclick="trackButton(2);">Button 2</button> | 176 for (var i = 0; i < buttons.length; i++) { |
| 167 <button onclick="trackButton(3);">Button 3</button> | 177 buttons[i].addEventListener('click', trackButtonClick); |
| 178 } |
| 168 </pre> | 179 </pre> |
| 169 | 180 |
| 170 <p> | 181 <p> |
| 171 The Google Analytics event tracking overview page will give you metrics | 182 The Google Analytics event tracking overview page will give you metrics |
| 172 regarding how many times each individual button is clicked: | 183 regarding how many times each individual button is clicked: |
| 173 </p> | 184 </p> |
| 174 | 185 |
| 175 <p style="text-align: center"> | 186 <p style="text-align: center"> |
| 176 <img src="images/tut_analytics/screenshot03.png" | 187 <img src="images/tut_analytics/screenshot03.png" |
| 177 style="width:300px;height:482px;" | 188 style="width:300px;height:482px;" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 195 | 206 |
| 196 <p> | 207 <p> |
| 197 A sample extension that uses these techniques is | 208 A sample extension that uses these techniques is |
| 198 available in the Chromium source tree: | 209 available in the Chromium source tree: |
| 199 </p> | 210 </p> |
| 200 | 211 |
| 201 <blockquote> | 212 <blockquote> |
| 202 <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensi
ons/docs/examples/tutorials/analytics/">.../examples/tutorials/analytics/</a> | 213 <a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensi
ons/docs/examples/tutorials/analytics/">.../examples/tutorials/analytics/</a> |
| 203 </blockquote> | 214 </blockquote> |
| 204 </p> | 215 </p> |
| OLD | NEW |