[{"data":1,"prerenderedAt":1302},["ShallowReactive",2],{"navigation_docs":3,"-sdks-react-native":233,"-sdks-react-native-surround":1297},[4,36,67,122,187,207,223],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"What is Rabolic","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-zap",{"title":21,"path":22,"stem":23,"icon":24},"Keys","\u002Fgetting-started\u002Fkeys","1.getting-started\u002F3.keys","i-lucide-key-round",{"title":26,"path":27,"stem":28,"icon":29},"Setup CLI","\u002Fgetting-started\u002Fsetup-cli","1.getting-started\u002F4.setup-cli","i-lucide-terminal",{"title":31,"path":32,"stem":33,"icon":34},"Trial","\u002Fgetting-started\u002Ftrial","1.getting-started\u002F5.trial","i-lucide-hourglass",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"SDKs and API","i-lucide-code","\u002Fsdks","2.sdks",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Web","\u002Fsdks\u002Fweb","2.sdks\u002F1.web","i-lucide-globe",{"title":48,"path":49,"stem":50,"icon":51},"React Native and Expo","\u002Fsdks\u002Freact-native","2.sdks\u002F2.react-native","i-simple-icons-react",{"title":53,"path":54,"stem":55,"icon":56},"Flutter","\u002Fsdks\u002Fflutter","2.sdks\u002F3.flutter","i-simple-icons-flutter",{"title":58,"path":59,"stem":60,"icon":61},"Node.js","\u002Fsdks\u002Fnode","2.sdks\u002F4.node","i-simple-icons-nodedotjs",{"title":63,"path":64,"stem":65,"icon":66},"Ingest HTTP API","\u002Fsdks\u002Fhttp-api","2.sdks\u002F5.http-api","i-lucide-send",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[73,77,82,87,92,97,102,107,112,117],{"title":74,"path":75,"stem":76,"icon":19},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F01.events",{"title":78,"path":79,"stem":80,"icon":81},"Identity","\u002Fconcepts\u002Fidentity","3.concepts\u002F02.identity","i-lucide-fingerprint",{"title":83,"path":84,"stem":85,"icon":86},"Sessions","\u002Fconcepts\u002Fsessions","3.concepts\u002F03.sessions","i-lucide-activity",{"title":88,"path":89,"stem":90,"icon":91},"Key events and conversions","\u002Fconcepts\u002Fkey-events-and-conversions","3.concepts\u002F04.key-events-and-conversions","i-lucide-star",{"title":93,"path":94,"stem":95,"icon":96},"Funnels","\u002Fconcepts\u002Ffunnels","3.concepts\u002F05.funnels","i-lucide-filter",{"title":98,"path":99,"stem":100,"icon":101},"Journeys","\u002Fconcepts\u002Fjourneys","3.concepts\u002F06.journeys","i-lucide-route",{"title":103,"path":104,"stem":105,"icon":106},"Retention","\u002Fconcepts\u002Fretention","3.concepts\u002F07.retention","i-lucide-repeat",{"title":108,"path":109,"stem":110,"icon":111},"Revenue and attribution","\u002Fconcepts\u002Frevenue-and-attribution","3.concepts\u002F08.revenue-and-attribution","i-lucide-wallet",{"title":113,"path":114,"stem":115,"icon":116},"Consent and privacy","\u002Fconcepts\u002Fprivacy","3.concepts\u002F09.privacy","i-lucide-shield-check",{"title":118,"path":119,"stem":120,"icon":121},"Data retention","\u002Fconcepts\u002Fdata-retention","3.concepts\u002F10.data-retention","i-lucide-archive",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":35},"Using the dashboard","i-lucide-layout-dashboard","\u002Fdashboard","4.dashboard",[128,133,138,143,146,151,154,157,160,163,167,172,177,182],{"title":129,"path":130,"stem":131,"icon":132},"Overview","\u002Fdashboard\u002Foverview","4.dashboard\u002F01.overview","i-lucide-gauge",{"title":134,"path":135,"stem":136,"icon":137},"Live","\u002Fdashboard\u002Flive","4.dashboard\u002F02.live","i-lucide-radio",{"title":139,"path":140,"stem":141,"icon":142},"Analytics","\u002Fdashboard\u002Fanalytics","4.dashboard\u002F03.analytics","i-lucide-bar-chart-3",{"title":74,"path":144,"stem":145,"icon":19},"\u002Fdashboard\u002Fevents","4.dashboard\u002F04.events",{"title":147,"path":148,"stem":149,"icon":150},"Users","\u002Fdashboard\u002Fusers","4.dashboard\u002F05.users","i-lucide-users",{"title":83,"path":152,"stem":153,"icon":86},"\u002Fdashboard\u002Fsessions","4.dashboard\u002F06.sessions",{"title":93,"path":155,"stem":156,"icon":96},"\u002Fdashboard\u002Ffunnels","4.dashboard\u002F07.funnels",{"title":98,"path":158,"stem":159,"icon":101},"\u002Fdashboard\u002Fjourneys","4.dashboard\u002F08.journeys",{"title":103,"path":161,"stem":162,"icon":106},"\u002Fdashboard\u002Fretention","4.dashboard\u002F09.retention",{"title":164,"path":165,"stem":166,"icon":111},"Revenue","\u002Fdashboard\u002Frevenue","4.dashboard\u002F10.revenue",{"title":168,"path":169,"stem":170,"icon":171},"Alerts","\u002Fdashboard\u002Falerts","4.dashboard\u002F11.alerts","i-lucide-bell",{"title":173,"path":174,"stem":175,"icon":176},"Integrations","\u002Fdashboard\u002Fintegrations","4.dashboard\u002F12.integrations","i-lucide-plug-zap",{"title":178,"path":179,"stem":180,"icon":181},"Project settings","\u002Fdashboard\u002Fproject-settings","4.dashboard\u002F13.project-settings","i-lucide-settings",{"title":183,"path":184,"stem":185,"icon":186},"Organizations and roles","\u002Fdashboard\u002Forganizations-and-roles","4.dashboard\u002F14.organizations-and-roles","i-lucide-building-2",{"title":188,"icon":189,"path":190,"stem":191,"children":192,"page":35},"Plans and billing","i-lucide-credit-card","\u002Fbilling","5.billing",[193,198,202],{"title":194,"path":195,"stem":196,"icon":197},"Plans","\u002Fbilling\u002Fplans","5.billing\u002F1.plans","i-lucide-tags",{"title":199,"path":200,"stem":201,"icon":132},"Usage and overage","\u002Fbilling\u002Fusage-and-overage","5.billing\u002F2.usage-and-overage",{"title":203,"path":204,"stem":205,"icon":206},"Read-only and deletion","\u002Fbilling\u002Fread-only-and-deletion","5.billing\u002F3.read-only-and-deletion","i-lucide-lock",{"title":208,"icon":209,"path":210,"stem":211,"children":212,"page":35},"Limits and troubleshooting","i-lucide-life-buoy","\u002Flimits","6.limits",[213,218],{"title":214,"path":215,"stem":216,"icon":217},"Limits","\u002Flimits\u002Flimits","6.limits\u002F1.limits","i-lucide-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Events not showing","\u002Flimits\u002Ftroubleshooting","6.limits\u002F2.troubleshooting","i-lucide-search-check",{"title":224,"icon":225,"path":226,"stem":227,"children":228,"page":35},"AI connector","i-lucide-sparkles","\u002Fai","7.ai",[229],{"title":224,"path":230,"stem":231,"icon":232},"\u002Fai\u002Fconnector","7.ai\u002F1.connector","i-lucide-plug",{"id":234,"title":48,"body":235,"description":1288,"extension":1289,"links":1290,"meta":1291,"navigation":1292,"path":49,"seo":1293,"stem":50,"__hash__":1296},"docs\u002F2.sdks\u002F2.react-native.md",{"type":236,"value":237,"toc":1274},"minimark",[238,254,266,271,280,352,356,482,501,505,665,669,680,747,754,804,807,832,836,902,908,911,916,920,1085,1091,1094,1106,1110,1134,1136,1180,1196,1200,1215,1218,1265,1270],[239,240,241,245,246,253],"p",{},[242,243,244],"code",{},"@rabolic\u002Freact-native"," is Rabolic for React Native apps on iOS and Android, Expo included: app installs, opens and updates, sessions, screens, identity and deep links. It has no native code of its own. Events are kept in AsyncStorage until they are sent. Source: ",[247,248,252],"a",{"href":249,"rel":250},"https:\u002F\u002Fgithub.com\u002Frabolic\u002Fsdks\u002Ftree\u002Fmain\u002Fjs\u002Freact-native",[251],"nofollow","github.com\u002Frabolic\u002Fsdks\u002Fjs\u002Freact-native",".",[239,255,256,257,261,262,265],{},"Use the project's ",[258,259,260],"strong",{},"publishable key"," (",[242,263,264],{},"rb_pub_…","). A secret key is refused: it must never ship in an app.",[267,268,270],"h2",{"id":269},"install","Install",[239,272,273,274,279],{},"The quickest way is ",[247,275,276],{"href":27},[242,277,278],{},"npx rabolic init"," in your app's folder. By hand:",[281,282,283,315],"code-group",{},[284,285,291],"pre",{"className":286,"code":287,"filename":288,"language":289,"meta":290,"style":290},"language-bash shiki shiki-themes github-light-default github-light-default github-dark-default","npx expo install @rabolic\u002Freact-native @react-native-async-storage\u002Fasync-storage\n","Expo","bash","",[242,292,293],{"__ignoreMap":290},[294,295,298,302,306,309,312],"span",{"class":296,"line":297},"line",1,[294,299,301],{"class":300},"sQJ0q","npx",[294,303,305],{"class":304},"s-BGO"," expo",[294,307,308],{"class":304}," install",[294,310,311],{"class":304}," @rabolic\u002Freact-native",[294,313,314],{"class":304}," @react-native-async-storage\u002Fasync-storage\n",[284,316,319],{"className":286,"code":317,"filename":318,"language":289,"meta":290,"style":290},"npm install @rabolic\u002Freact-native @react-native-async-storage\u002Fasync-storage && cd ios && pod install\n","Bare React Native",[242,320,321],{"__ignoreMap":290},[294,322,323,326,328,330,333,337,341,344,346,349],{"class":296,"line":297},[294,324,325],{"class":300},"npm",[294,327,308],{"class":304},[294,329,311],{"class":304},[294,331,332],{"class":304}," @react-native-async-storage\u002Fasync-storage",[294,334,336],{"class":335},"s_bOF"," && ",[294,338,340],{"class":339},"sDkKp","cd",[294,342,343],{"class":304}," ios",[294,345,336],{"class":335},[294,347,348],{"class":300},"pod",[294,350,351],{"class":304}," install\n",[267,353,355],{"id":354},"initialize","Initialize",[284,357,361],{"className":358,"code":359,"language":360,"meta":290,"style":290},"language-ts shiki shiki-themes github-light-default github-light-default github-dark-default","import { rabolic } from '@rabolic\u002Freact-native'\n\n\u002F\u002F Once, at app start. You don't have to await it: calls made before it finishes are kept.\nvoid rabolic.init({ projectKey: 'rb_pub_…', app: { version: '4.12.0', build: '412' } })\n\n\u002F\u002F after signup or login, on every platform with the same id\nrabolic.identify(user.id, { plan: 'pro' })\n\nrabolic.track('workout_started', { program_id: 'strength-30' })\n","ts",[242,362,363,378,385,392,426,431,437,455,460],{"__ignoreMap":290},[294,364,365,369,372,375],{"class":296,"line":297},[294,366,368],{"class":367},"s5nWI","import",[294,370,371],{"class":335}," { rabolic } ",[294,373,374],{"class":367},"from",[294,376,377],{"class":304}," '@rabolic\u002Freact-native'\n",[294,379,381],{"class":296,"line":380},2,[294,382,384],{"emptyLinePlaceholder":383},true,"\n",[294,386,388],{"class":296,"line":387},3,[294,389,391],{"class":390},"s9BHP","\u002F\u002F Once, at app start. You don't have to await it: calls made before it finishes are kept.\n",[294,393,395,398,401,405,408,411,414,417,420,423],{"class":296,"line":394},4,[294,396,397],{"class":367},"void",[294,399,400],{"class":335}," rabolic.",[294,402,404],{"class":403},"sd69k","init",[294,406,407],{"class":335},"({ projectKey: ",[294,409,410],{"class":304},"'rb_pub_…'",[294,412,413],{"class":335},", app: { version: ",[294,415,416],{"class":304},"'4.12.0'",[294,418,419],{"class":335},", build: ",[294,421,422],{"class":304},"'412'",[294,424,425],{"class":335}," } })\n",[294,427,429],{"class":296,"line":428},5,[294,430,384],{"emptyLinePlaceholder":383},[294,432,434],{"class":296,"line":433},6,[294,435,436],{"class":390},"\u002F\u002F after signup or login, on every platform with the same id\n",[294,438,440,443,446,449,452],{"class":296,"line":439},7,[294,441,442],{"class":335},"rabolic.",[294,444,445],{"class":403},"identify",[294,447,448],{"class":335},"(user.id, { plan: ",[294,450,451],{"class":304},"'pro'",[294,453,454],{"class":335}," })\n",[294,456,458],{"class":296,"line":457},8,[294,459,384],{"emptyLinePlaceholder":383},[294,461,463,465,468,471,474,477,480],{"class":296,"line":462},9,[294,464,442],{"class":335},[294,466,467],{"class":403},"track",[294,469,470],{"class":335},"(",[294,472,473],{"class":304},"'workout_started'",[294,475,476],{"class":335},", { program_id: ",[294,478,479],{"class":304},"'strength-30'",[294,481,454],{"class":335},[239,483,484,485,488,489,492,493,496,497,500],{},"Pass your app's version (",[242,486,487],{},"app.version","): with it, the first launch on a new version sends ",[242,490,491],{},"$app_update",". In Expo, ",[242,494,495],{},"Application.nativeApplicationVersion"," from ",[242,498,499],{},"expo-application"," has it.",[267,502,504],{"id":503},"options","Options",[506,507,508,523],"table",{},[509,510,511],"thead",{},[512,513,514,518,521],"tr",{},[515,516,517],"th",{},"Option",[515,519,520],{},"Default",[515,522],{},[524,525,526,541,556,571,590,605,620,635,650],"tbody",{},[512,527,528,534,537],{},[529,530,531],"td",{},[242,532,533],{},"projectKey",[529,535,536],{},"required",[529,538,539],{},[242,540,264],{},[512,542,543,548,553],{},[529,544,545],{},[242,546,547],{},"host",[529,549,550],{},[242,551,552],{},"https:\u002F\u002Fingest.rabolic.com",[529,554,555],{},"For a first-party proxy",[512,557,558,563,566],{},[529,559,560],{},[242,561,562],{},"app",[529,564,565],{},"none",[529,567,568],{},[242,569,570],{},"{ version, build, bundle }",[512,572,573,578,583],{},[529,574,575],{},[242,576,577],{},"trackLifecycle",[529,579,580],{},[242,581,582],{},"true",[529,584,585,586,589],{},"The four ",[242,587,588],{},"$app_"," events",[512,591,592,597,602],{},[529,593,594],{},[242,595,596],{},"consent",[529,598,599],{},[242,600,601],{},"granted",[529,603,604],{},"The state to start with when the app hasn't set one",[512,606,607,612,617],{},[529,608,609],{},[242,610,611],{},"flushAt",[529,613,614],{},[242,615,616],{},"20",[529,618,619],{},"Send when this many events are queued (1–500)",[512,621,622,627,632],{},[529,623,624],{},[242,625,626],{},"flushIntervalMs",[529,628,629],{},[242,630,631],{},"15000",[529,633,634],{},"Send at least this often",[512,636,637,642,647],{},[529,638,639],{},[242,640,641],{},"maxQueueSize",[529,643,644],{},[242,645,646],{},"10000",[529,648,649],{},"Events kept on the device; the oldest go first",[512,651,652,657,662],{},[529,653,654],{},[242,655,656],{},"debug",[529,658,659],{},[242,660,661],{},"false",[529,663,664],{},"Log calls and responses",[267,666,668],{"id":667},"screens","Screens",[239,670,671,672,675,676,679],{},"With React Navigation, hand the container's ref to ",[242,673,674],{},"trackNavigation"," once it's ready. Every route change sends ",[242,677,678],{},"$screen"," with the route's name:",[284,681,685],{"className":682,"code":683,"language":684,"meta":290,"style":290},"language-tsx shiki shiki-themes github-light-default github-light-default github-dark-default","const ref = useNavigationContainerRef()\n\u003CNavigationContainer ref={ref} onReady={() => rabolic.trackNavigation(ref)}>\n","tsx",[242,686,687,704],{"__ignoreMap":290},[294,688,689,692,695,698,701],{"class":296,"line":297},[294,690,691],{"class":367},"const",[294,693,694],{"class":339}," ref",[294,696,697],{"class":367}," =",[294,699,700],{"class":403}," useNavigationContainerRef",[294,702,703],{"class":335},"()\n",[294,705,706,709,713,715,718,721,724,727,729,732,735,737,739,742,744],{"class":296,"line":380},[294,707,708],{"class":335},"\u003C",[294,710,712],{"class":711},"sfEsd","NavigationContainer",[294,714,694],{"class":339},[294,716,717],{"class":367},"={",[294,719,720],{"class":335},"ref",[294,722,723],{"class":367},"}",[294,725,726],{"class":339}," onReady",[294,728,717],{"class":367},[294,730,731],{"class":335},"() ",[294,733,734],{"class":367},"=>",[294,736,400],{"class":335},[294,738,674],{"class":403},[294,740,741],{"class":335},"(ref)",[294,743,723],{"class":367},[294,745,746],{"class":335},">\n",[239,748,749,750,753],{},"With Expo Router, in ",[242,751,752],{},"app\u002F_layout.tsx",":",[284,755,757],{"className":682,"code":756,"language":684,"meta":290,"style":290},"import { useNavigationContainerRef } from 'expo-router'\n\nconst ref = useNavigationContainerRef()\nuseEffect(() => rabolic.trackNavigation(ref), [ref])\n",[242,758,759,771,775,787],{"__ignoreMap":290},[294,760,761,763,766,768],{"class":296,"line":297},[294,762,368],{"class":367},[294,764,765],{"class":335}," { useNavigationContainerRef } ",[294,767,374],{"class":367},[294,769,770],{"class":304}," 'expo-router'\n",[294,772,773],{"class":296,"line":380},[294,774,384],{"emptyLinePlaceholder":383},[294,776,777,779,781,783,785],{"class":296,"line":387},[294,778,691],{"class":367},[294,780,694],{"class":339},[294,782,697],{"class":367},[294,784,700],{"class":403},[294,786,703],{"class":335},[294,788,789,792,795,797,799,801],{"class":296,"line":394},[294,790,791],{"class":403},"useEffect",[294,793,794],{"class":335},"(() ",[294,796,734],{"class":367},[294,798,400],{"class":335},[294,800,674],{"class":403},[294,802,803],{"class":335},"(ref), [ref])\n",[239,805,806],{},"Or send screens yourself:",[284,808,810],{"className":358,"code":809,"language":360,"meta":290,"style":290},"rabolic.screen('Paywall', { variant: 'b' })\n",[242,811,812],{"__ignoreMap":290},[294,813,814,816,819,821,824,827,830],{"class":296,"line":297},[294,815,442],{"class":335},[294,817,818],{"class":403},"screen",[294,820,470],{"class":335},[294,822,823],{"class":304},"'Paywall'",[294,825,826],{"class":335},", { variant: ",[294,828,829],{"class":304},"'b'",[294,831,454],{"class":335},[267,833,835],{"id":834},"automatic-events","Automatic events",[506,837,838,848],{},[509,839,840],{},[512,841,842,845],{},[515,843,844],{},"Event",[515,846,847],{},"When",[524,849,850,860,875,888],{},[512,851,852,857],{},[529,853,854],{},[242,855,856],{},"$app_first_open",[529,858,859],{},"The first launch after install",[512,861,862,866],{},[529,863,864],{},[242,865,491],{},[529,867,868,869,871,872],{},"The first launch on a new ",[242,870,487],{},", with ",[242,873,874],{},"previous_version",[512,876,877,882],{},[529,878,879],{},[242,880,881],{},"$app_open",[529,883,884,885],{},"Each launch and each return to the foreground, with ",[242,886,887],{},"from_background",[512,889,890,895],{},[529,891,892],{},[242,893,894],{},"$app_background",[529,896,897,898,901],{},"Going to the background, with ",[242,899,900],{},"foreground_ms",". Queued events are sent then",[239,903,904,907],{},[242,905,906],{},"trackLifecycle: false"," turns these events off.",[267,909,83],{"id":910},"sessions",[239,912,913,914,253],{},"A session starts at launch, and again on return after more than 30 seconds in the background. The project's mobile background timeout can change the 30 seconds. Background time never counts as active time. See ",[247,915,83],{"href":84},[267,917,919],{"id":918},"api","API",[506,921,922,932],{},[509,923,924],{},[512,925,926,929],{},[515,927,928],{},"Method",[515,930,931],{},"Does",[524,933,934,944,958,971,983,1004,1014,1028,1045,1058,1068],{},[512,935,936,941],{},[529,937,938],{},[242,939,940],{},"init(options)",[529,942,943],{},"Starts the SDK. A second call returns the first one's promise",[512,945,946,951],{},[529,947,948],{},[242,949,950],{},"track(event, properties?)",[529,952,953,954,957],{},"Custom event. snake_case; names starting with ",[242,955,956],{},"$"," are reserved",[512,959,960,965],{},[529,961,962],{},[242,963,964],{},"screen(name, properties?)",[529,966,967,968,970],{},"A ",[242,969,678],{}," view",[512,972,973,978],{},[529,974,975],{},[242,976,977],{},"trackNavigation(ref)",[529,979,980,982],{},[242,981,678],{}," on every React Navigation route change. Returns a function that stops it",[512,984,985,990],{},[529,986,987],{},[242,988,989],{},"identify(userId, traits?)",[529,991,992,993,996,997,1000,1001],{},"Sets ",[242,994,995],{},"user_id"," on this and later events; sends ",[242,998,999],{},"$identify"," with ",[242,1002,1003],{},"traits",[512,1005,1006,1011],{},[529,1007,1008],{},[242,1009,1010],{},"reset()",[529,1012,1013],{},"Logout: new anonymous id and session, no user id, no super properties",[512,1015,1016,1025],{},[529,1017,1018,1021,1022],{},[242,1019,1020],{},"register(properties)"," \u002F ",[242,1023,1024],{},"unregister(key)",[529,1026,1027],{},"Super properties, sent with every later event",[512,1029,1030,1042],{},[529,1031,1032,1035,1036,1035,1039],{},[242,1033,1034],{},"setConsent(state)",", ",[242,1037,1038],{},"optIn()",[242,1040,1041],{},"optOut()",[529,1043,1044],{},"Consent",[512,1046,1047,1052],{},[529,1048,1049],{},[242,1050,1051],{},"trackDeepLink(url)",[529,1053,1054,1057],{},[242,1055,1056],{},"$deep_link"," for a link the app was opened with",[512,1059,1060,1065],{},[529,1061,1062],{},[242,1063,1064],{},"flush()",[529,1066,1067],{},"Sends the queue now. Never rejects",[512,1069,1070,1075],{},[529,1071,1072],{},[242,1073,1074],{},"getAnonymousId()",[529,1076,1077,1078,1081,1082,1084],{},"This install's anonymous id, or ",[242,1079,1080],{},"null"," before ",[242,1083,404],{}," finishes",[239,1086,1087,1088,253],{},"Calls never throw. Problems are logged with ",[242,1089,1090],{},"debug: true",[267,1092,78],{"id":1093},"identity",[239,1095,1096,1097,1100,1101,1103,1104,253],{},"Call ",[242,1098,1099],{},"identify()"," after signup and after every login, with the same user id you use on the web and on your server. Call ",[242,1102,1010],{}," at logout. See ",[247,1105,78],{"href":79},[267,1107,1109],{"id":1108},"deep-links","Deep links",[239,1111,1112,1115,1116,1118,1119,1122,1123,1126,1127,1130,1131,1133],{},[242,1113,1114],{},"rabolic.trackDeepLink(url)"," sends ",[242,1117,1056],{}," for a link the app was opened with. An ",[242,1120,1121],{},"rb_aid"," parameter, which the web SDK's ",[242,1124,1125],{},"appLink()"," adds, is sent as ",[242,1128,1129],{},"linked_anonymous_id",". Rabolic stores it, but doesn't join the web visitor to the app user by it yet. ",[242,1132,1099],{}," with the same user id on web and app does.",[267,1135,1044],{"id":596},[506,1137,1138,1148],{},[509,1139,1140],{},[512,1141,1142,1145],{},[515,1143,1144],{},"State",[515,1146,1147],{},"What happens",[524,1149,1150,1160,1170],{},[512,1151,1152,1157],{},[529,1153,1154,1156],{},[242,1155,601],{}," (default)",[529,1158,1159],{},"Tracks and sends normally",[512,1161,1162,1167],{},[529,1163,1164],{},[242,1165,1166],{},"pending",[529,1168,1169],{},"Keeps events in memory only and sends nothing",[512,1171,1172,1177],{},[529,1173,1174],{},[242,1175,1176],{},"denied",[529,1178,1179],{},"Drops everything and clears the queue",[239,1181,1182,1184,1185,1035,1188,1190,1191,1193,1194,253],{},[242,1183,596],{}," in the options is the state to start with when the app hasn't set one. Change it at runtime with ",[242,1186,1187],{},"setConsent()",[242,1189,1038],{}," or ",[242,1192,1041],{},". See ",[247,1195,113],{"href":114},[267,1197,1199],{"id":1198},"random-ids","Random ids",[239,1201,1202,1203,1206,1207,1210,1211,1214],{},"Ids use ",[242,1204,1205],{},"crypto.getRandomValues"," when the runtime has it (recent React Native, or the ",[242,1208,1209],{},"react-native-get-random-values"," polyfill). Without it they fall back to ",[242,1212,1213],{},"Math.random",": unique enough for analytics, but not unguessable.",[267,1216,214],{"id":1217},"limits",[506,1219,1220,1228],{},[509,1221,1222],{},[512,1223,1224,1226],{},[515,1225],{},[515,1227],{},[524,1229,1230,1241,1249,1257],{},[512,1231,1232,1235],{},[529,1233,1234],{},"Queue",[529,1236,1237,1238,1240],{},"10,000 events on the device (",[242,1239,641],{},"). When full, the oldest go first",[512,1242,1243,1246],{},[529,1244,1245],{},"Batch",[529,1247,1248],{},"Up to 500 events or 900 KB",[512,1250,1251,1254],{},[529,1252,1253],{},"One event",[529,1255,1256],{},"32 KB (32,768 bytes of UTF-8 JSON). Larger events are dropped",[512,1258,1259,1262],{},[529,1260,1261],{},"Event age",[529,1263,1264],{},"Events older than 7 days are dropped before sending",[239,1266,1267,1268,253],{},"See ",[247,1269,214],{"href":215},[1271,1272,1273],"style",{},"html pre.shiki code .sQJ0q, html code.shiki .sQJ0q{--shiki-light:#953800;--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .s-BGO, html code.shiki .s-BGO{--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s_bOF, html code.shiki .s_bOF{--shiki-light:#1F2328;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sDkKp, html code.shiki .sDkKp{--shiki-light:#0550AE;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html pre.shiki code .s5nWI, html code.shiki .s5nWI{--shiki-light:#CF222E;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .s9BHP, html code.shiki .s9BHP{--shiki-light:#6E7781;--shiki-default:#6E7781;--shiki-dark:#8B949E}html pre.shiki code .sd69k, html code.shiki .sd69k{--shiki-light:#8250DF;--shiki-default:#8250DF;--shiki-dark:#D2A8FF}html pre.shiki code .sfEsd, html code.shiki .sfEsd{--shiki-light:#116329;--shiki-default:#116329;--shiki-dark:#7EE787}",{"title":290,"searchDepth":380,"depth":380,"links":1275},[1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287],{"id":269,"depth":380,"text":270},{"id":354,"depth":380,"text":355},{"id":503,"depth":380,"text":504},{"id":667,"depth":380,"text":668},{"id":834,"depth":380,"text":835},{"id":910,"depth":380,"text":83},{"id":918,"depth":380,"text":919},{"id":1093,"depth":380,"text":78},{"id":1108,"depth":380,"text":1109},{"id":596,"depth":380,"text":1044},{"id":1198,"depth":380,"text":1199},{"id":1217,"depth":380,"text":214},"Install @rabolic\u002Freact-native in Expo or bare React Native apps for iOS and Android. Options, app lifecycle events, screens with React Navigation and Expo Router, identity, deep links, consent and limits.","md",null,{},{"icon":51},{"title":1294,"description":1295},"React Native and Expo SDK (@rabolic\u002Freact-native)","Install Rabolic in Expo or bare React Native apps for iOS and Android. Options, app installs, opens and updates, screens with React Navigation and Expo Router, identity, deep links, consent and limits.","KymIleWVEa4ihLFUbR0EhDUXZHPe16heQIod6TZGSFY",[1298,1300],{"title":43,"path":44,"stem":45,"description":1299,"icon":46,"children":-1},"Install @rabolic\u002Fweb from npm or a script tag. Options, automatic page views and page leaves, campaigns, sessions, identity, consent, cookieless mode and limits.",{"title":53,"path":54,"stem":55,"description":1301,"icon":56,"children":-1},"Install rabolic_flutter for iOS, Android and Flutter web. Configuration, lifecycle events, screens with Navigator, go_router and auto_route, identity, in-app purchase tokens, deep links, consent, app store privacy forms and limits.",1794242363863]