Changes for page Flutter integration
Last modified by Developer on 2020/03/19 15:21
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -28,32 +28,26 @@ 28 28 29 29 To use any method from the plugin add import: 30 30 31 -{{code language=" javascript"}}32 -import Mobigatefrom 'react-native-mobigate'31 +{{code language="dart"}} 32 +import 'package:flutter_mobigate/flutter_mobigate.dart'; 33 33 {{/code}} 34 34 35 -== 3.1 SDK initialization == 35 +== 3.1 MobigateSDK class initialization == 36 36 37 - You must initializethelibrarybefore running it.Use//init(apiKey, options,onSuccess,onError)//method for that:37 +Initialize class with //MobigateSDK(MobigateOptions options)// 38 38 39 - **Mobigate.init(apiKey,options, onSuccess,onError)**39 +//MobigateOptions(apiKey,{appIdentifier, appInstallationSource,email,cusUserId,enableUserFields,dataGatherPolicy,notificationText,enableIdProfiles})// 40 40 41 +{{showhide id="2" showmessage="MobigateOptions" hidemessage="MobigateOptions"}} 41 41 (% class="table-bordered table-hover" style="border-color:powderblue" %) 42 -|=(% style="background-color:powderblue" %)Parameter|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 43 -|apiKey|String|Api key provided by your business partner 44 -|options|Json Object|SDK configuration 45 -|onSuccess|Function|returns callback object 46 -|onError|Function|returns callback object 47 - 48 -{{showhide id="2" showmessage="Options" hidemessage="Options"}} 49 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 50 50 |=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Default|=(% style="background-color:powderblue" %)Description 51 51 | appIdentifier|String| | Application identifier 52 52 |appInstallationSource |String| | App installation source e.g., google-play, organic. 53 53 |email |String | | Set's user email. 54 -|cus tomUserId |String | | You may use your custom userID for marking data. By default we are using device ID and emails for matching. Set it before starting the service using MobigateSDk.Builder method.47 +|cusUserId |String | | You may use your custom userID for marking data. By default we are using device ID and emails for matching. Set it before starting the service using MobigateSDk.Builder method. 55 55 | enableUserFields|Json Array | | Enable custom fields in user data. By default MobienceSDK is gathering all identifiers, which it can read. You can choose one of these field: ["email", "imei", "imsi", "msisdn", "mac", "serial"] see [[plugin user field constants>>https://wiki.spicymobile.pl/wiki/mobigatesdk/view/Main/sdkintegration/reactnativeintegration/#H4.1Userfieldconstants]]. 56 56 | dataGatherPolicy| Json Object| | Enable custom data gater policy. By default MobienceSDK gather all data it can read and hide notification icon. Check below DataGatherPolicy options for more details. 50 +| notificationText|String | | if state = Mobigate.DATA_GATHER_POLICY_DEFAULT you can pass custom foreground service notification text. 57 57 | enableIdProfiles|Boolean |false | turns on / off the IDs profiles system. 58 58 {{/showhide}} 59 59 ... ... @@ -61,67 +61,45 @@ 61 61 (% class="table-bordered table-hover" style="border-color:powderblue" %) 62 62 |=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Default|=(% style="background-color:powderblue" %)Description 63 63 | monitorState|String| | Possible monitor states: [[plugin constants>>https://wiki.spicymobile.pl/wiki/mobigatesdk/view/Main/sdkintegration/reactnativeintegration/#H4.2Datagatherpolicyconstants]]. More info about gathering data [[here>>https://wiki.spicymobile.pl/wiki/mobigatesdk/view/Main/mobigatesdkintegrationforandroiddevelopers/#H5.8Datagatherpolicy]] 64 -|notificationText|String| | if state = Mobigate.DATA_GATHER_POLICY_DEFAULT you can pass custom foreground service notification text 65 65 {{/showhide}} 66 66 60 +{{showhide id="3" showmessage="Example" hidemessage="Example"}} 61 +{{code language="dart"}} 62 + MobigateSDK mobigateInstance = MobigateSDK(MobigateOptions( 63 + "V0K6jhiIfem6CRWHYZ59Nmj3oFBBKbJsnSsWfR2JNq7ktblOUXwbJoBQTpWnw2uSwW76gpiu2kun50jweTY69B" 64 + )); 65 +{{/code}} 66 +{{/showhide}} 67 67 68 - Whenthelibraryis already initialized run it. Use //startSDK(onSuccess,onError)// method for that:68 +== 3.2 SDK initialization == 69 69 70 - **Mobigate.startSDK(onSuccess,onError)**70 +You must initialize the library before running it. Use //Future<String> init// method for that: 71 71 72 +**mobigateInstance.init()** 73 + 74 +Return: 75 + 72 72 (% class="table-bordered table-hover" style="border-color:powderblue" %) 73 -|=(% style="background-color:powderblue" %) Parameter|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description74 -| onSuccess|Function|returns callbackobject75 -| onError|Function|returnscallbackobject77 +|=(% style="background-color:powderblue" %)Message|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 78 +|success|String|returns success message 79 +|error|String|returns error message 76 76 77 -{{showhide id="3" showmessage="Example" hidemessage="Example"}} 78 -{{code language="javascript"}} 79 - initLibrary = () => { 80 - if (Platform.OS === 'android') { 81 - Mobigate.init("V0K6jhiIfem6CRWHYZ59Nmj3oFBBKbJsnSsWfR2JNq7ktblOUXwbJoBQTpWnw2uSwW76gpiu2kun50jweTY69B", 82 - { 83 - /*custom options, check docs for more details 84 - appIdentifier: 'customUserAppIdentifier', 85 - appInstallationSource: "customAppInstallationSourcexyz", 86 - email: 'testemail@gmail.com', 87 - userAgent: 'customUserAgent', 88 - customUserId: 'customUserId',*/ 89 - }, (success) => { 90 - /* You can configure custom collectors after init 91 - Mobigate.disableAllDataCollector() 92 - Mobigate.configureDataCollectors(true, [Mobigate.DATA_COLLECTOR_APPS_LIST, 93 - Mobigate.DATA_COLLECTOR_BATTERY, 94 - Mobigate.DATA_COLLECTOR_PHONE_INFO])*/ 81 +When the library is already initialized run it. Use //Future<String> startSdk()// method for that: 95 95 96 - Mobigate.startSDK((result) => { 97 - this.setState({ 98 - status: 'started', 99 - }); 83 +**mobigateInstance.startSdk();** 100 100 101 - }, (errorResult) => { 102 - this.setState({ 103 - status: errorResult, 104 - }); 105 - }) 106 - }, (initError) => { 107 - this.setState({ 108 - status: initError, 109 - }); 110 - }) 111 - }else{ 112 - this.setState({ 113 - status: 'Mobigate SDK supports only Android' 114 - }) 115 - } 116 - } 117 -{{/code}} 118 -{{/showhide}} 85 +Return: 119 119 120 -== 3.2 Tracking in app events == 87 +(% class="table-bordered table-hover" style="border-color:powderblue" %) 88 +|=(% style="background-color:powderblue" %)Message|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 89 +|success|String|returns success message 90 +|error|String|returns error message 121 121 92 +== 3.3 Tracking in app events == 93 + 122 122 In-App Events provide insight on what is happening in your app. It is recommended to take the time and define the events you would like to measure. 123 123 124 -=== 3. 2.1 Overview ===96 +=== 3.3.1 Overview === 125 125 126 126 An event consists of two fields that you (% style="display:none" %) (%%)can use to describe a user's interaction with your app content: 127 127 ... ... @@ -131,41 +131,31 @@ 131 131 |(% style="width:200px" %)Parameter|(% style="width:200px" %)String|(% style="width:200px" %)no|(% style="width:200px" %)Event parameter. 132 132 There can be more than one 133 133 134 -You can use any event category or parameter string of your choice. However, react-native-mobigate plugin contains recommended event categories and parameters via String constants (see [[Event categories>>doc:||anchor="H3.2.3Eventcategories"]] and [[Event parameters>>doc:||anchor="H3.2.4Eventparameters"]]).106 +You can use any event category or parameter string of your choice. However, flutter_mobigate plugin contains recommended event categories and parameters via String constants (see [[Event categories>>doc:||anchor="H3.2.3Eventcategories"]] and [[Event parameters>>doc:||anchor="H3.2.4Eventparameters"]]). 135 135 136 -=== 3. 2.2 Implementation ===108 +=== 3.3.2 Implementation === 137 137 138 138 Tracking in-app events is performed by two methods: 139 139 140 -** Mobigate.trackEvent(options)**112 +**void trackEvent(Category category)** 141 141 142 -{{showhide id="2" showmessage="Options" hidemessage="Options" effect="slide" effectduration="0.3"}} 143 143 (% class="table-bordered table-hover" style="border-color:powderblue" %) 144 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Default|=(% style="background-color:powderblue" %)Description 145 -|name|String | | Event category name. 146 -|parameters|Json array| | Array of parameters. Look below on example. 147 -{{/showhide}} 115 +|=(% style="background-color:powderblue" %)Parameter|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 116 +|Category|Category class |Category class built with help of CategoryBuilder 148 148 149 149 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 150 -{{code language="javascript"}} 151 - sendTrackEvent = () => { 152 - if (Platform.OS === 'android') { 153 - Mobigate.trackEvent({ 154 - name: Mobigate.CATEGORY_PURCHASE, 155 - parameters: { 156 - [Mobigate.PARAMETER_CONTENT_ID]: 42313532, 157 - [Mobigate.PARAMETER_PRICE]: 43.23, 158 - [Mobigate.PARAMETER_QUANTITY]: 2, 159 - 'userCustomParameterName':'simpleName' 160 - }, 161 - }) 162 - } 163 - } 119 +{{code language="dart"}} 120 +mobigateInstance.trackEvent((CategoryBuilder(EventCategory.BEGIN_TRIAL) 121 + ..setParameter(EventParameter.CITY, "Warsaw") 122 + ..setParameter(EventParameter.CONTENT_ID, 523456) 123 + ..setParameter(EventParameter.COUPON_CODE, 97636572) 124 + ..setParameter(EventParameter.CUSTOMER_SEGMENT, [1, 2, 4])) 125 + .build()); 164 164 {{/code}} 165 165 {{/showhide}} 166 166 167 167 168 -** Mobigate.trackAppInstall(timestamp)**130 +**void trackAppInstall(int timestamp)** 169 169 170 170 (% class="table-bordered table-hover" style="border-color:powderblue" %) 171 171 |=(% style="background-color:powderblue" %)Parameter|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description ... ... @@ -181,7 +181,7 @@ 181 181 {{/code}} 182 182 {{/showhide}} 183 183 184 -=== 3. 2.3 Event categories ===146 +=== 3.3.3 Event categories === 185 185 186 186 The following section describes the recommended structure of each event category. In-app events categories are defined as part of plugin String constants. 187 187 ... ... @@ -354,7 +354,7 @@ 354 354 **Recommended parameters:** CONTENT_ID 355 355 {{/showhide}} 356 356 357 -=== 3. 2.4 Event parameters ===319 +=== 3.3.4 Event parameters === 358 358 359 359 In addition each category that is passed with event may have optional parameters defined as part of the plugin constants, or custom defined as String. Below is a list of recommended parameters. 360 360 ... ... @@ -436,14 +436,14 @@ 436 436 437 437 {{/showhide}} 438 438 439 -== 3. 3Remaining methods ==401 +== 3.4 Remaining methods == 440 440 441 -** Mobigate.setCollectAll()**403 +**void setCollectAll()** 442 442 This method enables all data collectors. By default all data collectors are enabled. 443 443 444 444 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 445 -{{code language=" javascript"}}446 - Mobigate.disableAllDataCollector()407 +{{code language="dart"}} 408 +mobigateInstance.setCollectAll(); 447 447 {{/code}} 448 448 {{/showhide}} 449 449 ... ... @@ -450,19 +450,21 @@ 450 450 (% style="color:powderblue" %) 451 451 ---- 452 452 453 -** Mobigate.configureDataCollectors(enable, collectors)**415 +**void configureDataCollectors(bool enable, List<int> collectors)** 454 454 Enable or disable DataCollector by array collectors input 455 455 456 456 (% class="table-bordered table-hover" style="border-color:powderblue" %) 457 457 |=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 458 -|enable|boolean|true if enable, false if disable |459 -|collectors|array of [[data collector const>>doc:||anchor="H4.3Datacollectorsconstants"]]|e.g.,[Mobigate.DATA_COLLECTOR_BATTERY, DATA_COLLECTOR_GEOLOCATION] |420 +|enable|boolean|true if enable, false if disable 421 +|collectors|array of [[data collector const>>doc:||anchor="H4.3Datacollectorsconstants"]]|e.g.,[Mobigate.DATA_COLLECTOR_BATTERY, DATA_COLLECTOR_GEOLOCATION] 460 460 461 461 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 462 -{{code language="javascript"}} 463 -Mobigate.configureDataCollectors(true, [Mobigate.DATA_COLLECTOR_APPS_LIST, 464 - Mobigate.DATA_COLLECTOR_BATTERY, 465 - Mobigate.DATA_COLLECTOR_PHONE_INFO]) 424 +{{code language="dart"}} 425 +mobigateInstance.configureDataCollectors(true, [ 426 + DataCollector.APPS_LIST, 427 + DataCollector.APPS_USAGE, 428 + DataCollector.BROWSER 429 + ]); 466 466 {{/code}} 467 467 {{/showhide}} 468 468 ... ... @@ -469,12 +469,12 @@ 469 469 (% style="color:powderblue" %) 470 470 ---- 471 471 472 -** Mobigate.disableAllDataCollector()**436 +**void disableAllDataCollector()** 473 473 Disable all data collectors 474 474 475 475 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 476 -{{code language=" javascript"}}477 - Mobigate.disableAllDataCollector()440 +{{code language="dart"}} 441 +mobigateInstance.disableAllDataCollector(); 478 478 {{/code}} 479 479 {{/showhide}} 480 480 ... ... @@ -481,16 +481,16 @@ 481 481 (% style="color:powderblue" %) 482 482 ---- 483 483 484 -** Mobigate.setEmail(email)**448 +**void setEmail(String email)** 485 485 Set user's email 486 486 487 487 (% class="table-bordered table-hover" style="border-color:powderblue" %) 488 488 |=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 489 -|email |String |user's email address |453 +|email |String |user's email address 490 490 491 491 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 492 -{{code language=" javascript"}}493 - Mobigate.setEmail('emailExample@spicymobile.pl')456 +{{code language="dart"}} 457 +mobigateInstance.setEmail('test@spicymobile.pl'); 494 494 {{/code}} 495 495 {{/showhide}} 496 496 ... ... @@ -497,21 +497,12 @@ 497 497 (% style="color:powderblue" %) 498 498 ---- 499 499 500 -** Mobigate.getEmail(onSuccess, onError)**501 -Get previously set user email 464 +**Future<String> getEmail()** 465 +Get previously set user email. Return email on success, error otherwise. 502 502 503 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 504 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 505 -|onSuccess |Function |returns callback object 506 -|onError |Function |returns callback object 507 - 508 508 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 509 -{{code language="javascript"}} 510 -Mobigate.getEmail((success) => { 511 - console.log("user email: " + success) 512 - }, (error) => { 513 - console.log(error) 514 - }) 468 +{{code language="dart"}} 469 +final String email = await mobigateInstance.getEmail(); 515 515 {{/code}} 516 516 {{/showhide}} 517 517 ... ... @@ -518,7 +518,7 @@ 518 518 (% style="color:powderblue" %) 519 519 ---- 520 520 521 -** Mobigate.setFbToken(token)**476 +**void setFbToken(String token)** 522 522 Set fb token for social network collector 523 523 524 524 (% class="table-bordered table-hover" style="border-color:powderblue" %) ... ... @@ -526,49 +526,20 @@ 526 526 |token |string |facebook token 527 527 528 528 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 529 -{{code language=" javascript"}}530 - Mobigate.setFbToken('9dsf87ds98978das98d7893u12rj808d0j09012jd012')484 +{{code language="dart"}} 485 +mobigateInstance.setFbToken('dsf87esy789fys9dfu08sds54s6547c8s8doc4'); 531 531 {{/code}} 532 532 {{/showhide}} 533 533 534 -((( 535 -(% class="showhidebutton" %) 536 -((( 537 -{{html clean="false"}} 538 -<a href="javascript:void(0)" id="showhidebuttontext3" data-show-duration="0" data-show-effect="toggle" data-show-message="Example" data-hide-message="Example">Example</a> 539 -{{/html}} 540 -))) 541 - 542 -(% class="showhidecontent" id="showhidecontent3" style="display: none;" %) 543 -((( 544 -((( 545 -{{code language="javascript"}} 546 -Mobigate.setFbToken('9dsf87ds98978das98d7893u12rj808d0j09012jd012') 547 -{{/code}} 548 -))) 549 -))) 550 -))) 551 - 552 - 553 - 554 554 (% style="color:powderblue" %) 555 555 ---- 556 556 557 -** Mobigate.getSDKInfo(onSuccess, onError)**558 -Getting information about the library 492 +**Future<String> getSDKInfo()** 493 +Getting information about the library. Return on success sdk info string, error otherwise. 559 559 560 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 561 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 562 -|onSuccess |Function |returns callback object 563 -|onError |Function |returns callback object 564 - 565 565 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 566 -{{code language="javascript"}} 567 -Mobigate.getSDKInfo((success) => { 568 - console.log("sdk info: " + success) 569 - }, (error) => { 570 - console.log(error) 571 - }) 496 +{{code language="dart"}} 497 +final String sdkInfo = await mobigateInstance.getSDKInfo(); 572 572 {{/code}} 573 573 {{/showhide}} 574 574 ... ... @@ -575,21 +575,12 @@ 575 575 (% style="color:powderblue" %) 576 576 ---- 577 577 578 -** Mobigate.getSDKUniqueIdentifier(onSuccess, onError)**579 -Return unique SDK identificator 504 +**Future<String> getSDKUniqueIdentifier()** 505 +Return unique SDK identificator. Return on success sdk unique identifier, error otherwise. 580 580 581 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 582 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 583 -|onSuccess |Function |returns callback object 584 -|onError |Function |returns callback object 585 - 586 586 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 587 -{{code language="javascript"}} 588 -Mobigate.getSDKUniqueIdentifier((success) => { 589 - console.log("UUID: " + success) 590 - }, (error) => { 591 - console.log(error) 592 - }) 508 +{{code language="dart"}} 509 +final String sdkUniqueIdentifier = await mobigateInstance.getSDKUniqueIdentifier(); 593 593 {{/code}} 594 594 {{/showhide}} 595 595 ... ... @@ -596,22 +596,12 @@ 596 596 (% style="color:powderblue" %) 597 597 ---- 598 598 599 -** Mobigate.getIDsProfiles(onSuccess, onError)**516 +**Future<List<int>> getIDsProfiles()** 600 600 Method returns IDs profiles. List of IDs profiles in the application memory is updated (synchronized with the server) at specified intervals. To enable functionality, use the 'enableIDsProfiles (boolean enable)' method. Returns the identifiers of IDs profiles (ex. 5,9,20), returns '0' if list of user IDs profiles is empty, returns 'null' if the system has not yet communicated 601 601 602 - 603 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 604 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 605 -|onSuccess |Function |returns callback object 606 -|onError |Function |returns callback object 607 - 608 608 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 609 -{{code language="javascript"}} 610 -Mobigate.getIDsProfiles((success) => { 611 - console.log("Profiles: " + success) 612 - }, (error) => { 613 - console.log(error) 614 - }) 520 +{{code language="dart"}} 521 +final List<int> idsProfiles = await mobigateInstance.getIDsProfiles(); 615 615 {{/code}} 616 616 {{/showhide}} 617 617 ... ... @@ -618,21 +618,12 @@ 618 618 (% style="color:powderblue" %) 619 619 ---- 620 620 621 -**M obigate.getAdOceanTargeting(onSuccess, onError)**528 +**Future<Map<String, int>> getAdOceanTargeting()** 622 622 Getting numerical variables, that can be used for ads targeting. Method must be called from separate thread. Return 3 different identifiers of a user, encoded into a map of AdOcean numerical variables 623 623 624 -(% class="table-bordered table-hover" style="border-color:powderblue" %) 625 -|=(% style="background-color:powderblue" %)Name|=(% style="background-color:powderblue" %)Type|=(% style="background-color:powderblue" %)Description 626 -|onSuccess |Function |returns callback object 627 -|onError |Function |returns callback object 628 - 629 629 {{showhide id="3" showmessage="Example" hidemessage="Example"}} 630 -{{code language="javascript"}} 631 -Mobigate.getAdOceanTargeting((success) => { 632 - console.log("Adocean targeting: " + success) 633 - }, (error) => { 634 - console.log(error) 635 - }) 532 +{{code language="dart"}} 533 +final Map<String,int> adOceanTargeting = await mobigateInstance.getAdOceanTargeting(); 636 636 {{/code}} 637 637 {{/showhide}} 638 638 ... ... @@ -644,18 +644,18 @@ 644 644 645 645 Used to set custom user fields inside //Mobigate.init()// method: 646 646 647 -* Mobigate.USER_FIELD_EMAIL648 -* Mobigate.USER_FIELD_IMSI649 -* Mobigate.USER_FIELD_IMEI650 -* Mobigate.USER_FIELD_SERIAL545 +* UserField.USER_FIELD_EMAIL 546 +* UserField.USER_FIELD_IMSI 547 +* UserField.USER_FIELD_IMEI 548 +* UserField.USER_FIELD_SERIAL 651 651 652 652 == 4.2 Data gather policy constants == 653 653 654 654 Used to set how the library collects data: 655 655 656 -* Mo bigate.DATA_GATHER_POLICY_DEFAULT657 -* Mo bigate.DATA_GATHER_POLICY_HIDE_TRAY658 -* Mo bigate.DATA_GATHER_POLICY_BLOCK_DATA_BG554 +* MonitorState.DATA_GATHER_POLICY_DEFAULT 555 +* MonitorState.DATA_GATHER_POLICY_HIDE_TRAY 556 +* MonitorState.DATA_GATHER_POLICY_BLOCK_DATA_BG 659 659 660 660 == 4.3 Data collectors constants == 661 661