{"id":43349456,"url":"https://github.com/ticketmaster/react-native-ticketmaster-ignite","last_synced_at":"2026-02-02T02:14:38.598Z","repository":{"id":247779871,"uuid":"826820475","full_name":"ticketmaster/react-native-ticketmaster-ignite","owner":"ticketmaster","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-12T12:22:23.000Z","size":23284,"stargazers_count":8,"open_issues_count":0,"forks_count":5,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-01-12T18:50:58.209Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ticketmaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-10T12:49:16.000Z","updated_at":"2025-12-19T18:39:33.000Z","dependencies_parsed_at":"2024-07-15T13:20:50.257Z","dependency_job_id":"935b8d6b-901b-455f-98d8-905b67ba88c4","html_url":"https://github.com/ticketmaster/react-native-ticketmaster-ignite","commit_stats":null,"previous_names":["ticketmaster/react-native-ticketmaster-ignite"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/ticketmaster/react-native-ticketmaster-ignite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticketmaster%2Freact-native-ticketmaster-ignite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticketmaster%2Freact-native-ticketmaster-ignite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticketmaster%2Freact-native-ticketmaster-ignite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticketmaster%2Freact-native-ticketmaster-ignite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ticketmaster","download_url":"https://codeload.github.com/ticketmaster/react-native-ticketmaster-ignite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticketmaster%2Freact-native-ticketmaster-ignite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29001653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T01:32:03.847Z","status":"online","status_checked_at":"2026-02-02T02:00:07.448Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-02T02:14:37.893Z","updated_at":"2026-02-02T02:14:38.583Z","avatar_url":"https://github.com/ticketmaster.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003csvg width=\"300\" height=\"101\" viewBox=\"0 0 114 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n\u003crect width=\"300\" height=\"104\" fill=\"#024DDF\"/\u003e\n\u003cg transform=\"translate(2, 3)\"\u003e\n\u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M69.2747 13.4407C71.2878 13.4407 71.909 12.0552 72.3299 10.3955H71.3892C70.081 10.3955 67.9132 10.6138 67.9132 12.3622C67.9132 13.0829 68.5978 13.4483 69.2747 13.4483V13.4407ZM71.909 13.5803H71.8684C70.9455 14.7451 70.0227 15.4074 68.5369 15.4074C66.6658 15.4074 65.3424 14.3644 65.3424 12.4536C65.3424 9.03531 69.1454 8.77393 71.6808 8.77393H72.6214C72.6916 8.4834 72.7198 8.18429 72.7051 7.88575C72.7051 6.8453 71.5769 6.54332 70.6362 6.54332C69.4588 6.55674 68.2989 6.82966 67.2388 7.34268L67.6191 5.19581C68.7475 4.78982 69.9366 4.57873 71.1357 4.57155C73.2071 4.57155 75.1517 5.33285 75.1517 7.76648C75.1517 9.15712 74.1376 13.2174 73.884 15.1714H71.6022L71.909 13.5803ZM2.12535 4.80247H4.06745L4.53142 2.67336L7.42428 1.72681L6.76508 4.80247H9.17115L8.75028 6.7717H6.33661L5.35542 11.2989C5.27405 11.6311 5.23319 11.972 5.23372 12.314C5.228 12.4488 5.25083 12.5832 5.3007 12.7086C5.35057 12.8339 5.42635 12.9472 5.52308 13.0412C5.61981 13.1351 5.73529 13.2075 5.86195 13.2536C5.98861 13.2998 6.12359 13.3185 6.25801 13.3088C6.70213 13.3082 7.14259 13.2283 7.55866 13.0728L7.09975 15.1562C6.6273 15.2908 6.14211 15.3759 5.65206 15.41C3.82659 15.41 2.53862 14.6969 2.53862 12.6997C2.56626 11.8855 2.68014 11.0765 2.87836 10.2864L3.63897 6.7844H1.69434L2.12535 4.80247ZM11.2654 0.336165H13.9529L13.3926 2.9119H10.6974L11.2654 0.336165ZM10.2791 4.79739H12.9641L10.7608 15.1537H8.06573L10.2791 4.79739ZM21.1052 7.17266C20.5091 6.81591 19.8245 6.63472 19.1301 6.6499C16.9826 6.6499 15.7733 8.66481 15.7733 10.6112C15.7733 11.9587 16.222 13.3062 18.0678 13.3062C18.8262 13.2912 19.5724 13.1129 20.2558 12.7835L19.949 14.9202C19.1333 15.276 18.2467 15.4393 17.3579 15.3973C14.6831 15.3973 12.9565 13.6209 12.9565 10.9386C12.9565 7.31731 15.3448 4.56393 19.0616 4.56393C19.9749 4.56521 20.8831 4.70116 21.7568 4.96742L21.1052 7.17266ZM24.0513 0.0823975H26.7438L24.9539 8.56584H24.9995L28.7519 4.80247H32.2481L27.2864 9.53016L30.3998 15.1562H27.3701L24.6927 9.66973H24.6547L23.4986 15.1562H20.8592L24.0513 0.0823975ZM41.9561 4.80247H43.9007L44.3647 2.67336L47.2575 1.72681L46.5933 4.80247H49.0044L48.5988 6.7717H46.1825L45.1963 11.2989C45.1185 11.6317 45.0785 11.9722 45.0771 12.314C45.0698 12.4497 45.0916 12.5855 45.141 12.7121C45.1904 12.8387 45.2662 12.9533 45.3634 13.0482C45.4607 13.1431 45.577 13.2162 45.7047 13.2624C45.8325 13.3087 45.9686 13.3271 46.104 13.3164C46.548 13.3155 46.9885 13.2356 47.4046 13.0804L46.9432 15.1638C46.4726 15.2991 45.989 15.3841 45.5005 15.4176C43.6725 15.4176 42.3871 14.7045 42.3871 12.7073C42.4135 11.893 42.5274 11.0839 42.7268 10.294L43.4874 6.79201H41.5327L41.9561 4.80247ZM41.0535 8.5024C41.0483 9.27799 40.9634 10.051 40.7999 10.8091H34.4615C34.4627 10.1848 34.5593 9.56439 34.748 8.96933H38.4319C38.47 8.73524 38.4895 8.4985 38.4902 8.26133C38.4902 7.15744 37.9071 6.5357 36.7839 6.5357C35.1993 6.5357 34.4666 7.44419 33.9519 8.76378C33.6729 9.41013 33.5239 10.1051 33.5133 10.8091V10.903C33.5133 11.002 33.5285 11.0959 33.5285 11.1898C33.6629 12.819 34.6643 13.428 36.3859 13.428C37.4853 13.4155 38.5686 13.1626 39.5602 12.687L39.2153 14.8212C38.1503 15.172 37.0401 15.366 35.9194 15.3973C32.9428 15.3973 30.9348 13.9559 30.9348 10.8777C30.9348 7.6599 33.4296 4.56393 36.8245 4.56393C39.3776 4.56393 41.0636 5.86829 41.0636 8.5024H41.0535ZM50.1682 5.9495C50.2442 5.54601 50.3253 5.12983 50.3862 4.79993H52.9089L52.668 6.18804H52.7061C53.0626 5.67798 53.5386 5.26319 54.0924 4.98004C54.6463 4.6969 55.2611 4.55402 55.8829 4.56393C57.1049 4.56393 58.3752 5.28717 58.5121 6.5357H58.5526C59.2321 5.18566 60.7432 4.56393 62.1884 4.56393C62.9437 4.56451 63.6686 4.86233 64.2065 5.39312C64.7443 5.92391 65.0522 6.6451 65.0635 7.40105C65.025 8.35364 64.87 9.29793 64.602 10.2128L63.5068 15.1562H60.8142L61.8968 10.1138C62.0777 9.38821 62.1914 8.64747 62.2365 7.90097C62.2412 7.73401 62.2115 7.56786 62.1492 7.41291C62.0869 7.25796 61.9933 7.11753 61.8744 7.00037C61.7554 6.88322 61.6136 6.79185 61.4578 6.73199C61.302 6.67213 61.1356 6.64505 60.9688 6.65244C59.1028 6.65244 58.6388 8.82469 58.2966 10.2356L57.2342 15.1562H54.5493L55.6268 10.1138C55.8118 9.38887 55.9273 8.64789 55.9716 7.90097C55.9756 7.73421 55.9453 7.5684 55.8827 7.41379C55.8202 7.25918 55.7266 7.11905 55.6078 7.00205C55.489 6.88505 55.3475 6.79366 55.1921 6.73353C55.0366 6.6734 54.8705 6.64581 54.7039 6.65244C52.881 6.65244 52.3714 8.84245 52.0317 10.2356L50.9693 15.1562H48.2768L50.1682 5.9495ZM83.161 6.91382C82.5943 6.66223 81.9808 6.53337 81.3609 6.5357C80.5622 6.5357 79.5607 6.75648 79.5607 7.57869C79.5607 8.88559 83.057 9.35506 83.057 11.8927C83.057 14.5877 80.6991 15.3897 78.3843 15.3897C77.3027 15.418 76.2283 15.2065 75.2379 14.7705L75.8185 12.6185C76.5791 13.0423 77.3398 13.4204 78.3843 13.4204C79.2945 13.4204 80.2402 13.121 80.2402 12.2785C80.2402 10.6061 76.7414 10.4463 76.7414 7.8553C76.7414 5.41913 79.0942 4.55632 81.2316 4.55632C82.0797 4.56186 82.9241 4.66921 83.7467 4.87607L83.161 6.91382ZM84.88 4.80247H86.8347L87.2911 2.67336L90.1789 1.72681L89.5172 4.80247H91.9308L91.5049 6.7717H89.0887L88.1126 11.2989C88.0276 11.6305 87.9859 11.9717 87.9883 12.314C87.9815 12.4496 88.0035 12.5852 88.053 12.7116C88.1026 12.838 88.1784 12.9525 88.2756 13.0473C88.3727 13.1421 88.4889 13.2152 88.6164 13.2615C88.7439 13.3079 88.8799 13.3266 89.0152 13.3164C89.4601 13.316 89.9014 13.2361 90.3183 13.0804L89.862 15.1638C89.3894 15.2978 88.9043 15.3829 88.4143 15.4176C86.5863 15.4176 85.3008 14.7045 85.3008 12.7073C85.3267 11.8933 85.4389 11.0843 85.6355 10.294L86.3961 6.79201H84.4515L84.88 4.80247ZM103.135 6.18804C103.221 5.74649 103.297 5.28717 103.388 4.80247H105.959L105.594 6.75648H105.642C106.119 5.62721 107.447 4.56393 108.685 4.56393C109.025 4.55751 109.365 4.58986 109.699 4.66037L109.136 7.29701C108.808 7.19064 108.466 7.13586 108.122 7.1346C106.213 7.1346 105.287 8.84245 104.942 10.5148L103.984 15.1562H101.281L103.135 6.18804ZM101.266 8.5024C101.263 9.27814 101.178 10.0514 101.013 10.8091H94.6741C94.6739 10.1845 94.7714 9.56373 94.9631 8.96933H98.642C98.6805 8.73521 98.7017 8.49857 98.7054 8.26133C98.7054 7.15744 98.1222 6.5357 96.9965 6.5357C95.4068 6.5357 94.6767 7.44165 94.1645 8.76378C93.8871 9.41074 93.7373 10.1053 93.7234 10.8091L93.7386 11.1898C93.8653 12.819 94.8668 13.428 96.5934 13.428C97.6912 13.416 98.773 13.163 99.7626 12.687L99.4279 14.8212C98.3626 15.1708 97.2526 15.3648 96.132 15.3973C93.163 15.3973 91.1525 13.9559 91.1525 10.8777C91.1525 7.6599 93.6422 4.56393 97.0371 4.56393C99.5902 4.56393 101.276 5.86829 101.276 8.5024H101.266Z\" fill=\"white\"/\u003e\n\u003cpath d=\"M1.75945 35.4175H5.83819C10.3168 35.4175 13.1559 32.5384 13.1559 28.3397C13.1559 24.141 10.2568 21.2219 5.77821 21.2219H1.75945V35.4175ZM2.8991 34.3778V22.2616H5.77821C9.51705 22.2616 11.9763 24.7608 11.9763 28.3397C11.9763 31.8586 9.61701 34.3778 5.77821 34.3778H2.8991ZM16.0714 35.4175H24.9687V34.3778H17.2111V28.8595H23.3092V27.8198H17.2111V22.2616H24.5488V21.2219H16.0714V35.4175ZM31.8885 35.4175H32.9482L38.3465 21.2219H37.1269L32.4484 33.738H32.4084L27.7098 21.2219H26.4902L31.8885 35.4175ZM40.6732 35.4175H49.5704V34.3778H41.8128V28.8595H47.9109V27.8198H41.8128V22.2616H49.1505V21.2219H40.6732V35.4175ZM52.2516 35.4175H60.8289V34.3778H53.3912V21.2219H52.2516V35.4175ZM69.0198 35.5174C72.9386 35.5174 76.0376 32.6183 76.0376 28.2997C76.0376 24.001 72.9386 21.1219 69.0198 21.1219C65.0211 21.1219 61.962 24.041 61.962 28.2997C61.962 32.5784 65.0211 35.5174 69.0198 35.5174ZM69.0198 34.4378C65.7008 34.4378 63.1217 31.9186 63.1217 28.2997C63.1217 24.7208 65.7008 22.2016 69.0198 22.2016C72.2388 22.2016 74.858 24.6608 74.858 28.2997C74.858 31.9586 72.2388 34.4378 69.0198 34.4378ZM79.0011 35.4175H80.1407V29.6793H83.4997C86.3788 29.6793 88.3782 28.3797 88.3782 25.4206C88.3782 23.0213 87.0586 21.2219 83.8396 21.2219H79.0011V35.4175ZM80.1407 28.6196V22.2616H83.7996C85.839 22.2616 87.1985 23.3212 87.1985 25.4206C87.1985 27.24 86.1389 28.6196 83.3997 28.6196H80.1407ZM90.9505 35.4175H99.8477V34.3778H92.0902V28.8595H98.1883V27.8198H92.0902V22.2616H99.4279V21.2219H90.9505V35.4175ZM102.529 35.4175H103.669V29.6793H106.808L110.846 35.4175H112.226L108.067 29.5793C110.446 29.2794 111.946 27.9598 111.946 25.4206C111.946 23.0213 110.566 21.2219 107.387 21.2219H102.529V35.4175ZM103.669 28.6196V22.2616H107.287C109.427 22.2616 110.766 23.3212 110.766 25.4206C110.766 27.24 109.707 28.6196 106.988 28.6196H103.669Z\" fill=\"white\"/\u003e\n\u003c/g\u003e\n\u003c/svg\u003e\n\n![tm-developer-logo](https://github.com/user-attachments/assets/c5835fc2-f1b8-413c-af9d-4449cdf1d24b)\n\n# react-native-ticketmaster-ignite\n[![current react-native-ticketmaster-ignite package version](https://img.shields.io/npm/v/react-native-ticketmaster-ignite)](https://www.npmjs.com/package/react-native-ticketmaster-ignite) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ticketmaster/react-native-ticketmaster-ignite/ci.yml?branch=main) [![released under the MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) ![PR's welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)\n\nThis library serves as a wrapper for the three Ticketmaster Ignite SDK's: [Accounts](https://ignite.ticketmaster.com/docs/accounts-sdk-overview), [Retail](https://ignite.ticketmaster.com/docs/retail-sdk-overview) and [Tickets](https://ignite.ticketmaster.com/docs/tickets-sdk-overview).\n\nIn order to use the library, setup a developer account with Ticketmaster by contacting nexus_sdk@ticketmaster.com. When your account is activated you will receive an **API key** and **scheme** that you'll need to use to finish the setup.\n\n## Installation\n\n#### NPM\n\n```bash\nnpm install --save react-native-ticketmaster-ignite\n```\n\n#### Yarn\n```bash\nyarn add react-native-ticketmaster-ignite\n```\n\n#### Expo\n\n```bash\nnpx expo install react-native-ticketmaster-ignite\n```\n\nIf your project is an **Expo Managed Workflow** project then skip the \"Setting up iOS\" and \"Setting up Android\" sections and go straight to the [Setting up Expo](https://github.com/ticketmaster/react-native-ticketmaster-ignite?tab=readme-ov-file#setting-up-expo) section\n\n## Setting up iOS\n\nEdit the `Podfile` and set the platform to `17.0`\n\n```\nplatform :ios, '17.0'\n```\n\n- `cd` into the `ios` directory and run `pod install`\n\n## Setting up Android\n\n#### TM scheme\n\nThe scheme is used formulate a deeplink which will be used by the Ticketmaster login activity to deeplink back to your app after login.  \n\nIn your project go to `android/app/src/main/res/values/strings.xml` and if you are on Modern Accounts/Archtics add this snippet:\n\n```xml\n\u003cstring name=\"app_tm_modern_accounts_scheme\"\u003esamplescheme\u003c/string\u003e\n```\n\nAnd if you are on Sport XR add this snippet:\n\n```xml\n\u003cstring name=\"app_tm_sportxr_scheme\"\u003esamplescheme\u003c/string\u003e\n```\n\nReplace `samplescheme` with your scheme - you can find it in your Ticketmaster developer app settings.\n\n#### Multi Scheme\n\nIf you have multiple schemes you can add them using the following format:\n\nModern Accounts/Archtics \n```xml\n\u003cstring name=\"app_tm_modern_accounts_scheme\"\u003esamplescheme1\u003c/string\u003e\n\u003cstring name=\"app_tm_modern_accounts_scheme_2\"\u003esamplescheme2\u003c/string\u003e\n\u003cstring name=\"app_tm_modern_accounts_scheme_3\"\u003esamplescheme3\u003c/string\u003e\n\u003cstring name=\"app_tm_modern_accounts_scheme_4\"\u003esamplescheme4\u003c/string\u003e\n\u003cstring name=\"app_tm_modern_accounts_scheme_5\"\u003esamplescheme5\u003c/string\u003e\n```\n\nSportXR\n```xml\n\u003cstring name=\"app_tm_sportxr_scheme\"\u003esamplescheme1\u003c/string\u003e\n\u003cstring name=\"app_tm_sportxr_scheme_2\"\u003esamplescheme2\u003c/string\u003e\n\u003cstring name=\"app_tm_sportxr_scheme_3\"\u003esamplescheme3\u003c/string\u003e\n\u003cstring name=\"app_tm_sportxr_scheme_4\"\u003esamplescheme4\u003c/string\u003e\n\u003cstring name=\"app_tm_sportxr_scheme_5\"\u003esamplescheme5\u003c/string\u003e\n```\n\nYou can set up to 10 Archtics or 10 SportXR schemes in total\n\n\n#### allowBackup in AndroidManifest\n\nOpen the `AndroidManifest.xml` file and:\n\n- make sure that the `manifest` contains `xmlns:tools=\"http://schemas.android.com/tools\"`\n- add `tools:replace=\"android:allowBackup\"` to the `application` tag\n\n```xml\n\u003cmanifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          xmlns:tools=\"http://schemas.android.com/tools\"\n          package=\"com.yourpackage\"\u003e\n\n    \u003capplication tools:replace=\"android:allowBackup\"\u003e\n      \u003cactivity\u003e\n      ...\n      \u003c/activity\u003e\n    \u003c/application\u003e\n\u003c/manifest\u003e\n```\n\nIf you notice login issues on Android, such as the login UI hanging once the sign in button has been pressed or `Couldn't generated a ModernAccounts object` seen in the logs in Android Studio add `tools:remove=\"android:taskAffinity\"` to the `application` tag, rebuild the app and try logging in again.\n\n#### Set dataBinding and coreLibraryDesugaringEnabled to true\n\nIn `android/app/build.gradle` add:\n\n```groovy\nandroid {\n  ...\n    buildFeatures {\n        dataBinding = true\n    }\n\n    compileOptions {\n      // Flag to enable support for the new language APIs\n      coreLibraryDesugaringEnabled true\n    }\n  ...\n}\n\ndependencies {\n  ...\n    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.3'\n  ...\n}\n```\n\n#### Set the minSdkVersion\n\nIn `android/build.gradle` set the `minSdkVersion` to `28` and set the `compileSdkVersion` to `36`.\n\n## Setting up Expo\n\nIf you are using an expo managed workflow you should ignore the iOS and Android setup sections above and use a config plugin to update your native files. See [here](./docs/expo.md) for an **example** config plugin written for an expo app that uses this library\n\n## Usage\n\n`react-native-ticketmaster-ignite` exports the following modules:\n\n- `IgniteProvider`\n- `AccountsSDK`\n- `TicketsSdkModal` (iOS only)\n- `TicketsSdkEmbedded`\n- `RetailSDK`\n- `useIgnite`\n\n#### IgniteProvider\n\nThis is the only module that must be implemented for the library to work correctly. The purpose of `IgniteProvider` is to pass the config `options` to the native code.\n\nRequired props in `options` are:\n\n- `apiKey`\n- `clientName`\n- `primaryColor`\n\nOptional props in `options` are: \n- `region`\n- `marketDomain`\n- `eventHeaderType`\n\nIn order to use it, wrap your application with the `IgniteProvider` and pass the API key and client name as a prop:\n\n```typescript\nimport { IgniteProvider } from 'react-native-ticketmaster-ignite';\n\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n\u003e\n    \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\n##### The `region` property\n\nThe `region` property determines the server deployment region the SDK's will connect to. The values can be either `US` or `UK`. The default value is `US` and should be used unless you have specifically been told to set your region to `UK`.\n\n##### The `marketDomain` property\nThe `marketDomain` property is used to configure the country that the Retail SDK needs to retrieve attractions, venues and events for. The default value is `US`\n\nSee [here](./docs/marketDomains.md) for the list of supported market domains.\n\n##### The `eventHeaderType` property \n\nThe `eventHeaderType` property accepts one of the following values - `NO_TOOLBARS`, `EVENT_INFO`, `EVENT_SHARE` and `EVENT_INFO_SHARE`. When the property has not been passed, the `IgniteProvider` will default to `EVENT_INFO_SHARE`. \n\nThe `eventHeaderType` property specifies what tools will be available in the header of the event screen:\n\n| Property | Explanation | Demo |\n|----------|----------|----------|\n| `NO_TOOLBARS`    | Show no toolbars in Event's header   | \u003cimg src=\"docs/assets/NO_TOOLBARS.png\" width=\"400\"\u003e |\n| `EVENT_INFO`    | Show only the event info button |\u003cimg src=\"docs/assets/EVENT_INFO.png\" width=\"400\"\u003e|\n| `EVENT_SHARE`   | Show only the event share button   |\u003cimg src=\"docs/assets/EVENT_SHARE.png\" width=\"400\"\u003e|\n| `EVENT_INFO_SHARE`    | Show both the info and share buttons   |\u003cimg src=\"docs/assets/EVENT_INFO_SHARE.png\" width=\"400\"\u003e|\n\n##### The `autoUpdate` prop \n\n`autoUpdate` is a prop that can be set to `false` to prevent `IgniteProvider` from rerendering your app when the auth state changes, as you may want to update and maintain this state with your own logic. (⚠️ warning: if set to `false`, `authState`'s `isLoggedIn`, `memberInfo` and `isConfigured` will not automatically update so will be unavailable for your app and you will have to call `getMemberInfo`, `getIsLoggedIn` and use `IgniteAnalytics` manually to retrieve auth states and data for your app. The default value is `true`. See more on `authState` later on.)\n\n```typescript\nimport { IgniteProvider } from 'react-native-ticketmaster-ignite';\n\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n  autoUpdate={false}\n\u003e\n    \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\n#### useIgnite\n\nTo handle authentication in a React Native app you can either use the AccountsSDK module mentioned in the below section or you can use the `useIgnite` hook.\n\nThe `useIgnite` hook implements all of the native Accounts SDK methods for easy out of the box use in a React Native apps. It also provides `isLoggingIn` and an `authState` object with properties `isLoggedIn`, `memberInfo` and `isConfigured`, these properties update themselves during and after authenticaion.\n\nOnce the user authenticates `isLoggedIn` will remain true after app restarts. On the initial render, `isLoggedIn` is `false` and is updated to `true` when the login state is retrieved from the native SDK's. To avoid an incorrect logged out state on the first render, on your apps home screens you can hide sign in text/UI or use an `\u003cActivityIndicator /\u003e`/loading UI in that area of the screen while `isConfigured` is false. \n\n`isConfigured` becomes true after the Accounts SDK has successfully configured and the local storage `isLoggedIn` value and `memberInfo` response data have both been retrieved by the SDK. This makes it useful to condition against any API calls which require OAuth tokens or any UI buttons that trigger Ignite SDK views and methods, as if the Accounts SDK does not configure, auth will not work in any of the SDK's and API calls that require OAuth tokens will fail.\n\nExample:\n\n```tsx\nimport { ActivityIndicator, Text } from 'react-native';\nimport { useIgnite } from 'react-native-ticketmaster-ignite';\n\nconst {\n  login,\n  logout,\n  logoutAll,\n  getToken,\n  getMemberInfo,\n  getIsLoggedIn,\n  isLoggingIn,\n  refreshToken,\n  refreshConfiguration,\n  authState: { isLoggedIn, memberInfo, isConfigured },\n} = useIgnite();\n\ntry {\n  await login();\n} catch (e) {\n  console.log('Accounts SDK login error:', (e as Error).message);\n}\n\n{\n  isLoggingIn \u0026\u0026 (\n    \u003cView style={styles.activityIndicator}\u003e\n      \u003cActivityIndicator color={'blue'} size={'small'} /\u003e\n    \u003c/View\u003e\n  );\n}\n\n{isLoggedIn \u0026\u0026 \u003cText\u003eYou are logged in\u003cText/\u003e}\n```\n\n`getToken()` and `refreshToken()` return different properties per native platform. iOS always returns the currently configured API key's access token inside `accessToken`. See object types below: \n\nAndroid: \n```typescript\ntype AuthSource = {\n  hostAccessToken?: string;\n  archticsAccessToken?: string;\n  mfxAccessToken?: string;\n  sportXRAccessToken?: string;\n  sportXRIdToken?: string;\n};\n```\n\niOS\n```typescript\ntype iosTokenData = { accessToken: string; sportXRIdToken: string };\n```\n\nYou can see the results of `getToken()`, `getMemberInfo()` and `getIsLoggedIn()` in the console when running the example app.\n\n##### Login/Logout Callbacks\n\nThe `login()` method from the `useIgnite` hook accepts an object with properties `onLogin` and `skipUpdate`:\n\n- `onLogin` - a callback that fires after successful authentication\n- `skipUpdate` - Set value to `true` to prevent a rerender after successful authentication (⚠️ warning: if set to `true`, `isLoggedIn`, `isLoggingIn` and `memberInfo` will not automatically update and you will have to call `getMemberInfo` and `getIsLoggedIn` manually. It's recommended you implement AccountsSDK directly and not use this hook if you want complete control of React Native screen and state updates. The default value is `false`.)\n\nExample:\n\n```tsx\nimport { ActivityIndicator } from 'react-native';\nimport { useIgnite } from 'react-native-ticketmaster-ignite';\n\nconst { login } = useIgnite();\n\nconst callback = () =\u003e {\n  console.log('User logged in');\n};\n\ntry {\n  // If skipUpdate is not provided its default value is false\n  await login({ onLogin: callback, skipUpdate: false });\n} catch (e) {\n  console.log('Accounts SDK login error:', (e as Error).message);\n}\n```\n\n`logout()`/`logoutAll()` accepts a similar object here are the shapes below:\n\n```typescript\ntype LoginParams = {\n  onLogin?: () =\u003e void;\n  skipUpdate?: boolean;\n};\n\ntype LogoutParams = {\n  onLogout?: () =\u003e void;\n  skipUpdate?: boolean;\n};\n```\n\n#### AccountsSDK\n\nExposes the following functions:\n\n- `configureAccountsSDK` - Called in `IgniteProvider` before `\u003cApp /\u003e` is mounted, generally no need to implement this method manually. \n- `login`\n- `logout`\n- `logoutAll` - iOS only\n- `refreshToken`\n- `getMemberInfo`\n- `getToken` - iOS only\n- `isLoggedIn`\n\nIf you use AccountsSDK you will need to handle the data return type differences between Swift and Kotlin yourself. It is advised you use auth methods from `useIgnite()` above instead of using the AccountsSDK module directly.\n\nIf you are using the `AccountsSDK` module and not `useIgnite()` then `getToken()` is only for iOS. In your JavaScript methods, to receive an access token or refresh the refresh token always call `refreshToken()` for Android. For iOS the get token and refresh token logic are seperate.\n\n#### Refresh Token\n\nThe Accounts SDK only returns an access token, not a refresh token. If the user is logged in and `getToken()` ever returns `null`, the refresh token may have expired. In this situation you can either call `logout()` so the user can manually login again to refresh the refresh token and receive a new access token or you can call `refreshToken()` which will automatically present the login UI to the user (you must use `useIgnite`'s `refreshToken()` method to trigger this behaviour). If you do not need to use an OAuth access token from the Accounts SDK, you typically do not need to worry about this and can rely on `isLoggedIn` from `useIgnite()` to control your login UI state.\n\nOn recent versions of the iOS Accounts SDK, it has been observed that on backend server errors `getToken()` and `getMemberInfo()` methods are returning `TicketmasterFoundation.ConnectionError error...` instead of `null`. In these situations, if the user has previously logged in `isLoggedIn` from `useIgnite()` will be `true`, so `isLoggedIn` is a good variable to use to control the logged in UI state of the whole application, it also works well in useEffect dep arrays. `await getIsLoggedIn()` is good to call directly after methods like `await login()` or `await refreshToken()` to check/retrieve a boolean which states if the user is logged in which can be used for your own custom variables or conditions in your business logic.\n\nAs a fail safe, it may be beneficial to call `refreshToken()` **once** on the first log occurrence of `TicketmasterFoundation.ConnectionError error...` being logged a catch block, in case the user just needs to reauthenticate, but a backend server error should resolve itself after a short period of time (within 5 mins) so a \"something went wrong, please try again later\" error message to the user may suffice on an occurrence of this error.\n\nTo catch `TicketmasterFoundation.ConnectionError error 0` logs on app launch see [here](https://github.com/ticketmaster/react-native-ticketmaster-ignite?tab=readme-ov-file#reconfigure-accounts-sdk)\n\n#### Reconfigure Accounts SDK\n\nIf you want to switch between different API keys within one app session/during runtime, you can call the `refreshConfiguration` method provided by the `useIgnite()` hook. This will also update the API configuration for the Tickets and Retail SDK's if your application uses them. When a user switches API key, they must login once, on newer version of the Ignite SDK's the login screen pops up and the user will SSO into the new configuration, but login always has to be called once. This method automatically calls login after reconfiguration of a new key, see below params on how to skip auto login in case you want to call login yourself.\n\n`refreshConfiguration()` calls `configureAccountsSDK()` so it can also be used for general Accounts SDK configuration/if the initial `configureAccountsSDK()` done by `\u003cIgniteProvider/\u003e` ever fails in your app.\n\nExample:\n\n```tsx\nimport { useIgnite } from 'react-native-ticketmaster-ignite';\n\ntry {\n  await refreshConfiguration({\n    apiKey: 'someApiKey',\n    clientName: 'Team 2',\n    primaryColor: '#FF0000',\n  });\n} catch (e) {\n  console.log('Account SDK refresh configuration error:', (e as Error).message);\n}\n```\n\nThe `refreshConfiguration()` method from the `useIgnite` accepts the below list of properties (apiKey is the only compulsory param):\n\n- `apiKey` - An API configuration key from your Ticketmaster developer account\n- `clientName` - Company name \n- `primaryColor` - Company brand color\n- `region` - Server deployment region\n- `marketDomain` - Country for Retail SDK configuration\n- `eventHeaderType` - Tools that will be available in the header of the event screen\n- `onSuccess` - a callback that fires after successful Accounts SDK configuration\n- `onLoginSuccess` - a callback that fires after successful login. `login()` is called automatically by `refreshConfiguration()` after it configures the SDK's.\n- `skipAutoLogin` - Set value to `true` to prevent automatic login after Account SDK configuration, users will need to enter their username and password the first time they login after switching to a new API key configuration. The default value is false. See [here](https://ignite.ticketmaster.com/v1/docs/switching-teams-without-logging-out) for more information about switching between multiple API keys within one app session.\n- `skipUpdate` - Set value to `true` to prevent a rerender after successful authentication (⚠️ warning: if set to `true`, `isLoggedIn`, `isLoggingIn` and `memberInfo` will not automatically update and you will have to call `getMemberInfo` and `getIsLoggedIn` manually. It's recommended you implement AccountsSDK directly and not use this hook if you want complete control of React Native screen and state updates. The default value is `false`.)\n\nHere are the types:\n\n```typescript\ntype RefreshConfigParams = {\n  apiKey: string;\n  clientName?: string;\n  primaryColor?: string;\n  region?: Region;\n  marketDomain?: MarketDomain;\n  eventHeaderType?: EventHeaderType;\n  skipAutoLogin?: boolean;\n  skipUpdate?: boolean;\n  onSuccess?: () =\u003e void;\n  onLoginSuccess?: () =\u003e void;\n};\n```\n\n`IgniteProvider` always requires an API key so make sure you have set a default/fallback for app launch. This library does not persist API keys, so you will need to persist the users previous team selection to make sure the correct API key is used after app restarts.\n\nA user must login once the first time the app switches to a new API key so `login()` is called automatically by `refreshConfiguration()` after it configures the SDK's. To prevent this set `skipAutoLogin` to true, but `login()` will need to be called before the user can perform any authenticiated flows within the SDK's or receive auth data like access tokens.\n\n`isConfigured` being false during the initial user interactions with the UI is an indication that the initial `configureAccountsSDK()` done by `\u003cIgniteProvider/\u003e` has failed. You can either assess its value on initial user interaction or call `refreshConfiguration()` on mount manually, if you end up experiencing issues with the automatic Accounts SDK configuration this library does. Usually the initial call to the library works completely fine.\n\nExample using `refreshConfiguration()` as the initial method to configure the SDK's:\n\nInside one of your child components of `IgniteProvider`\n\n```tsx\nimport { useIgnite } from 'react-native-ticketmaster-ignite';\n\n  const {\n    refreshConfiguration,\n    authState: {isConfigured}\n  } = useIgnite()\n\n  useEffect(() =\u003e {\n    const configureIgniteSdks = async () =\u003e {\n      if (!isConfigured) {\n        try {\n          await refreshConfiguration({\n            apiKey: 'someApiKey',\n            clientName: 'Team 2',\n            primaryColor: '#FF0000'\n          })\n        } catch (e) {\n          console.log(\n            'Account SDK refresh configuration error:',\n            (e as Error).message\n          )\n        }\n      }\n    }\n    configureIgniteSdks()\n  }, [isConfigured, refreshConfiguration])\n\n```\n\n#### Switching Teams\n\nYou can switch teams using the `refreshConfiguration()` method mentioned above. \n\n##### Logout All\n\niOS `logout()` only logs out of the currently configured API key. If you have multiple teams in your app and you would like to logout of all teams at once, you can **replace** `logout()` with `logoutAll()` in your code. Android's `logout()` always logs out of all teams so `logoutAll()` will behave in the exact same way for Android.\n\n`logoutAll()` is only useful if your app has multiple teams/API keys within one app.\n\n\n### TicketsSdkModal (iOS only)\n\nExample:\n\n```typescript\nimport { Pressable, Text } from 'react-native';\nimport { TicketsSdkModal } from 'react-native-ticketmaster-ignite';\n\nconst [showTicketsSdk, setShowTicketsSdk] = useState(false);\n\nconst onShowTicketsSDK = () =\u003e {\n  setShowTicketsSdk(true);\n};\n\nreturn (\n  \u003c\u003e\n    \u003cPressable\n      onPress={() =\u003e onShowTicketsSDK()}\n    \u003e\n      \u003cText\u003eShow Tickets SDK Modal\u003c/Text\u003e\n    \u003c/Pressable\u003e\n    \u003cTicketsSdkModal\n      showTicketsModal={showTicketsSdk}\n      setShowTicketsModal={setShowTicketsSdk}\n    /\u003e\n  \u003c/\u003e\n);\n\n```\n\n### TicketsSdkEmbedded\n\n```typescript\n\nimport { TicketsSdkEmbedded } from 'react-native-ticketmaster-ignite';\n\nreturn \u003cTicketsSdkEmbedded style={{ flex: 1 }} /\u003e;\n```\n\nReact Navigation note: Initially, the altered RN Bottom Tabs View frame height is not available to Native code on iOS, if you notice the embedded SDK view is not fitting inside your RN view with Bottom Tabs on the first render, try adding a 500ms delay to the SDK view:\n\n```typescript\n\nimport { TicketsSdkEmbedded } from 'react-native-ticketmaster-ignite';\n\nreturn \u003cTicketsSdkEmbedded style={{ height: '100%' }} renderTimeDelay={500}/\u003e;\n```\n\n⚠️  Please note that the `renderTimeDelay` prop only affects iOS.\n\nReact Native New Architecture + React Navigation note: There is a bug with android native UI views when New Architecture mode is switched on where the native UI does not take into account the header height from React Navigation. If this happens in your app you can use the `offsetTop` prop to add offset to the top of the native UI.\n\n⚠️ Please note that the `offsetTop` prop only affects Android.\n\nExample: \n```typescript\nreturn \u003cTicketsSdkEmbedded style={{height: '95%', backgroundColor: PRIMARY_COLOR, bottom: 10}} offsetTop={100}/\u003e\n```\n`backgroundColor` \u0026 `bottom` is used to add a backdrop to the `\u003cView/\u003e` that contains the Tickets SDK view so that it matches your screen header colour. This will prevent any white space if you push the SDK view too far down with `offsetTop`. Alternatively you can explicitly set your header height to the same value as the `offsetTop` prop.\n\n### Ticket Deep Links\n\nYou can call `setTicketDeepLink()` to setup a deep link to an order by passing the method an order or event ID.\n\nExample:\n\n```typescript\nconst { setTicketDeepLink } = useIgnite();\n\nsetTicketDeepLink('TICKET_ORDER_OR_EVENT_ID')\n```\n\nYou can then navigate to the component/screen which renders the Tickets SDK and the order with the order ID set will show above the My Tickets SDK view.\n\nIf you are using React Navigation and you want to do multiple deep links within an app session without the user closing the app, you will need to unmount the RN screen/Tickets SDK component and once remounted the ticket will pop up, as the deep link is triggered on Tickets SDK mount.\n\nTo achieve this you can add the below to any screen:\n\n```typescript\nconst isFocused = useIsFocused();\n\nif (!isFocused) {\n  return null;\n}\n```\n\nYou can also create your own global state variables to unmount the screen with logic similar to the above and React Navigation also provides a layout prop where you can wrap a screen with a component that contains your custom logic. See more [here](https://reactnavigation.org/docs/upgrading-from-6.x/#the-unmountonblur-option-is-removed-in-favor-of-poptotoponblur-in-bottom-tab-navigator-and-drawer-navigator)\n\n### Secure Entry View\n\nReplace `SECURE_ENTRY_TOKEN` with a token for a secure entry barcode.\n\nExample:\n\n```typescript\n\nimport { SecureEntry } from 'react-native-ticketmaster-ignite';\n\n\u003cView\u003e\n  \u003cSecureEntry token=\"SECURE_ENTRY_TOKEN\" style={{ flex: 1}} /\u003e\n\u003c/View\u003e\n```\n\nReact Navigation note: Initially, the altered RN Bottom Tabs View frame height is not available to Native code on iOS, if you notice the Secure Entry view is not fitting/not rendering in your RN view with Bottom Tabs on the first render, try adding a 100ms delay to the SDK view:\n\n```typescript\n\nimport { SecureEntry } from 'react-native-ticketmaster-ignite';\n\nreturn \u003cSecureEntry token=\"SECURE_ENTRY_TOKEN\" renderTimeDelay={100}/\u003e;\n```\n\n⚠️  Please note that the `renderTimeDelay` prop only affects iOS.\n\nReact Native New Architecture + React Navigation note: There is a bug with android native UI views when New Architecture mode is switched on where the native UI does not take into account the header height from React Navigation. If this happens in your app you can use the `offsetTop` prop to add offset to the top of the native UI.\n\n⚠️ Please note that the `offsetTop` prop only affects Android.\n\nExample: \n```typescript\nreturn \u003cSecureEntry token=\"SECURE_ENTRY_TOKEN\" style={{flex: 1}} offsetTop={100}/\u003e\n```\n\n### RetailSDK\n\nModule responsible for the purchase and prepurchase flows in the Retail SDK.\n\n##### Events Purchase\n\nPurchase flow (also known as Events Details Page or EDP - see more [here](https://ignite.ticketmaster.com/v1/docs/events-detail-page-edp)) should be used for buying single events by their IDs.\n\nExample:\n\n```typescript\nimport { RetailSDK } from 'react-native-ticketmaster-ignite';\n\nconst onShowPurchase = async () =\u003e {\n  try {\n    RetailSDK.presentPurchase(DEMO_EVENT_ID);\n  } catch (e) {\n    console.log((e as Error).message);\n  }\n};\n```\n\n##### Venue PrePurchase\n\nThe venue prepurchase flow (also known as Venue Details Page or VDP - see more [here](https://ignite.ticketmaster.com/v1/docs/venue-detail-page-vdp)) should be used for showing events for a particular venue. From there, the user will be able to progress with a selected event into the purchase flow.\n\nExample:\n\n```typescript\nimport { RetailSDK } from 'react-native-ticketmaster-ignite';\n\nconst onShowPrePurchaseVenue = async () =\u003e {\n  try {\n    RetailSDK.presentPrePurchaseVenue(DEMO_VENUE_ID);\n  } catch (e) {\n    console.log((e as Error).message);\n  }\n};\n```\n\n##### Attraction PrePurchase\n\nThe attraction prepurchase flow (also known as Attraction Details Page or VDP - see more [here](https://ignite.ticketmaster.com/docs/attraction-detail-page-adp)) should be used for showing events for a particular attraction, eg. a sports team or musicial. From there, the user will be able to progress with a selected event into the purchase flow.\n\nExample:\n\n```typescript\nimport { RetailSDK } from 'react-native-ticketmaster-ignite';\n\nconst onShowPrePurchaseAttraction = async () =\u003e {\n  try {\n    RetailSDK.presentPrePurchaseAttraction(DEMO_ATTRACTION_ID);\n  } catch (e) {\n    console.log((e as Error).message);\n  }\n};\n```\n\n##### Discovery API\n\nTo get data from the discovery API you can call the API directly in your app. To learn more about the Discovery API see [here](https://developer.ticketmaster.com/products-and-docs/apis/discovery-api/v2/).\n\n```typescript\nconst entityIds = ['K8vZ9171o57', 'K8vZ91718XV'].join(',');\n\nuseEffect(() =\u003e {\n  fetch(\n    `https://app.ticketmaster.com/discovery/v2/attractions.json?id=${entityIds}\u0026sort=relevance,desc\u0026size=200\u0026page=${page}\u0026locale=en-us\u0026apikey=${apiKey}`\n  )\n    .then((response) =\u003e response.json())\n    .then((data) =\u003e {\n      console.log(data._embedded.attractions);\n    });\n}, [entityIds, page, apiKey]);\n```\n\n### Prebuilt Modules\n\nTo use prebuilt modules, `IgniteProvider` has a `prebuiltModules` prop which accepts the following object:\n\n```typescript\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n  prebuiltModules={{\n    moreTicketActionsModule: {\n      enabled: true,\n    },\n    venueDirectionsModule: {\n      enabled: true,\n    },\n    seatUpgradesModule: {\n      enabled: true,\n      topLabelText: \"test top label\", // not required\n      bottomLabelText: \"test bottom label\", // not required\n      image: require('../assets/seatUpgradesOverride.png'), // not required\n    },\n    venueConcessionsModule: {\n      enabled: true,\n      orderButtonCallback: () =\u003e {},\n      walletButtonCallback: () =\u003e {},\n      topLabelText: \"test top label\", // not required\n      bottomLabelText: \"test bottom label\", // not required\n      image: require('../assets/venueConcessionsOverride.png'), // not required\n    },\n    invoiceModule: {\n      enabled: true,\n    },\n  }}\n\u003e\n    \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\nYou only need to provide the prebuilt modules you want to display to `prebuiltModules`. Any module omitted will be set to `enabled: false` by default.\nHere is an example of only showing the Venue Directions Module:\n\n```typescript\n prebuiltModules={{\n    venueDirectionsModule: {\n      enabled: true,\n    },\n  }}\n```\n\nTo learn more about Prebuilt Modules see [here](https://ignite.ticketmaster.com/docs/modules-overview). \n\n#### Customising Prebuilt Modules\n\nThe `seatUpgradesModule` and `venueConcessionsModule` can be further customised - you can select the custom labels and images for both sections.\n\n##### Custom Labels\n\nYou can: \n- Pass custom `topLabelText` and/or `bottomLabelText` to display a custom text\n- Pass empty strings in `topLabelText` and/or `topLabelText` to hide the labels\n- Omit `topLabelText` and/or `topLabelText` to show their default values\n\nOn Android you can only customise the `topLabelText` for `seatUpgradesModule`. If you pass custom `bottomLabelText` it will only be used on iOS. See the example use cases below. \n\n##### Custom Images\n\nYou can select custom images for `seatUpgradesModule` and `venueConcessionsModule` by pulling the image with `require()` and passing it as a prop. The example app included in this library uses custom images to demo the usage. \n\n| Platform | Default view | Custom view | Empty strings |\n|----------|----------|----------|----------|\n| ios    | \u003cimg src=\"docs/assets/prebuilt_modules_customisation/ios_default.png\" width=\"150\"\u003e   | \u003cimg src=\"docs/assets/prebuilt_modules_customisation/ios_custom.png\" width=\"150\"\u003e   |\u003cimg src=\"docs/assets/prebuilt_modules_customisation/ios_empty_strings.png\" width=\"150\"\u003e   |\n| android    | \u003cimg src=\"docs/assets/prebuilt_modules_customisation/android_default.png\" width=\"150\"\u003e   | \u003cimg src=\"docs/assets/prebuilt_modules_customisation/android_custom.png\" width=\"150\"\u003e   |\u003cimg src=\"docs/assets/prebuilt_modules_customisation/android_empty_strings.png\" width=\"150\"\u003e   |\n\n### Custom Modules\n\nYou can configure up to 3 buttons as a custom module. Each button accepts a callback function. Currently a header view above the buttons is not available for configuration in this library.\n\n```typescript\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n  customModules={{\n    button1: {\n      enabled: true,\n      title: 'My Button 1',\n      callback: () =\u003e console.log('Button 1 called!'),\n    },\n    button2: {\n      enabled: true,\n      title: 'My Button 2',\n      callback: () =\u003e console.log('Button 2 called!'),\n    },\n    button3: {\n      enabled: true,\n      title: 'My Button 3',\n      callback: () =\u003e console.log('Button 3 called!'),\n    },\n  }}\n\u003e\n  \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\nSingle button example:\n\n```typescript\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n  customModules={{\n    button1: {\n      enabled: true,\n      title: 'My Button 1',\n      callback: () =\u003e console.log('Button 1 called!'),\n    },\n  }}\n\u003e\n  \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\n| iOS    | Android|\n| ------ | ------ |\n|   \u003cimg src=\"docs/assets/custom-modules/ios-single-button.png\" width=\"150\"\u003e     |   \u003cimg src=\"docs/assets/custom-modules/android-single-button.png\" width=\"150\"\u003e     |\n|   \u003cimg src=\"docs/assets/custom-modules/ios-multi-buttons.png\" width=\"150\"\u003e     |    \u003cimg src=\"docs/assets/custom-modules/android-multi-buttons.png\" width=\"150\"\u003e    |\n\n### Analytics\n\nYou can send a callback method to `IgniteProvider` to receive Ignite SDK analytics in your app which you can then send off to your chosen analytics service.\n\nTo see the full list of available analytics in this library see: [Analytics](./docs/analytics.md)\n\n```typescript\nimport { IgniteProvider, IgniteAnalytics, IgniteAnalyticName } from 'react-native-ticketmaster-ignite';\n\nconst igniteAnalytics = async (data: IgniteAnalytics) =\u003e {\n    const key = Object.keys(data)[0];\n    switch (key) {\n      case IgniteAnalyticName.PURCHASE_SDK_DID_BEGIN_TICKET_SELECTION_FOR:\n        console.log(\n          'EDP started for',\n          data.purchaseSdkDidBeginTicketSelectionFor.eventName\n        );\n    }\n  };\n\n\u003cIgniteProvider\n  options={{\n    apiKey: API_KEY,\n    clientName: CLIENT_NAME,\n    primaryColor: PRIMARY_COLOR\n  }}\n  analytics={igniteAnalytics}\n\u003e\n    \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\n#### Navigate to a Tickets Tab after purchase\n\nThis example uses [React Navigation](https://reactnavigation.org/docs/6.x/navigating-without-navigation-prop) and Redux Toolkit, you'll have to replace those code lines with your chosen navigation and state management methods.\n\n```typescript\nimport {\n  IgniteAnalytics,\n  IgniteAnalyticName,\n} from 'react-native-ticketmaster-ignite';\nimport * as RootNavigation from './RootNavigation';\nimport { store } from '../redux/store';\nimport { setExampleValue } from '../redux/slices/example';\n\nconst igniteAnalytics = async (data: IgniteAnalytics) =\u003e {\n  const key = Object.keys(data)[0];\n  switch (key) {\n    // iOS\n    case IgniteAnalyticName.PURCHASE_SDK_DID_END_CHECKOUT_FOR:\n      if (\n        data.purchaseSdkDidEndCheckoutFor.reason === 'userCompletedPurchase'\n      ) {\n        store.dispatch(setExampleValue('Random Value')); // Example - Not needed for navigation\n        RootNavigation.navigate('BottomTabs', {\n          screen: 'MY TICKETS',\n        });\n      }\n      break;\n    // Android\n    case IgniteAnalyticName.PURCHASE_SDK_MANAGE_MY_TICKETS:\n      RootNavigation.navigate('BottomTabs', {\n        screen: 'MY TICKETS',\n      });\n      break;\n  }\n};\n```\n\n### Debugging/Logging\n\nTo turn on useful logging to inspect data and for debugging you can turn on logging by passing `true` to the `enableLogs` prop on `IgniteProvider`\n\n```typescript\n\u003cIgniteProvider enableLogs={true}\u003e\n  \u003cApp /\u003e\n\u003c/IgniteProvider\u003e\n```\n\nOr use callbacks/exceptions/analytics/returned method data to create your own debug logs\n\nExample Accounts SDK configuration callback log example:\n\n```typescript\n  const { refreshConfiguration } = useIgnite()\n\nconst onConfigurationSuccess = () =\u003e\n  console.log('Accounts SDK configuration successful');\n\n useEffect(() =\u003e {\n    const configureIgniteSdks = async () =\u003e {\n      try {\n        await refreshConfiguration({\n          apiKey: 'someApiKey',\n          clientName: 'Team 2',\n          primaryColor: '#FF0000',\n          onSuccess: onConfigurationSuccess,\n        })\n      } catch (e) {\n        console.log(\n          'Account SDK refresh configuration error:',\n          (e as Error).message\n        )\n      }\n    }\n    configureIgniteSdks()\n  }, [refreshConfiguration])\n```\n\n\nAs the initial Accounts SDK configuration is done for your app via `IgniteProvider`, any failures in this process will still be logged, as if the Accounts SDK configuration fails then none of the Ignite SDK's will work in your application.\n\n\nOn any logs of `TicketmasterFoundation.ConnectionError error` see [here](https://github.com/ticketmaster/react-native-ticketmaster-ignite?tab=readme-ov-file#refresh-token)\n\n\n## Running the example app\n\nTo run the demo/example app:\n\nClone the project and then\n\n```bash\ncd react-native-ticketmaster-ignite\nyarn\ncd example/ios\npod install\nyarn start\n```\n\n## Environment variables\n\nIn order to use the library, setup a developer account with Ticketmaster by contacting nexus_sdk@ticketmaster.com.\n\nFor the Retail SDK (PrePurchase and Purchase) views, you will need to be provided with your own attraction or venue ID's for events and venue, representatives from nexus_sdk@ticketmaster.com should be able to help with this. For the purpose of initial testing you can use the below.\n\n\nReplace \"someApiKey\" with the API keys from your Ticketmaster Developer Account. (iOS and Android need different API keys, see the example at the end of this section)\nReplace \"clientName\" with your company name, for example \"My Company Name\". You can set this in the `options` prop of `\u003cIgniteProvider\u003e`.\nReplace \"#026cdf\" with the main color theme of your app.\n\n\nIf running in the `example` app you can create a `.env` with these values or update the codebase with your desired values.\n\n```bash\nAPI_KEY=someApiKey\nCLIENT_NAME=clientName\nPRIMARY_COLOR=#026cdf\nDEMO_EVENT_ID=1700626DC66F3CA7\nDEMO_ATTRACTION_ID=2873404\nDEMO_VENUE_ID=KovZpZAEdntA\n```\n\n\nYou need to use a different key for iOS and Android, you can make the value for API_KEY and object `API_KEY={KeyName_ios: abcde, KeyName_android: abcdefg}` and in your RN code you can use `Platform.OS` to select the right KeyName to pass to the SDK. Example:\n\n\nLibrary choice for environment variables is optional\n\n```typescript\nimport Config from 'react-native-config'\n\nconst apiKeyJson = JSON.parse(Config.API_KEY)\n\n\u003cIgniteProvider\n  options={{\n   apiKey:\n    apiKeyJson[`KeyName_${Platform.OS}`] || '',\n...\n```\n\nNote: If you change the API key in an .env for iOS you need to **Product** \u003e **Clean Build Folder** for the change to take affect\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fticketmaster%2Freact-native-ticketmaster-ignite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fticketmaster%2Freact-native-ticketmaster-ignite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fticketmaster%2Freact-native-ticketmaster-ignite/lists"}