A changelog documenting version updates and changes of Spike SDK for React Native platform.
If after updating you get errors while building the iOS app, please do the following:
1.
2. - delete old pods
3. - install updated pods
4. Open project in XCode and do a full clean: or
Added Spike.createConnectionAPIv3WithAuthToken(authToken) to open a v3 connection from a JWT access token (for example after server-side HMAC auth). Use this when the app already has a Spike access token and should not perform HMAC signing on device.
Added nutrition support across HealthKit (iOS), Health Connect (Android), and Samsung Health Data (Android). You can now request nutrition permissions, backfill historical nutrition data, and include nutrition fields in background delivery by passing nutritionalFields to requestHealthPermissions, backfill, enableBackgroundDelivery, and requestPermissionsFromHealthKitAndBackfill.
getNutritionRecords({ from, to }) now reads the latest local HealthKit / Health Connect / Samsung Health Data nutrition data before returning records when the corresponding integration is enabled.
BackgroundDeliveryConfig now exposes the nutritionalFields currently registered for background delivery.
Added close() on the v3 connection to disconnect from the SDK, release the native connection, and stop background delivery when it is enabled.
await connection.close();
IMPORTANT! If after updating you get errors while building iOS app please do following:
rm -rf ios/Pods/ ios/Podfile.lock - delete old pods
cd ios; pod install --repo-update - install updated pods
Open project in XCode 26 and do a full clean: Product -> Clean build folder or Shift + Command + K
Added backfill on the v3 connection to upload historical health data for a chosen number of days. Call it after you have granted the relevant permissions (HealthKit on iOS; Health Connect and/or Samsung Health Data on Android).
iOS (HealthKit): added requestPermissionsFromHealthKitAndBackfill — requests read permissions for the given categories, then starts a backfill. Data for today and yesterday is pushed before the call resolves; older days continue in the background.
Android (Samsung Health Data): added requestPermissionsFromSamsungHealthDataAndBackfill — enables Samsung Health Data integration, requests permissions for the given categories, then starts a backfill.
Android (Health Connect): added requestPermissionsFromHealthConnectAndBackfill — enables Health Connect integration, requests permissions for the given categories, then starts a backfill.
iOS: If the app fails to build after upgrading, remove ios/Pods and ios/Podfile.lock, then run pod install --repo-update in ios, and run clean from Xcode.
Fixed nutrition record data so that nutritionalFields keys in ingredients and records match the NutritionalField enum values. You can now look up values using ingredient.nutritionalFields[NutritionalField.energyKcal] and similar expressions as intended.
Improved the way data is sent to API to reduce the size and speed of calls to Spike
Added new Statistic types:
stressScore
recoveryScore
activityScore
Added new Metric types for getSleep request:
sleepDuration
sleepDurationAwake
sleepDurationDeep
sleepDurationLight
sleepDurationNap
sleepDurationRem
sleepEfficiency
sleepInterruptions
sleepLatency
sleepScore
Better keychain compatibility
NOTE: If you use the keychain in your app with a service name equal to your bundle
identifier, please check if it contains key named spikeApiToken and delete it.
Added a plugin to automatically configure the Android app by updating the necessary fields in build.gradle files and AndroidManifest.xml, including handling specified permissions.
Enabled configuration of iOS HealthKit permission texts directly from the plugin settings.
Added support for enabling background delivery via plugin configuration.
Config entry example for app.json:
[ "react-native-spike-sdk", { "ios": { "healthSharePermission": "$(PRODUCT_NAME) needs access to read your health data", "healthUpdatePermission": "$(PRODUCT_NAME) needs permission to save health data", "isBackgroundDeliveryEnabled": true }, "android": { "healthConnectPermissions": [ "android.permission.health.READ_BASAL_METABOLIC_RATE", "android.permission.health.READ_WEIGHT" ], "isBackgroundDeliveryEnabled": true } } ]
Updated getIntegrationInitUrl. Now it accepts IntegrationInitConfig config object where you can pass:
redirectUri: will override the one set in admin console
state: when the authorization server redirects back to the client, it includes the state value originally sent
providerUserIdentifier: at the moment used (and required) only when integrating with ultrahuman
New provider: ultrahuman
When integrating with Ultrahuman, you have to provide ultrahuman user email in IntegrationInitConfig.providerUserIdentifier. Example:
Improved transport protocol for background delivery
Updated native Android SDK Version to 4.2.72
New MetricTypes added:
BODY_FAT
BODY_FAT_MAX
BODY_FAT_MIN
BODY_BONE_MASS
BODY_MASS_INDEX
BLOOD_PRESSURE_SYSTOLIC
BLOOD_PRESSURE_SYSTOLIC_MIN
BLOOD_PRESSURE_SYSTOLIC_MAX
BLOOD_PRESSURE_DIASTOLIC
BLOOD_PRESSURE_DIASTOLIC_MIN
BLOOD_PRESSURE_DIASTOLIC_MAX
New fields in UserProperties:
BODY_FAT
BODY_BONE_MASS
BODY_MASS_INDEX
Updated getIntegrationInitUrl. Now it accepts IntegrationInitConfig config object where you can pass:
redirectUri: will override the one set in admin console
state: when the authorization server redirects back to the client, it includes the state value originally sent
providerUserIdentifier: at the moment used (and required) only when integrating with ultrahuman
New provider: ultrahuman
When integrating with Ultrahuman, you have to provide Ultrahuman user email in IntegrationInitConfig.providerUserIdentifier. Example:
Additional check in getIntegrationInitUrl for email in ultrahuman integration
Updated native Android SDK Version to 4.2.82
Added IntegrationInitConfigUtils for usage in Flutter and React Native libraries
Additional check in getIntegrationInitUrl for email in ultrahuman integration
New provider: ultrahuman
When integrating with Ultrahuman, you have to provide ultrahuman user email in IntegrationInitConfig.providerUserIdentifier. Example:
🔴 Breaking Change: Update to Spike.createConnectionAPIv3. The methodSpike.createConnectionAPIv3({appId:, authToken:, customerEndUserId:}) has been updated to:Spike.createConnectionAPIv3({applicationId:, signature:, endUserId:})
The applicationId parameter must now be provided as an number.
The signature parameter now requires an HMAC-SHA256 signed user ID.
⚠️ Security Notice:
Do not store your HMAC signing key within the application itself, as this poses a security risk.
Instead, generate and provide the signature from your backend.
Legacy Support: For development purposes only, the previous connection flow remains available under the renamed method:
Spike.createConnectionAPIv3Legacy({appId:, authToken:, customerEndUserId:})
Android: Activity summary and activity stream can be called without granting all their permissions. Returned data depends on which permissions were provided.
Android: Android Permission requests are divided by data types.
SpikeConnection method checkPermissionsGranted now requires Spike data type.
SpikeConnection method requestHealthPermissions now requires Spike data type.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Spike API","colors":{"primary":"#0E2240","light":"#457CB1","dark":"#0E2240"},"logo":{"light":"https://mintcdn.com/trial-7e3c8695/C_wqhbtsn7F05yl4/images/logo.svg?fit=max\u0026auto=format\u0026n=C_wqhbtsn7F05yl4\u0026q=85\u0026s=435095cb4c721a082a83f3ad17fa156c","dark":"https://mintcdn.com/trial-7e3c8695/tLxMhymXagiR2q29/images/logo_dark.png?fit=max\u0026auto=format\u0026n=tLxMhymXagiR2q29\u0026q=85\u0026s=aefb879e0ea5a44c1272ae62eb37a3b9"},"favicon":"https://mintcdn.com/trial-7e3c8695/tLxMhymXagiR2q29/favicon.png?fit=max\u0026auto=format\u0026n=tLxMhymXagiR2q29\u0026q=85\u0026s=77e2f8f8b45fa7d39cf9304e409c6a1c","api":{"playground":{"display":"none"}},"navbar":{"links":[{"icon":"headset","href":"mailto:support@spikeapi.com","label":"Support"}],"primary":{"type":"button","label":"Admin Console","href":"https://admin.spikeapi.com/"}},"footer":{"socials":{"x":"https://x.com/spikeapi","linkedin":"https://www.linkedin.com/company/spike-api","website":"https://www.spikeapi.com/"}},"styling":{"eyebrows":"breadcrumbs","latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"trial-7e3c8695","hasAudioNarration":false,"actualSubdomain":"trial-7e3c8695","customDomains":["docs.spikeapi.com"],"gitSource":{"type":"github","owner":"spike-api","repo":"core-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a998e5e9b75209f69d7aef8","collectionId":"53afc8f8-aceb-435b-b145-ebe55f371353","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a998e5e9b75209f69d7aef8"},"entitlements":{},"buildId":"6a998e5e9b75209f69d7aef8","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"SDK Documentation","count":34},{"language":"default","tag":"API Documentation","count":31},{"language":"default","tag":"API Reference: Querying Data","count":9},{"language":"default","tag":"Android","count":9},{"language":"default","tag":"React Native","count":9},{"language":"default","tag":"API Reference: Nutrition AI","count":8},{"language":"default","tag":"Android SDK Documentation","count":8},{"language":"default","tag":"Flutter","count":8},{"language":"default","tag":"iOS","count":8},{"language":"default","tag":"React Native SDK Documentation","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--spike-primary: #A4C8FD;--spike-background: #F5F9FE;--spike-secondary: #0E2240;--spike-primary-hover: #457CB1;--spike-success: #025555;--spike-surface: #fff;--spike-text: #0E2240;--spike-text-muted: #457CB1;--spike-warning: #f59e0b;--spike-error: #ef4444}.nav-logo{height:2.5rem!important}html:not(.dark){body {\n font-family: Inter, sans-serif !important;\n }\n \n h1, h2, h3, h4, h5, h6, .heading {\n font-family: Poppins, Arial, sans-serif !important;\n color: var(--spike-text) !important;\n font-weight: 500 !important;\n -webkit-font-smoothing: antialiased !important;\n }\n \n .page-title {\n color: var(--spike-text) !important;\n }\n\n /* Global Background */\n body, html {\n background: var(--spike-background) !important;\n }\n\n /* Pagination styling - slightly grey background */\n #pagination a {\n background: var(--spike-background) !important; /* Light grey background */\n border-color: #e9ecef !important; /* Slightly darker grey border */\n }\n\n #pagination a:hover {\n background: #e9ecef !important; /* Darker grey on hover */\n border-color: #dee2e6 !important;\n }\n\n /* Content areas use spike-surface (white) - Official Mintlify selectors */\n #content-area, #content-container, #content-side-layout,\n #footer, #panel,\n .mdx-content, .almond-layout,\n .card, .card-group, .code-block, .code-group,\n .callout, .expandable, .frame, .panel,\n .accordion, .accordion-group, .steps, .step,\n .tabs, .tab, .field,\n /* Legacy and common selectors */\n .main-wrapper, .content-wrapper, .page-wrapper, .docs-wrapper,\n .main-content, .docs-content, .page-content, .article-content,\n .mintlify-content, .prose, .markdown-body,\n [class*=\"content\"], [class*=\"main\"], [class*=\"wrapper\"],\n /* Override common white/grey backgrounds */\n .bg-white, .bg-gray-50, .bg-slate-50, .bg-neutral-50, .bg-background {\n background: var(--spike-surface) !important;\n }\n\n /* Better space utilization for content container on large screens */\n @media (min-width: 1280px) {\n #content-container {\n max-width: 90% !important;\n }\n \n #content-container .max-w-5xl {\n max-width: none !important;\n }\n }\n\n @media (min-width: 1536px) {\n #content-container {\n max-width: 85% !important;\n }\n \n #content-container .max-w-5xl {\n max-width: none !important;\n }\n }\n\n @media (min-width: 1920px) {\n #content-container {\n max-width: 80% !important;\n }\n \n #content-container .max-w-5xl {\n max-width: none !important;\n }\n }\n\n /* Navbar Colors */\n #navbar {\n background: var(--spike-background) !important;\n box-shadow: rgba(14, 34, 64, 0.2) 0px 1px 7px 0px !important;\n }\n\n /* Override Mintlify navbar background layers */\n #navbar .bg-gray-950\\/\\[0\\.03\\],\n #navbar [class*=\"bg-gray\"] {\n background: transparent !important;\n }\n\n #navbar .bg-background-light,\n #navbar .dark\\:bg-background-dark,\n #navbar [class*=\"bg-background\"] {\n background: var(--spike-background) !important;\n }\n\n /* Remove any borders that might create grey lines */\n #navbar .border-gray-200,\n #navbar .dark\\:border-gray-800 {\n border-color: transparent !important;\n }\n\n .navbar-link {\n color: var(--spike-text) !important;\n }\n\n .navbar-link:hover {\n color: var(--spike-primary) !important;\n }\n\n /* Sidebar Colors */\n #sidebar {\n background: var(--spike-surface) !important;\n }\n\n .sidebar-title {\n color: var(--spike-secondary) !important;\n }\n\n .nav-anchor {\n color: var(--spike-text-muted) !important;\n }\n\n .nav-anchor:hover {\n color: var(--spike-primary) !important;\n background: var(--spike-primary-light) !important;\n }\n\n .nav-anchor.active {\n color: var(--spike-primary) !important;\n background: var(--spike-primary-light) !important;\n }\n /* Button Colors */\n .tryit-button, .topbar-cta-button {\n background: var(--spike-primary) !important;\n color: white !important;\n }\n\n .tryit-button:hover, .topbar-cta-button:hover {\n background: var(--spike-primary-hover) !important;\n }\n\n /* Method Pill Colors */\n .method-pill[data-method=\"get\"] {\n background: var(--spike-success) !important;\n color: white !important;\n }\n\n .method-pill[data-method=\"post\"] {\n background: var(--spike-primary) !important;\n color: white !important;\n }\n\n .method-pill[data-method=\"put\"] {\n background: var(--spike-warning) !important;\n color: white !important;\n }\n\n .method-pill[data-method=\"delete\"] {\n background: var(--spike-error) !important;\n color: white !important;\n }\n\n /* Code Block Colors */\n .code-block {\n background: var(--spike-surface) !important;\n }\n\n /* Card Colors */\n .card {\n background: var(--spike-surface) !important;\n }\n\n /* Table of Contents Colors */\n #table-of-contents {\n background: var(--spike-surface) !important;\n }\n\n .toc-item {\n color: var(--spike-text) !important;\n }\n\n .toc-item:hover {\n color: var(--spike-primary) !important;\n }\n\n /* Search Colors */\n #search-input, #search-bar-entry {\n background: var(--spike-surface) !important;\n }\n\n #search-input:focus, #search-bar-entry:focus {\n border-color: var(--spike-primary) !important;\n }\n\n /* Override search button background classes */\n #search-bar-entry.bg-background-light {\n background: var(--spike-surface) !important;\n }\n\n /* Pagination Colors */\n .pagination-next, .pagination-prev {\n color: var(--spike-text) !important;\n }\n\n .pagination-next:hover, .pagination-prev:hover {\n color: var(--spike-primary) !important;\n }}.mermaid svg .actor-bottom{display:none!important}html:not(.dark) .mermaid svg .actor rect{fill:var(--spike-background)!important;stroke:var(--spike-primary)!important}html:not(.dark) .mermaid rect.actor{fill:var(--spike-background)!important;stroke:var(--spike-primary)!important}html:not(.dark) .mermaid .actor{fill:var(--spike-background)!important;stroke:var(--spike-primary)!important}html:not(.dark) .mermaid svg .actor text{fill:var(--spike-secondary)!important}html:not(.dark) .mermaid svg text.actor{fill:var(--spike-secondary)!important}html:not(.dark) .mermaid svg text.actor-box{fill:var(--spike-secondary)!important}html:not(.dark) .mermaid svg .actor-line{stroke:var(--spike-primary-hover)!important}html:not(.dark) .mermaid svg .note{fill:var(--spike-surface)!important;stroke:var(--spike-primary)!important}html:not(.dark) .mermaid svg .labelBox{fill:var(--spike-surface)!important;stroke:var(--spike-primary-hover)!important}"}],"page":{"pagePath":"sdk-docs/react-native/changelog","slug":"/sdk-docs/react-native/changelog","pageMetadata":{"title":"React Native SDK Changelog","icon":"code-commit","sidebarTitle":"Changelog","description":"A changelog documenting version updates and changes of Spike SDK for React Native platform.","href":"/sdk-docs/react-native/changelog"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A changelog documenting version updates and changes of Spike SDK for React Native platform.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`If after updating you get errors while building the iOS app, please do the following:\n1.\n2. - delete old pods\n3. - install updated pods\n4. Open project in XCode and do a full clean: or`})}),`\n`,_jsx(Heading,{level:`1`,id:`spike-reactnative-sdk-changelog`,children:`Spike ReactNative SDK Changelog`}),`\n`,_jsx(Heading,{level:`2`,id:`4-8-23`,children:`4.8.23`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Activity and sleep request configurations now support additional `,_jsx(_components.code,{children:`MetricType`}),` values:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Activities: heart rate zone durations, power, powerMax`}),`\n`,_jsx(_components.li,{children:`Sleep: bedtimeDuration, sleepBreathingRate, sleepBreathingRateMin, sleepBreathingRateMax, wakeupLatency`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`Spike.createConnectionAPIv3WithAuthToken(authToken)`}),` to open a v3 connection from a JWT access token (for example after server-side HMAC auth). Use this when the app already has a Spike access token and should not perform HMAC signing on device.`,`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` connection`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Spike`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createConnectionAPIv3WithAuthToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`accessToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`]}),`\n`,_jsx(_components.li,{children:`Improved iOS HealthKit background delivery reliability`}),`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.8.22`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.8.21`})]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`Provider.googleHealth`})]}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`MetricType`}),`, `,_jsx(_components.code,{children:`StatisticsType`}),`, `,_jsx(_components.code,{children:`ActivityType`}),`, and `,_jsx(_components.code,{children:`ActivityTag`}),` values (heart rate zones, intensity durations, power, sleep breathing rate, ECG, and more)`]}),`\n`,_jsxs(_components.li,{children:[`Added Google Health `,_jsx(_components.code,{children:`ProviderSource`}),` values`]}),`\n`,_jsxs(_components.li,{children:[`Removed deprecated `,_jsx(_components.code,{children:`ProviderSource`}),` values`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-7-13`,children:`4.7.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Removed the deprecated v1/v2 connection API`}),`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.7.12`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.7.11`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-6-13`,children:`4.6.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.6.12`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.6.11`})]}),`\n`,_jsxs(_components.li,{children:[`Added nutrition support across HealthKit (iOS), Health Connect (Android), and Samsung Health Data (Android). You can now request nutrition permissions, backfill historical nutrition data, and include nutrition fields in background delivery by passing `,_jsx(_components.code,{children:`nutritionalFields`}),` to `,_jsx(_components.code,{children:`requestHealthPermissions`}),`, `,_jsx(_components.code,{children:`backfill`}),`, `,_jsx(_components.code,{children:`enableBackgroundDelivery`}),`, and `,_jsx(_components.code,{children:`requestPermissionsFromHealthKitAndBackfill`}),`.`,`\n`,_jsx(CodeBlock,{numberOfLines:`28`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`28`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.requestHealthPermissions({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` nutritionalFields: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.energyKcal,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.proteinG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.carbohydrateG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.fatTotalG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.backfill({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` nutritionalFields: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.energyKcal,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.proteinG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.carbohydrateG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.fatTotalG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` days: 7,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.enableBackgroundDelivery({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` nutritionalFields: [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.energyKcal,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.proteinG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.carbohydrateG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` NutritionalField.fatTotalG,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`getNutritionRecords({ from, to })`}),` now reads the latest local HealthKit / Health Connect / Samsung Health Data nutrition data before returning records when the corresponding integration is enabled.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BackgroundDeliveryConfig`}),` now exposes the `,_jsx(_components.code,{children:`nutritionalFields`}),` currently registered for background delivery.`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`close()`}),` on the v3 connection to disconnect from the SDK, release the native connection, and stop background delivery when it is enabled.`,`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.close();`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`IMPORTANT! If after updating you get errors while building iOS app please do following:`,`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`rm -rf ios/Pods/ ios/Podfile.lock`}),` - delete old pods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`cd ios; pod install --repo-update`}),` - install updated pods`]}),`\n`,_jsxs(_components.li,{children:[`Open project in XCode 26 and do a full clean: `,_jsx(_components.code,{children:`Product -> Clean build folder`}),` or `,_jsx(_components.code,{children:`Shift + Command + K`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-5-23`,children:`4.5.23`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.5.22`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.5.21`})]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.strong,{children:`backfill`}),` on the v3 connection to upload historical health data for a chosen number of days. Call it after you have granted the relevant permissions (HealthKit on iOS; Health Connect and/or Samsung Health Data on Android).`,`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.backfill({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` statisticTypes,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` metricTypes,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` activityConfigs: [activityConfig],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` sleepConfigs: [sleepConfig],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`iOS (HealthKit):`}),` added `,_jsx(_components.code,{children:`requestPermissionsFromHealthKitAndBackfill`}),` — requests read permissions for the given categories, then starts a backfill. Data for today and yesterday is pushed before the call resolves; older days continue in the background.`,`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await connection.requestPermissionsFromHealthKitAndBackfill({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` statisticTypes,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` metricTypes,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` activityConfigs: [activityConfig],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` sleepConfigs: [sleepConfig],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Android (Samsung Health Data):`}),` added `,_jsx(_components.code,{children:`requestPermissionsFromSamsungHealthDataAndBackfill`}),` — enables Samsung Health Data integration, requests permissions for the given categories, then starts a backfill.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Android (Health Connect):`}),` added `,_jsx(_components.code,{children:`requestPermissionsFromHealthConnectAndBackfill`}),` — enables Health Connect integration, requests permissions for the given categories, then starts a backfill.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`iOS:`}),` If the app fails to build after upgrading, remove `,_jsx(_components.code,{children:`ios/Pods`}),` and `,_jsx(_components.code,{children:`ios/Podfile.lock`}),`, then run `,_jsx(_components.code,{children:`pod install --repo-update`}),` in `,_jsx(_components.code,{children:`ios`}),`, and run clean from Xcode.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-5-13`,children:`4.5.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.5.12`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.5.11`})]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`RecordConfig`}),` for configuring records queries:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`includeSamples`}),` - whether to include samples (raw data points) in the response`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`getRecords`}),` to accept an optional `,_jsx(_components.code,{children:`RecordConfig`}),` parameter:`,`\n`,_jsx(CodeBlock,{numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`connection.getRecords({`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ofTypes: metricTypes,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` from: startDate,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` to: endDate,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` filter: new StatisticsFilter({ excludeManual: true }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` config: new RecordConfig({ includeSamples: true })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`})`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`IMPORTANT! If after updating you get errors while building iOS app please do following:`,`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`rm -rf ios/Pods/ ios/Podfile.lock`}),` - delete old pods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`cd ios; pod install --repo-update`}),` - install updated pods`]}),`\n`,_jsxs(_components.li,{children:[`Open project in XCode 26 and do a full clean: `,_jsx(_components.code,{children:`Product -> Clean build folder`}),` or `,_jsx(_components.code,{children:`Shift + Command + K`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-4-13`,children:`4.4.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.4.12`})]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.4.11`})]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`Unit`}),` enum with new values:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added: `,_jsx(_components.code,{children:`miles`}),`, `,_jsx(_components.code,{children:`mPerSec`}),`, `,_jsx(_components.code,{children:`fahrenheit`}),`, `,_jsx(_components.code,{children:`ms`}),`, `,_jsx(_components.code,{children:`seconds`}),`, `,_jsx(_components.code,{children:`degrees`}),`, `,_jsx(_components.code,{children:`sleepStage`}),`, `,_jsx(_components.code,{children:`secPerM`}),`, `,_jsx(_components.code,{children:`rpm`}),`, `,_jsx(_components.code,{children:`spm`}),`, `,_jsx(_components.code,{children:`breathsPerMin`}),`, `,_jsx(_components.code,{children:`g`}),`, `,_jsx(_components.code,{children:`lbs`}),`, `,_jsx(_components.code,{children:`st`}),`, `,_jsx(_components.code,{children:`mmHg`}),`, `,_jsx(_components.code,{children:`mLPerKgPerMin`}),`, `,_jsx(_components.code,{children:`uV`}),`, `,_jsx(_components.code,{children:`mgPerDl`}),`, `,_jsx(_components.code,{children:`w`})]}),`\n`,_jsxs(_components.li,{children:[`Removed: `,_jsx(_components.code,{children:`kmh`}),`, `,_jsx(_components.code,{children:`kmPerMin`})]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`Improved data communication with API`}),`\n`,_jsxs(_components.li,{children:[`Enhanced the `,_jsx(_components.code,{children:`getSleep`}),` endpoint.\nImportant:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Dates provided are now interpreted as dates only; the time component is ignored when querying the API.`}),`\n`,_jsx(_components.li,{children:`The primary night sleep period is associated with the calendar date on which it ends.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-233`,children:`4.3.233`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed nutrition record data so that `,_jsx(_components.code,{children:`nutritionalFields`}),` keys in ingredients and records match the `,_jsx(_components.code,{children:`NutritionalField`}),` enum values. You can now look up values using `,_jsx(_components.code,{children:`ingredient.nutritionalFields[NutritionalField.energyKcal]`}),` and similar expressions as intended.`]}),`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.3.142`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Internal improvements`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated iOS SDK to `,_jsx(_components.code,{children:`4.3.161`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Better Nutrition Facts Label Recognition response parsing`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-223`,children:`4.3.223`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Nutrition record and ingredient helpers are now methods on utils objects instead of standalone exports.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordUtils.withIngredient(record, ingredient)`}),` instead of `,_jsx(_components.code,{children:`withIngredient(record, ingredient)`})]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordUtils.withoutIngredient(record, ingredient)`}),` instead of `,_jsx(_components.code,{children:`withoutIngredient(record, ingredient)`})]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordUtils.withServingSize(record, servingSize, unit)`}),` instead of `,_jsx(_components.code,{children:`withServingSize(record, servingSize, unit)`})]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordIngredientUtils.withNutritionalField(ingredient, field, value)`}),` instead of `,_jsx(_components.code,{children:`withNutritionalField(ingredient, field, value)`})]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordIngredientUtils.withoutNutritionalField(ingredient, field)`}),` instead of `,_jsx(_components.code,{children:`withoutNutritionalField(ingredient, field)`})]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`NutritionRecordIngredientUtils.withScaledServingSize(ingredient, newServingSize)`}),` instead of `,_jsx(_components.code,{children:`withScaledServingSize(ingredient, newServingSize)`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-213`,children:`4.3.213`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`MetricType: added namespace with metric allowlists for API requests:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MetricType.availableForRecordsRequest`}),` – metrics accepted by records API request`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MetricType.availableForActivitiesRequest`}),` – metrics accepted by activities API request`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MetricType.availableForSleepRequest`}),` – metrics accepted by sleep API request`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MetricType.availableForPersonRequest`}),` – metrics accepted by person API request`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.151`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved data push to API`}),`\n`,_jsx(_components.li,{children:`Fixed workout digest generation for caching`}),`\n`,_jsx(_components.li,{children:`Improved client cache configuration`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-203`,children:`4.3.203`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Android SDK to `,_jsx(_components.code,{children:`4.3.132`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Samsung Health Data Integration - Major Expansion:`}),`\n`,_jsxs(_components.li,{children:[`Added support for reading and pushing the following data types from Samsung Health:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Workouts (exercises)`}),`\n`,_jsx(_components.li,{children:`Sleep data`}),`\n`,_jsx(_components.li,{children:`Body composition data (weight, height, BMI, body fat)`}),`\n`,_jsx(_components.li,{children:`User profile data (weight, height, birth date, gender)`}),`\n`,_jsx(_components.li,{children:`Blood pressure measurements`}),`\n`,_jsx(_components.li,{children:`Skin temperature measurements`}),`\n`,_jsx(_components.li,{children:`Heart rate measurements`}),`\n`,_jsx(_components.li,{children:`Blood oxygen saturation (SpO2) measurements`}),`\n`,_jsx(_components.li,{children:`Body temperature measurements`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`More efficient Samsung Health Data pushes`}),`\n`,_jsx(_components.li,{children:`Large Samsung Health Data pushes are now automatically split into smaller chunks for reliable delivery`}),`\n`,_jsx(_components.li,{children:`Large Health Connect pushes are now automatically split into smaller chunks for reliable delivery`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-193`,children:`4.3.193`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added Nutrition Facts Label Recognition for extracting nutritional information from label photos.\nFor more information please visit our `,_jsx(_components.a,{href:`https://docs.spikeapi.com`,children:`documentation`}),`.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`recognizeNutritionFactsLabel({ imageBase64, config? })`}),` - Analyze a nutrition facts label image and extract nutritional data`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added methods for manual nutrition record management:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`createNutritionRecord({ nutritionRecord })`}),` - Insert a new nutrition record with custom data`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`replaceNutritionRecord({ nutritionRecord })`}),` - Replace an existing nutrition record completely`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`NutritionRecordUtils`}),` for creating and manipulating nutrition records:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NutritionRecordUtils.create(options)`}),` - Create a new nutrition record with specified properties`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withIngredient(record, ingredient)`}),` - Add an ingredient to a record`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withoutIngredient(record, ingredient)`}),` - Remove an ingredient from a record`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withServingSize(record, servingSize, unit)`}),` - Update serving size and unit`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`NutritionRecordIngredientUtils`}),` for creating and manipulating ingredients:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NutritionRecordIngredientUtils.create(options)`}),` - Create a new nutrition record ingredient`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withNutritionalField(ingredient, nutritionalField, value)`}),` - Set a nutritional field value`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withoutNutritionalField(ingredient, nutritionalField)`}),` - Remove a nutritional field`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`withScaledServingSize(ingredient, newServingSize)`}),` - Scale serving size and nutritional values proportionally`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Moved metadata out of `,_jsx(_components.code,{children:`NutritionRecord`}),` into `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NutritionRecord`}),` no longer contains `,_jsx(_components.code,{children:`status`}),` and `,_jsx(_components.code,{children:`failureReason`}),` fields`]}),`\n`,_jsxs(_components.li,{children:[`These fields are now part of `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NutritionRecordAnalysisResult`}),` now has a `,_jsx(_components.code,{children:`nutritionRecord`}),` field containing the nutrition data`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Nutrition API methods now return `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`analyzeNutrition()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`getNutritionRecords()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult[]`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`getNutritionRecord()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult | null`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`updateNutritionRecordServingSize()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`createNutritionRecord()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`replaceNutritionRecord()`}),` - returns `,_jsx(_components.code,{children:`NutritionRecordAnalysisResult`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.122`})]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.141`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`IMPORTANT! If after updating you get errors while building iOS app please do following:`,`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`rm -rf ios/Pods/ ios/Podfile.lock`}),` - delete old pods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`cd ios; pod install --repo-update`}),` - install updated pods`]}),`\n`,_jsxs(_components.li,{children:[`Open project in XCode 26 and do a full clean: `,_jsx(_components.code,{children:`Product -> Clean build folder`}),` or `,_jsx(_components.code,{children:`Shift + Command + K`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-183`,children:`4.3.183`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added Nutrition AI features for analyzing food images. For more information please visit our `,_jsx(_components.a,{href:`https://docs.spikeapi.com`,children:`documentation`}),`.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`analyzeNutrition({ imageBase64, consumedAt?, config? })`}),` - Analyze food image synchronously and wait for results`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`submitNutritionForAnalysis({ imageBase64, consumedAt?, config? })`}),` - Analyze food image asynchronously, returns record ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`getNutritionRecords({ from, to })`}),` - Retrieve nutrition records for a date range`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`getNutritionRecord({ id })`}),` - Get a specific nutrition record by ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`deleteNutritionRecord({ id })`}),` - Delete a nutrition record`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`updateNutritionRecordServingSize({ id, servingSize })`}),` - Update serving size for a nutrition record`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`Provider`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`luna`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`ProviderSource`}),` types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`fitbitSkinTemperatureSummary`}),`\n`,_jsx(_components.li,{children:`garminWellnessSkinTemperatureSummary`}),`\n`,_jsx(_components.li,{children:`lunaSleep`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`ProviderSource`}),` types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`fitbitUserActivitiesList`}),`\n`,_jsx(_components.li,{children:`fitbitUserActivitiesDate`}),`\n`,_jsx(_components.li,{children:`fitbitUserActivitiesHeartDate`}),`\n`,_jsx(_components.li,{children:`fitbitUserActivitiesHeartDateInterday`}),`\n`,_jsx(_components.li,{children:`withingsMeasureGetWorkouts`}),`\n`,_jsx(_components.li,{children:`withingsMeasureGetActivity`}),`\n`,_jsx(_components.li,{children:`withingsMeasureGetMeas`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`ActivityTag`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`onBicycle`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Removed `,_jsx(_components.code,{children:`Provider`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`wahoo`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.112`})]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.131`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-173`,children:`4.3.173`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.102`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Enable Health Connect integration in the admin console right after enabling integration`}),`\n`,_jsx(_components.li,{children:`Enable Samsung Health Data integration in the admin console right after enabling integration`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.121`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Enable HealthKit integration in the admin console right after requesting permissions`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-163`,children:`4.3.163`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added ability to read mindfulness activities:`}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`spikeConnection.getActivities(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` config: ActivityConfig(activityCategories: [ActivityCategory.mindfulness])`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` from: dateFrom,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` to: dateTo`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added ability to check Android Health Connect features availability:`}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`const isMindfulessAvailable = spikeConnection.isHealthConnectFeatureAvailable(HealthConnectFeature.FEATURE_MINDFULNESS_SESSION)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added new ActivityTag types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`mindfulness`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new ActivityType types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`ecgMeasurement`}),`\n`,_jsx(_components.li,{children:`triathlon`}),`\n`,_jsx(_components.li,{children:`biathlon`}),`\n`,_jsx(_components.li,{children:`duathlon`}),`\n`,_jsx(_components.li,{children:`rollerblading`}),`\n`,_jsx(_components.li,{children:`skateboarding`}),`\n`,_jsx(_components.li,{children:`skating`}),`\n`,_jsx(_components.li,{children:`calisthenics`}),`\n`,_jsx(_components.li,{children:`weightLifting`}),`\n`,_jsx(_components.li,{children:`canoeing`}),`\n`,_jsx(_components.li,{children:`floorball`}),`\n`,_jsx(_components.li,{children:`jiuJitsu`}),`\n`,_jsx(_components.li,{children:`diving`}),`\n`,_jsx(_components.li,{children:`orienteering`}),`\n`,_jsx(_components.li,{children:`bootcamp`}),`\n`,_jsx(_components.li,{children:`motorsports`}),`\n`,_jsx(_components.li,{children:`horseriding`}),`\n`,_jsx(_components.li,{children:`paragliding`}),`\n`,_jsx(_components.li,{children:`multisport`}),`\n`,_jsx(_components.li,{children:`bloodTest`}),`\n`,_jsx(_components.li,{children:`mindfulnessSession`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new ProviderSource types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`appleHealthkitMindfulness`}),`\n`,_jsx(_components.li,{children:`healthConnectMindfulnessSession`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added a new ActivityCategory type:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`mindfulness`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.92`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated Health connect to `,_jsx(_components.code,{children:`1.1.0-rc03`})]}),`\n`,_jsxs(_components.li,{children:[`Updated compileSdk to `,_jsx(_components.code,{children:`36`})]}),`\n`,_jsxs(_components.li,{children:[`Updated gradle to `,_jsx(_components.code,{children:`8.13`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.111`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-153`,children:`4.3.153`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added documentation`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-143`,children:`4.3.143`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixed building iOS on Expo 54+ with New Architecture`}),`\n`,_jsx(_components.li,{children:`Updated Expo android manifest script`}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.82`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Workaround for the Android 15 bug to make background delivery more resilient`}),`\n`,_jsx(_components.li,{children:`More efficient pushes to Spike API`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-133`,children:`4.3.133`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`Spike.setLogCallback()`}),` method to receive logs from the native SDK:`]}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`await Spike.setLogCallback((level, message) => {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` if (level === LogLevel.verbose) {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` return`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:\" console.log(`[SpikeSDK.${level.toUpperCase()}] ${message}`);\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`});`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed `,_jsx(_components.code,{children:`getBackgroundDeliveryConfig()`}),` method to be `,_jsx(_components.code,{children:`async getBackgroundDeliveryConfig(): Promise\u003cBackgroundDeliveryConfig | null>`})]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.72`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Allow reading `,_jsx(_components.code,{children:`SPO2`}),` and `,_jsx(_components.code,{children:`SWIMMING_LENGTHS`}),` in `,_jsx(_components.code,{children:`getActivities`})]}),`\n`,_jsxs(_components.li,{children:[`Allow reading `,_jsx(_components.code,{children:`SPO2`}),` and `,_jsx(_components.code,{children:`SKIN_TEMPERATURE`}),` in `,_jsx(_components.code,{children:`getSleeps`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.101`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved how sleep data is read for sleep score`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-123`,children:`4.3.123`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.62`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Optimized background delivery`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-113`,children:`4.3.113`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`.coros`}),` `,_jsx(_components.code,{children:`Provider`})]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`ProviderSource`}),` enum`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.52`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`Provider.COROS`})]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`ProviderSource`}),` enum`]}),`\n`,_jsxs(_components.li,{children:[`Added new Statistic types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`STRESS_SCORE`}),`\n`,_jsx(_components.li,{children:`RECOVERY_SCORE`}),`\n`,_jsx(_components.li,{children:`ACTIVITY_SCORE`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new Metric types for `,_jsx(_components.code,{children:`getSleep`}),` request:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`SLEEP_DURATION`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_AWAKE`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_DEEP`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_LIGHT`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_NAP`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_REM`}),`\n`,_jsx(_components.li,{children:`SLEEP_EFFICIENCY`}),`\n`,_jsx(_components.li,{children:`SLEEP_INTERRUPTIONS`}),`\n`,_jsx(_components.li,{children:`SLEEP_LATENCY`}),`\n`,_jsx(_components.li,{children:`SLEEP_SCORE`}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.91`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`.coros`}),` `,_jsx(_components.code,{children:`Provider`})]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`ProviderSource`}),` enum`]}),`\n`,_jsx(_components.li,{children:`Improved the way data is sent to API to reduce the size and speed of calls to Spike`}),`\n`,_jsxs(_components.li,{children:[`Added new Statistic types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`stressScore`}),`\n`,_jsx(_components.li,{children:`recoveryScore`}),`\n`,_jsx(_components.li,{children:`activityScore`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new Metric types for `,_jsx(_components.code,{children:`getSleep`}),` request:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`sleepDuration`}),`\n`,_jsx(_components.li,{children:`sleepDurationAwake`}),`\n`,_jsx(_components.li,{children:`sleepDurationDeep`}),`\n`,_jsx(_components.li,{children:`sleepDurationLight`}),`\n`,_jsx(_components.li,{children:`sleepDurationNap`}),`\n`,_jsx(_components.li,{children:`sleepDurationRem`}),`\n`,_jsx(_components.li,{children:`sleepEfficiency`}),`\n`,_jsx(_components.li,{children:`sleepInterruptions`}),`\n`,_jsx(_components.li,{children:`sleepLatency`}),`\n`,_jsx(_components.li,{children:`sleepScore`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Better keychain compatibility\nNOTE: If you use the keychain in your app with a service name equal to your bundle\nidentifier, please check if it contains key named `,_jsx(_components.code,{children:`spikeApiToken`}),` and delete it.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-103`,children:`4.3.103`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New metric type:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`glucose`})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.42`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`MetricType.GLUCOSE`}),` available in both Health Connect and Samsung Health`]}),`\n`,_jsx(_components.li,{children:`Update Samsung Health Data SDK to version 1.0.0 (available only on Android 29+)`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.81`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`MetricType`}),`: `,_jsx(_components.code,{children:`.glucose`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-93`,children:`4.3.93`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The old `,_jsx(_components.code,{children:`SpikeSDK`}),` API has been deprecated`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`disableHealthKitIntegration`}),` and `,_jsx(_components.code,{children:`isHealthKitIntegrationEnabled`}),` functions for iOS HealthKit`]}),`\n`,_jsxs(_components.li,{children:[`Update Android SDK to `,_jsx(_components.code,{children:`4.3.32`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Switch to protobuf java-lite 3.25.5 for better compatibility with firebase`}),`\n`,_jsxs(_components.li,{children:[`The old `,_jsx(_components.code,{children:`SpikeSDK`}),` API has been deprecated`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Update iOS SDK to `,_jsx(_components.code,{children:`4.3.71`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The old `,_jsx(_components.code,{children:`SpikeSDK`}),` API has been deprecated`]}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`disableHealthKitIntegration`}),` and `,_jsx(_components.code,{children:`isHealthKitIntegrationEnabled`}),` functions in spike connection`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-83`,children:`4.3.83`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`New providers added: dexcom, freestyleLibre, huawei, strava`}),`\n`,_jsx(_components.li,{children:`Added .distanceSwimming into the list of metrics available in activities`}),`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.61`})]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.3.22`})]}),`\n`,_jsx(_components.li,{children:`Fixed prop names in SpikeRecord and Statistic data models`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-73`,children:`4.3.73`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Updated React native to 0.79`}),`\n`,_jsxs(_components.li,{children:[`Enhanced Expo support:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added a plugin to automatically configure the Android app by updating the necessary fields in `,_jsx(_components.code,{children:`build.gradle`}),` files and `,_jsx(_components.code,{children:`AndroidManifest.xml`}),`, including handling specified permissions.`]}),`\n`,_jsx(_components.li,{children:`Enabled configuration of iOS HealthKit permission texts directly from the plugin settings.`}),`\n`,_jsx(_components.li,{children:`Added support for enabling background delivery via plugin configuration.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Config entry example for `,_jsx(_components.code,{children:`app.json`}),`:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`18`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"react-native-spike-sdk\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"ios\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"healthSharePermission\": \"$(PRODUCT_NAME) needs access to read your health data\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"healthUpdatePermission\": \"$(PRODUCT_NAME) needs permission to save health data\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"isBackgroundDeliveryEnabled\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"android\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"healthConnectPermissions\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"android.permission.health.READ_BASAL_METABOLIC_RATE\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"android.permission.health.READ_WEIGHT\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"isBackgroundDeliveryEnabled\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-63`,children:`4.3.63`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added Samsung Health Integration on Android`}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.3.12`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`New statistics for Health Connect:`}),`\n`,_jsx(_components.li,{children:`HEARTRATE`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MAX`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MIN`}),`\n`,_jsx(_components.li,{children:`New metrics for Health Connect:`}),`\n`,_jsx(_components.li,{children:`HEARTRATE`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MAX`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MIN`}),`\n`,_jsx(_components.li,{children:`Improved transport protocol for even faster requests to Spike API`}),`\n`,_jsx(_components.li,{children:`Added Samsung Health Integration for:`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`StatisticType`}),`s:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`STEPS`}),`\n`,_jsx(_components.li,{children:`DISTANCE_TOTAL`}),`\n`,_jsx(_components.li,{children:`CALORIES_BURNED_ACTIVE`}),`\n`,_jsx(_components.li,{children:`CALORIES_BURNED_TOTAL`}),`\n`,_jsx(_components.li,{children:`CALORIES_BURNED_BASAL`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`Provider`}),`:`]}),`\n`,_jsx(_components.li,{children:`SAMSUNG_HEALTH_DATA`}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`ProviderSource`}),`:`]}),`\n`,_jsx(_components.li,{children:`SAMSUNG_HEALTH_DATA_AGGREGATION`}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`MetricType`}),`s:`]}),`\n`,_jsx(_components.li,{children:`SLEEP_BREATHING_RATE to BREATHING_RATE`}),`\n`,_jsx(_components.li,{children:`SLEEP_BREATHING_RATE_MIN to BREATHING_RATE_MIN`}),`\n`,_jsx(_components.li,{children:`SLEEP_BREATHING_RATE_MAX to BREATHING_RATE_MAX`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.51`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`Provider`}),`:`]}),`\n`,_jsx(_components.li,{children:`samsungHealthData`}),`\n`,_jsxs(_components.li,{children:[`Added new `,_jsx(_components.code,{children:`ProviderSource`}),`:`]}),`\n`,_jsx(_components.li,{children:`samsungHealthDataAggregation`}),`\n`,_jsxs(_components.li,{children:[`Renamed `,_jsx(_components.code,{children:`MetricTypes`}),`:`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sleepBreathingRate`}),` to `,_jsx(_components.code,{children:`breathingRate`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sleepBreathingRateMin`}),` to `,_jsx(_components.code,{children:`breathingRateMin`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sleepBreathingRateMax`}),` to `,_jsx(_components.code,{children:`breathingRateMax`})]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-53`,children:`4.3.53`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Catch all exception types in the Android module`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-43`,children:`4.3.43`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added missing parameter in `,_jsx(_components.code,{children:`getHealthConnectPermissions`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-33`,children:`4.3.33`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.31`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improve how statistics are read from HealthKit`}),`\n`,_jsxs(_components.li,{children:[`New metric types:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`bodyFat`}),`\n`,_jsx(_components.li,{children:`bodyFatMax`}),`\n`,_jsx(_components.li,{children:`bodyFatMin`}),`\n`,_jsx(_components.li,{children:`bodyBoneMass`}),`\n`,_jsx(_components.li,{children:`bodyMassIndex`}),`\n`,_jsx(_components.li,{children:`bloodPressureSystolic`}),`\n`,_jsx(_components.li,{children:`bloodPressureSystolicMax`}),`\n`,_jsx(_components.li,{children:`bloodPressureSystolicMin`}),`\n`,_jsx(_components.li,{children:`bloodPressureDiastolic`}),`\n`,_jsx(_components.li,{children:`bloodPressureDiastolicMax`}),`\n`,_jsx(_components.li,{children:`bloodPressureDiastolicMin`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`New fields in `,_jsx(_components.code,{children:`UserProperties`}),`:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`bodyBoneMass`}),`\n`,_jsx(_components.li,{children:`bodyFat`}),`\n`,_jsx(_components.li,{children:`bodyMassIndex`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`getIntegrationInitUrl`}),`. Now it accepts `,_jsx(_components.code,{children:`IntegrationInitConfig`}),` config object where you can pass:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`redirectUri`}),`: will override the one set in admin console`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`state`}),`: when the authorization server redirects back to the client, it includes the `,_jsx(_components.code,{children:`state`}),` value originally sent`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`providerUserIdentifier`}),`: at the moment used (and required) only when integrating with ultrahuman`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`New provider: `,_jsx(_components.code,{children:`ultrahuman`}),`\nWhen integrating with Ultrahuman, you have to provide ultrahuman user email in `,_jsx(_components.code,{children:`IntegrationInitConfig.providerUserIdentifier`}),`. Example:`,`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`spikeConnection.getIntegrationInitUrl(provider: .ultrahuman, config: IntegrationInitConfig(providerUserIdentifier: \"user@mail.com\"))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsx(_components.li,{children:`Improved transport protocol for background delivery`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.2.72`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`MetricType`}),`s added:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`BODY_FAT`}),`\n`,_jsx(_components.li,{children:`BODY_FAT_MAX`}),`\n`,_jsx(_components.li,{children:`BODY_FAT_MIN`}),`\n`,_jsx(_components.li,{children:`BODY_BONE_MASS`}),`\n`,_jsx(_components.li,{children:`BODY_MASS_INDEX`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_SYSTOLIC`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_SYSTOLIC_MIN`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_SYSTOLIC_MAX`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_DIASTOLIC`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_DIASTOLIC_MIN`}),`\n`,_jsx(_components.li,{children:`BLOOD_PRESSURE_DIASTOLIC_MAX`}),`\n`,_jsxs(_components.li,{children:[`New fields in `,_jsx(_components.code,{children:`UserProperties`}),`:`]}),`\n`,_jsx(_components.li,{children:`BODY_FAT`}),`\n`,_jsx(_components.li,{children:`BODY_BONE_MASS`}),`\n`,_jsx(_components.li,{children:`BODY_MASS_INDEX`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`getIntegrationInitUrl`}),`. Now it accepts `,_jsx(_components.code,{children:`IntegrationInitConfig`}),` config object where you can pass:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`redirectUri`}),`: will override the one set in admin console`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`state`}),`: when the authorization server redirects back to the client, it includes the `,_jsx(_components.code,{children:`state`}),` value originally sent`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`providerUserIdentifier`}),`: at the moment used (and required) only when integrating with ultrahuman`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`New provider: `,_jsx(_components.code,{children:`ultrahuman`}),`\nWhen integrating with Ultrahuman, you have to provide Ultrahuman user email in `,_jsx(_components.code,{children:`IntegrationInitConfig.providerUserIdentifier`}),`. Example:`,`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`spikeConnection.getIntegrationInitUrl(provider = Provider.ULTRAHUMAN, config = IntegrationInitConfig(providerUserIdentifier = \"user@mail.com\"))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.41`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`IntegrationInitConfig is now codable`}),`\n`,_jsxs(_components.li,{children:[`Additional check in `,_jsx(_components.code,{children:`getIntegrationInitUrl`}),` for email in ultrahuman integration`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.2.82`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`IntegrationInitConfigUtils`}),` for usage in Flutter and React Native libraries`]}),`\n`,_jsxs(_components.li,{children:[`Additional check in `,_jsx(_components.code,{children:`getIntegrationInitUrl`}),` for email in ultrahuman integration`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`New provider: `,_jsx(_components.code,{children:`ultrahuman`}),`\nWhen integrating with Ultrahuman, you have to provide ultrahuman user email in `,_jsx(_components.code,{children:`IntegrationInitConfig.providerUserIdentifier`}),`. Example:`,`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`spikeConnection.getIntegrationInitUrl(provider: .ultrahuman, config: {providerUserIdentifier: \"user@mail.com\"})`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-23`,children:`4.3.23`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.21`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improve how statistics are read from HealthKit`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.2.62`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added consumer proguard rules`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-3-13`,children:`4.3.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to `,_jsx(_components.code,{children:`4.3.11`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved transport protocol for even faster requests to Spike API`}),`\n`,_jsx(_components.li,{children:`New statistics: heartrate, heartrateMax, heartrateMin, heartrateResting`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to `,_jsx(_components.code,{children:`4.2.52`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New statistics:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`HEARTRATE_RESTING`}),`\n`,_jsx(_components.li,{children:`SLEEP_DURATION_TOTAL`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`New statistics (only from non-HealthConnect providers):`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`HEARTRATE`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MIN`}),`\n`,_jsx(_components.li,{children:`HEARTRATE_MAX`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`Metric types updates`}),`\n`,_jsx(_components.li,{children:`Better proguard settings for uniqueness of generated class names`}),`\n`,_jsx(_components.li,{children:`Fix for statistics in different time zones`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-73`,children:`4.2.73`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Updated readme file`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-63`,children:`4.2.63`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to iOS 4.2.41`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fix date format in JSON push`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-53`,children:`4.2.53`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed typo in method name: `,_jsx(_components.code,{children:`getGrantedHealthKitPermissions`}),` in now properly called `,_jsx(_components.code,{children:`getGrantedHealthConnectPermissions`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-43`,children:`4.2.43`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add support for React Native New Architecture (interop)`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-33`,children:`4.2.33`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New metrics:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`spo2`}),`\n`,_jsx(_components.li,{children:`bodyTemperature`}),`\n`,_jsx(_components.li,{children:`skinTemperature (available only on getSleep())`}),`\n`,_jsx(_components.li,{children:`sleepBreathingRate (available only on getSleep())`}),`\n`,_jsx(_components.li,{children:`sleepBreathingRateMin (available only on getSleep())`}),`\n`,_jsx(_components.li,{children:`sleepBreathingRateMax (available only on getSleep())`}),`\n`,_jsx(_components.li,{children:`sleepBreathingRateAvg (available only on getSleep())`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`Updated native iOS SDK Version to iOS 4.2.31`}),`\n`,_jsx(_components.li,{children:`Updated native Android SDK Version to 4.2.42`}),`\n`,_jsx(_components.li,{children:`Added sleepScore property in the Record type`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-23`,children:`4.2.23`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New metric: `,_jsx(_components.code,{children:`vo2Max`}),` available in `,_jsx(_components.code,{children:`getRecords`}),` and `,_jsx(_components.code,{children:`getActivities`})]}),`\n`,_jsxs(_components.li,{children:[`Changed hrv metric names: `,_jsx(_components.code,{children:`hrvRmssd`}),`, `,_jsx(_components.code,{children:`hrvSdnn`})]}),`\n`,_jsxs(_components.li,{children:[`New statistic: `,_jsx(_components.code,{children:`sleepScore`})]}),`\n`,_jsxs(_components.li,{children:[`Updated native iOS SDK Version to iOS 4.2.21`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`getUserProperties`}),` method for reading: weight, height, timezone, birthdate, gender`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Updated native Android SDK Version to 4.2.32`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`getUserProperties`}),` method for reading: weight, height, timezone from Health Connect`]}),`\n`,_jsxs(_components.li,{children:[`New `,_jsx(_components.code,{children:`getUserProperties`}),` method for reading: birthdate, gender from other providers`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-2-13`,children:`4.2.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Android Spike SDK: 4.2.12`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`iOS Spike SDK: 4.2.11`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`🔴 Breaking Change: Update to `,_jsx(_components.code,{children:`Spike.createConnectionAPIv3`}),`. The method`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Spike.createConnectionAPIv3({appId:, authToken:, customerEndUserId:})`}),` has been updated to:`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.code,{children:`Spike.createConnectionAPIv3({applicationId:, signature:, endUserId:})`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`applicationId`}),` parameter must now be provided as an `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`number`})}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`signature`}),` parameter now requires an `,_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`HMAC-SHA256`}),` signed user ID`]}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`⚠️ `,_jsx(_components.strong,{children:`Security Notice:`})]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Do not store your HMAC signing key within the application itself`}),`, as this poses a security risk.`]}),`\n`,_jsx(_components.li,{children:`Instead, generate and provide the signature from your backend.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Legacy Support`}),`: For `,_jsx(_components.strong,{children:`development purposes only`}),`, the previous connection flow remains available under the renamed method:\n`,_jsx(_components.code,{children:`Spike.createConnectionAPIv3Legacy({appId:, authToken:, customerEndUserId:})`})]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-1-23`,children:`4.1.23`}),`\n`,_jsx(_components.p,{children:`Fixed TypeScript definitions`}),`\n`,_jsx(Heading,{level:`2`,id:`4-1-13`,children:`4.1.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Background delivery`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Android Spike SDK: 4.1.12`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add background delivery (see documentation for more information)`}),`\n`,_jsx(_components.li,{children:`Health Connect library updated to 1.1.0-alpha11`}),`\n`,_jsx(_components.li,{children:`Compile SDK and target SDK updated to 35`}),`\n`,_jsx(_components.li,{children:`Updated kotlin version to 1.9.25`}),`\n`,_jsx(_components.li,{children:`Updated other dependencies`}),`\n`,_jsx(_components.li,{children:`Add log callback`}),`\n`,_jsx(_components.li,{children:`Update gradle to 8.8.0`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`iOS Spike SDK: 4.1.11`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add background delivery`}),`\n`,_jsx(_components.li,{children:`Add log callback`}),`\n`,_jsx(_components.li,{children:`Send more sleep data`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-0-23`,children:`4.0.23`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 4.0.22`}),`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 4.0.11`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`4-0-13`,children:`4.0.13`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 4.0.12`}),`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 4.0.11`}),`\n`,_jsx(_components.li,{children:`Completely new SDK! Please see our official documentation for more details and usage instructions`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-8`,children:`2.5.8`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.4.5`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.1.6`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Update steps intraday to better check for manual entries`}),`\n`,_jsx(_components.li,{children:`Android: Add permissions specific to steps_intraday`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-7`,children:`2.5.7`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.4.5`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.1.5`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: check for permissions before reading additional sleep data`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-6`,children:`2.5.6`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.4.5`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.1.4`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: update to the newest SDK version`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-5`,children:`2.5.5`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.1.1`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.5`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: update to the newest SDK version`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-4`,children:`2.5.4`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.1.1`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.4`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Read more distance fields in a workout object from HealthKit`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-3`,children:`2.5.3`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.1.1`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Pin iOS SDK version`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-2`,children:`2.5.2`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Add customer user id validation`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.1.1`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Better way to authenticate with API`}),`\n`,_jsx(_components.li,{children:`Android: Add saved session validation before connection is established`}),`\n`,_jsx(_components.li,{children:`Android: Add customer user id validation.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-1`,children:`2.5.1`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.19`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.1`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Fix an issue when the timezone changes while the app is running.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-5-0`,children:`2.5.0`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.19`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.4.0`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Add ECG data type.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-4-5`,children:`2.4.5`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.3.2`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.19`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Android: Fix an issue caused by calling `,_jsx(_components.code,{children:`SpikeSDK`}),` methods from different threads at the same time.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-4-4`,children:`2.4.4`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.19`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.3.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`iOS: Fix an issue caused by calling `,_jsx(_components.code,{children:`SpikeSDK`}),` methods from different threads at the same time.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-4-3`,children:`2.4.3`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.3.2`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.19`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add Background deliveries support for Expo-managed projects.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-4-2`,children:`2.4.2`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.19`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.3.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Add trigger extractAndPostData request done from the background.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-4-1`,children:`2.4.1`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.19`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.3.1`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Send cycling parameters with Activities stream data`}),`\n`]}),`\n`]}),`\n`,_jsx(_components.li,{children:`PROD \u0026 DEV environments are no longer supported.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-7`,children:`2.3.7`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.2.3`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.19`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Add new logic for detecting changes in intraday_steps metadata.`}),`\n`,_jsx(_components.li,{children:`Android: Add safeguard for to handle multiple sources of sleep data and avoid illogical values.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-6`,children:`2.3.6`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.17`}),`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.2.3`}),`\n`,_jsx(_components.li,{children:`Add providerTimestamp to Activities Summary data model.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-5`,children:`2.3.5`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.17`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Remove the limitation that prevented values from being sent when the requested period is more than a day.`}),`\n`,_jsx(_components.li,{children:`Android: Now calculating stage time by stages in sleep data.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.2.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Include intraday entries of a Steps intraday data type for range requests.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-3`,children:`2.3.3`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.15`}),`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.2.1`}),`\n`,_jsx(_components.li,{children:`Add a metadata object for Spike intraday entries.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-2`,children:`2.3.2`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.2.0`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.11`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: add safeguards for edge cases when a function could be called without necessary data.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-1`,children:`2.3.1`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.2.0`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.11`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: improve Android wrapper.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-3-0`,children:`2.3.0`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.11`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.2.0`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: SpikeData wrapper model aligned with server.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-11`,children:`2.2.11`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.10`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.1.14`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Fix date range parsing.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-10`,children:`2.2.10`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.13`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.10`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Step intraday data improvements.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-9`,children:`2.2.9`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.8`}),`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.13`}),`\n`,_jsx(_components.li,{children:`Step intraday data improvements.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-8`,children:`2.2.8`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.8`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.1.12`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Step intraday data improvements.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-7`,children:`2.2.7`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.11`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.8`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Allow requesting multiple permission for Android using `,_jsx(_components.code,{children:`requestHealthPermissions`}),` method. Provide a single Spike data type or array of Spike data types.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-6`,children:`2.2.6`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.8`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.1.11`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Add a method to check Health Store data availability (isHealthDataAvailable).`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-5`,children:`2.2.5`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.10`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.8`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Can get permission contract before SpikeConnection is created.`}),`\n`,_jsx(_components.li,{children:`Android: Update package checker function to avoid unnecessary check for Android 14 and up versions.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-4`,children:`2.2.4`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.10`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.6`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Move permission checking before data extraction to the SDK connection layer`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-3`,children:`2.2.3`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.10`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.5`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Extracting heart data fixed`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-2`,children:`2.2.2`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.10`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.4`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android: Added support for Android 14.`}),`\n`,_jsx(_components.li,{children:`Android: Fixed some issues with data requesting for a specified date range.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-1`,children:`2.2.1`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Android Spike SDK: 3.0.2`}),`\n`,_jsxs(_components.li,{children:[`iOS Spike SDK: 2.1.10`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS: Spike SDK now uses ISO8601 standardized Calendar.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-2-0`,children:`2.2.0`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`iOS Spike SDK: 2.1.9`}),`\n`,_jsxs(_components.li,{children:[`Android Spike SDK: 3.0.2`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Android: Activity summary and activity stream can be called without granting all their permissions. Returned data depends on which permissions were provided.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Android: Android Permission requests are divided by data types.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`SpikeConnection method `,_jsx(_components.code,{children:`checkPermissionsGranted`}),` now requires Spike data type.`]}),`\n`,_jsxs(_components.li,{children:[`SpikeConnection method `,_jsx(_components.code,{children:`requestHealthPermissions`}),` now requires Spike data type.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See more: `,_jsx(_components.a,{href:`/sdk-docs/rn/setup#android-permissions`,children:`Permissions section`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Android: Works up to Android 13.`}),`\n`]}),`\n`]}),`\n`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"React Native SDK Changelog","icon":"code-commit","sidebarTitle":"Changelog","description":"A changelog documenting version updates and changes of Spike SDK for React Native platform.","href":"/sdk-docs/react-native/changelog"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Spike ReactNative SDK Changelog","slug":"spike-reactnative-sdk-changelog","depth":1,"children":[]},{"title":"4.8.23","slug":"4-8-23","depth":2,"children":[]},{"title":"4.7.13","slug":"4-7-13","depth":2,"children":[]},{"title":"4.6.13","slug":"4-6-13","depth":2,"children":[]},{"title":"4.5.23","slug":"4-5-23","depth":2,"children":[]},{"title":"4.5.13","slug":"4-5-13","depth":2,"children":[]},{"title":"4.4.13","slug":"4-4-13","depth":2,"children":[]},{"title":"4.3.233","slug":"4-3-233","depth":2,"children":[]},{"title":"4.3.223","slug":"4-3-223","depth":2,"children":[]},{"title":"4.3.213","slug":"4-3-213","depth":2,"children":[]},{"title":"4.3.203","slug":"4-3-203","depth":2,"children":[]},{"title":"4.3.193","slug":"4-3-193","depth":2,"children":[]},{"title":"4.3.183","slug":"4-3-183","depth":2,"children":[]},{"title":"4.3.173","slug":"4-3-173","depth":2,"children":[]},{"title":"4.3.163","slug":"4-3-163","depth":2,"children":[]},{"title":"4.3.153","slug":"4-3-153","depth":2,"children":[]},{"title":"4.3.143","slug":"4-3-143","depth":2,"children":[]},{"title":"4.3.133","slug":"4-3-133","depth":2,"children":[]},{"title":"4.3.123","slug":"4-3-123","depth":2,"children":[]},{"title":"4.3.113","slug":"4-3-113","depth":2,"children":[]},{"title":"4.3.103","slug":"4-3-103","depth":2,"children":[]},{"title":"4.3.93","slug":"4-3-93","depth":2,"children":[]},{"title":"4.3.83","slug":"4-3-83","depth":2,"children":[]},{"title":"4.3.73","slug":"4-3-73","depth":2,"children":[]},{"title":"4.3.63","slug":"4-3-63","depth":2,"children":[]},{"title":"4.3.53","slug":"4-3-53","depth":2,"children":[]},{"title":"4.3.43","slug":"4-3-43","depth":2,"children":[]},{"title":"4.3.33","slug":"4-3-33","depth":2,"children":[]},{"title":"4.3.23","slug":"4-3-23","depth":2,"children":[]},{"title":"4.3.13","slug":"4-3-13","depth":2,"children":[]},{"title":"4.2.73","slug":"4-2-73","depth":2,"children":[]},{"title":"4.2.63","slug":"4-2-63","depth":2,"children":[]},{"title":"4.2.53","slug":"4-2-53","depth":2,"children":[]},{"title":"4.2.43","slug":"4-2-43","depth":2,"children":[]},{"title":"4.2.33","slug":"4-2-33","depth":2,"children":[]},{"title":"4.2.23","slug":"4-2-23","depth":2,"children":[]},{"title":"4.2.13","slug":"4-2-13","depth":2,"children":[]},{"title":"4.1.23","slug":"4-1-23","depth":2,"children":[]},{"title":"4.1.13","slug":"4-1-13","depth":2,"children":[]},{"title":"4.0.23","slug":"4-0-23","depth":2,"children":[]},{"title":"4.0.13","slug":"4-0-13","depth":2,"children":[]},{"title":"2.5.8","slug":"2-5-8","depth":2,"children":[]},{"title":"2.5.7","slug":"2-5-7","depth":2,"children":[]},{"title":"2.5.6","slug":"2-5-6","depth":2,"children":[]},{"title":"2.5.5","slug":"2-5-5","depth":2,"children":[]},{"title":"2.5.4","slug":"2-5-4","depth":2,"children":[]},{"title":"2.5.3","slug":"2-5-3","depth":2,"children":[]},{"title":"2.5.2","slug":"2-5-2","depth":2,"children":[]},{"title":"2.5.1","slug":"2-5-1","depth":2,"children":[]},{"title":"2.5.0","slug":"2-5-0","depth":2,"children":[]},{"title":"2.4.5","slug":"2-4-5","depth":2,"children":[]},{"title":"2.4.4","slug":"2-4-4","depth":2,"children":[]},{"title":"2.4.3","slug":"2-4-3","depth":2,"children":[]},{"title":"2.4.2","slug":"2-4-2","depth":2,"children":[]},{"title":"2.4.1","slug":"2-4-1","depth":2,"children":[]},{"title":"2.3.7","slug":"2-3-7","depth":2,"children":[]},{"title":"2.3.6","slug":"2-3-6","depth":2,"children":[]},{"title":"2.3.5","slug":"2-3-5","depth":2,"children":[]},{"title":"2.3.3","slug":"2-3-3","depth":2,"children":[]},{"title":"2.3.2","slug":"2-3-2","depth":2,"children":[]},{"title":"2.3.1","slug":"2-3-1","depth":2,"children":[]},{"title":"2.3.0","slug":"2-3-0","depth":2,"children":[]},{"title":"2.2.11","slug":"2-2-11","depth":2,"children":[]},{"title":"2.2.10","slug":"2-2-10","depth":2,"children":[]},{"title":"2.2.9","slug":"2-2-9","depth":2,"children":[]},{"title":"2.2.8","slug":"2-2-8","depth":2,"children":[]},{"title":"2.2.7","slug":"2-2-7","depth":2,"children":[]},{"title":"2.2.6","slug":"2-2-6","depth":2,"children":[]},{"title":"2.2.5","slug":"2-2-5","depth":2,"children":[]},{"title":"2.2.4","slug":"2-2-4","depth":2,"children":[]},{"title":"2.2.3","slug":"2-2-3","depth":2,"children":[]},{"title":"2.2.2","slug":"2-2-2","depth":2,"children":[]},{"title":"2.2.1","slug":"2-2-1","depth":2,"children":[]},{"title":"2.2.0","slug":"2-2-0","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"trial-7e3c8695","siteName":"Spike API","title":"React Native SDK Changelog - Spike API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-19T10:24:49.020Z","originalFileLocation":"sdk-docs/react-native/changelog.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A changelog documenting version updates and changes of Spike SDK for React Native platform.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Spike API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"React Native SDK Changelog - Spike API\">\u003cmeta data-mint-head property=\"og:description\" content=\"A changelog documenting version updates and changes of Spike SDK for React Native platform.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Spike API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.spikeapi.com/sdk-docs/react-native/changelog\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://trial-7e3c8695.mintlify.app/_mintlify/api/og/v2?division=React+Native+SDK+Documentation\u0026amp;title=React+Native+SDK+Changelog\u0026amp;description=A+changelog+documenting+version+updates+and+changes+of+Spike+SDK+for+React+Native+platform.\u0026amp;theme=7cc5474a77bf202e013c570b\u0026amp;signature=8c3e51c53fd3e0de617d321c2f04494b1fa347ea3a7e39789bf5140b68b8dd01\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"React Native SDK Changelog - Spike API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A changelog documenting version updates and changes of Spike SDK for React Native platform.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://trial-7e3c8695.mintlify.app/_mintlify/api/og/v2?division=React+Native+SDK+Documentation\u0026amp;title=React+Native+SDK+Changelog\u0026amp;description=A+changelog+documenting+version+updates+and+changes+of+Spike+SDK+for+React+Native+platform.\u0026amp;theme=7cc5474a77bf202e013c570b\u0026amp;signature=8c3e51c53fd3e0de617d321c2f04494b1fa347ea3a7e39789bf5140b68b8dd01\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/trial-7e3c8695/Vf-2TqFNQYSDp2gp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Spike API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E2240\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.spikeapi.com/sdk-docs/react-native/changelog\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdk-docs/react-native/changelog.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.spikeapi.com/#organization\",\"name\":\"Spike API\",\"url\":\"https://docs.spikeapi.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/trial-7e3c8695/C_wqhbtsn7F05yl4/images/logo.svg?fit=max\u0026auto=format\u0026n=C_wqhbtsn7F05yl4\u0026q=85\u0026s=435095cb4c721a082a83f3ad17fa156c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.spikeapi.com#website\",\"name\":\"Spike API\",\"url\":\"https://docs.spikeapi.com\",\"publisher\":{\"@id\":\"https://docs.spikeapi.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog#webpage\",\"url\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog\",\"name\":\"React Native SDK Changelog\",\"description\":\"A changelog documenting version updates and changes of Spike SDK for React Native platform.\",\"dateModified\":\"2026-08-19T10:24:49.020Z\",\"isPartOf\":{\"@id\":\"https://docs.spikeapi.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"React Native SDK Documentation\",\"item\":\"https://docs.spikeapi.com/sdk-docs/react-native/setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"React Native SDK Changelog\",\"item\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog#article\",\"headline\":\"React Native SDK Changelog\",\"name\":\"React Native SDK Changelog\",\"description\":\"A changelog documenting version updates and changes of Spike SDK for React Native platform.\",\"url\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog\",\"mainEntityOfPage\":{\"@id\":\"https://docs.spikeapi.com/sdk-docs/react-native/changelog#webpage\"},\"dateModified\":\"2026-08-19T10:24:49.020Z\",\"publisher\":{\"@id\":\"https://docs.spikeapi.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.spikeapi.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Spike API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Spike API","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":"/overview"}]},{"tab":"API Documentation","pages":[{"title":"API Documentation","href":"/api-docs/overview"}]},{"tab":"SDK Documentation","menu":[{"item":"iOS","icon":"apple","pages":[{"title":"iOS","href":"/sdk-docs/ios/overview"}]},{"item":"Android","icon":"android","pages":[{"title":"Android","href":"/sdk-docs/android/overview"}]},{"item":"React Native","icon":"react","groups":[{"group":"About","pages":[{"title":"React Native SDK Overview","icon":"circle-info","sidebarTitle":"Overview","href":"/sdk-docs/react-native/overview"}]},{"group":"React Native SDK Documentation","pages":[{"title":"React Native SDK Setup","icon":"gear","sidebarTitle":"Setup Guide","href":"/sdk-docs/react-native/setup"},{"title":"React Native SDK Usage Guide","icon":"rocket","sidebarTitle":"Usage Guide","href":"/sdk-docs/react-native/usage-guide"},{"title":"React Native SDK for Samsung Health","icon":"stripe-s","sidebarTitle":"Samsung Health","href":"/sdk-docs/react-native/usage-guide-shd"},{"title":"React Native SDK Background Delivery","icon":"truck-fast","sidebarTitle":"Background Delivery","href":"/sdk-docs/react-native/background-delivery"},{"title":"React Native SDK Nutrition AI","icon":"plate-utensils","sidebarTitle":"Nutrition AI","href":"/sdk-docs/react-native/nutrition-ai"},{"title":"React Native SDK Logging","icon":"file-waveform","sidebarTitle":"Logging","href":"/sdk-docs/react-native/logging"},{"title":"React Native SDK Plugin Expo","icon":"plug","sidebarTitle":"Expo Plugin","description":"Using Expo plugin with Spike SDK for React Native in your project.","href":"/sdk-docs/react-native/plugin-expo"},{"title":"React Native SDK Changelog","icon":"code-commit","sidebarTitle":"Changelog","href":"/sdk-docs/react-native/changelog"}]}]},{"item":"Flutter","icon":"flutter","pages":[{"title":"Flutter","href":"/sdk-docs/flutter/overview"}]}]},{"tab":"Nutrition AI","pages":[{"title":"Nutrition AI","href":"/nutrition-ai/overview"}]},{"tab":"Lab Reports","hidden":false,"pages":[{"title":"Lab Reports","href":"/lab-reports/overview"}]},{"tab":"Spike Care Benefits Checks","hidden":true,"pages":[{"title":"Spike Care Benefits Checks","href":"/api-spike-care/overview"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp-docs/overview"}]},{"tab":"Technical References","pages":[{"title":"Technical References","href":"/technical-references/application_configuration"}]}]},"basePath":"","title":"React Native SDK Changelog - Spike API","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":[],"chunks":[]}