OLD | NEW |
(Empty) | |
| 1 # usage |
| 2 |
| 3 `usage` is a wrapper around Google Analytics for both command-line apps and web |
| 4 apps. |
| 5 |
| 6 [](https://travis-ci.o
rg/dart-lang/usage) |
| 7 [](https
://coveralls.io/r/dart-lang/usage?branch=master) |
| 8 |
| 9 ## For web apps |
| 10 |
| 11 To use this library as a web app, import the `usage_html.dart` library and |
| 12 instantiate the `AnalyticsHtml` class. |
| 13 |
| 14 ## For command-line apps |
| 15 |
| 16 To use this library as a command-line app, import the `usage_io.dart` library |
| 17 and instantiate the `AnalyticsIO` class. |
| 18 |
| 19 Note, for CLI apps, the usage library will send analytics pings asynchronously. |
| 20 This is useful it that it doesn't block the app generally. It does have one |
| 21 side-effect, in that outstanding asynchronous requests will block termination |
| 22 of the VM until that request finishes. So, for short-lived CLI tools, pinging |
| 23 Google Analytics can cause the tool to pause for several seconds before it |
| 24 terminates. This is often undesired - gathering analytics information shouldn't |
| 25 negatively effect the tool's UX. |
| 26 |
| 27 One solution to this is to use the `waitForLastPing({Duration timeout})` method |
| 28 on the analytics object. This will wait until all outstanding analytics requests |
| 29 have completed, or until the specified duration has elapsed. So, CLI apps can do |
| 30 something like: |
| 31 |
| 32 ```dart |
| 33 analytics.waitForLastPing(timeout: new Duration(milliseconds: 500)).then((_) { |
| 34 exit(0); |
| 35 }); |
| 36 ``` |
| 37 |
| 38 ## Using the API |
| 39 |
| 40 Import the package (in this example we use the `dart:io` version): |
| 41 |
| 42 ```dart |
| 43 import 'package:usage/usage_io.dart'; |
| 44 ``` |
| 45 |
| 46 And call some analytics code: |
| 47 |
| 48 ```dart |
| 49 final String UA = ...; |
| 50 |
| 51 Analytics ga = new AnalyticsIO(UA, 'ga_test', '1.0'); |
| 52 ga.optIn = true; |
| 53 |
| 54 ga.sendScreenView('home'); |
| 55 ga.sendException('foo exception'); |
| 56 |
| 57 ga.sendScreenView('files'); |
| 58 ga.sendTiming('writeTime', 100); |
| 59 ga.sendTiming('readTime', 20); |
| 60 ``` |
| 61 |
| 62 ## When do we send analytics data? |
| 63 |
| 64 We use an opt-in method for sending analytics information. There are essentially |
| 65 three states for when we send information: |
| 66 |
| 67 *Sending screen views* If the user has not opted in, the library will only send |
| 68 information about screen views. This allows tools to do things like version |
| 69 checks, but does not send any additional information. |
| 70 |
| 71 *Opt-in* If the user opts-in to analytics collection the library sends all |
| 72 requested analytics info. This includes screen views, events, timing |
| 73 information, and exceptions. |
| 74 |
| 75 *Opt-ing out* In order to not send analytics information, either do not call the |
| 76 analytics methods, or create and use the `AnalyticsMock` class. This provides |
| 77 an instance you can use in place of a real analytics object but each analytics |
| 78 method is a no-op. |
| 79 |
| 80 ## Other info |
| 81 |
| 82 For both classes, you need to provide a Google Analytics tracking ID, the |
| 83 application name, and the application version. |
| 84 |
| 85 Your application should provide an opt-in option for the user. If they opt-in, |
| 86 set the `optIn` field to `true`. This setting will persist across sessions |
| 87 automatically. |
| 88 |
| 89 *Note:* This library is intended for use with the Google Analytics application / |
| 90 mobile app style tracking IDs (as opposed to the web site style tracking IDs). |
| 91 |
| 92 For more information, please see the Google Analytics Measurement Protocol |
| 93 [Policy](https://developers.google.com/analytics/devguides/collection/protocol/p
olicy). |
| 94 |
| 95 ## Issues and bugs |
| 96 |
| 97 Please file reports on the |
| 98 [GitHub Issue Tracker](https://github.com/dart-lang/usage/issues). |
| 99 |
| 100 ## License |
| 101 |
| 102 You can view our license |
| 103 [here](https://github.com/dart-lang/usage/blob/master/LICENSE). |
OLD | NEW |