CINXE.COM
Advanced Push Notification Implementation for iOS (Optional)
<!DOCTYPE html> <html lang="en"> <head> <title>Advanced Push Notification Implementation for iOS (Optional)</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="google-site-verification" content="kI0o3QRqDw5zhtd9W5umZTzLTDe6X1tp-gybtFg_7bQ" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="robots" content="noindex, nofollow" > <link rel="icon" type="image/x-icon" href="/docs/assets/favicon.ico" sizes="160x160"> <meta name="description" content="This advanced implementation guide covers how to leverage iOS push notification content app extensions to get the most out of your push messages. Also included..."> <link rel="canonical" href="https://www.braze.com/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/implementation_guide/"> <meta name="keywords" content="braze, docs, documentation, appboy, academy, developer guide, platform integration guides, legacy sdks, ios, push notifications, implementation guide "> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "url": "https://www.braze.com/docs", "potentialAction": { "@type": "SearchAction", "target": { "@type": "EntryPoint", "urlTemplate": "https://www.braze.com/docs/search/?query={search_term_string}" }, "query-input": "required name=search_term_string" } } </script> <link href="/docs/assets/css/bootstrap.css" rel="stylesheet" /> <link type="text/css" rel="stylesheet" href="//fast.fonts.net/cssapi/34a7ffbc-6962-4ab8-b4f5-9aa2b4258efc.css"/> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto"> <!-- link rel="stylesheet" href="//use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous" --> <link href="/docs/assets/css/fontawesome.css" rel="stylesheet" /> <script type="text/javascript" src="/docs/assets/js/jquery-3.3.1.js"></script> <script type="text/javascript" src="/docs/assets/js/bootstrap.js"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} // Set default consent for opt-in regions gtag('consent', 'default', { ad_storage: 'denied', analytics_storage: 'denied', functionality_storage: 'denied', personalization_storage: 'denied', security_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied', region: ['DE','NO','BE','FI','PT','BG','JP','DK','LT','LU','HR','LV','FR','HU','SE','SI','MC','SK','MF','SM','GB','YT','IE','GF','EE','MQ','KR','MT','GP','IS','GR','IT','ES','AR','AT','RE','CY','AX','CZ','PL','LI','RO','NL'], wait_for_update: 500 }); // Set default consent for all other regions gtag('consent', 'default', { ad_storage: 'granted', analytics_storage: 'granted', functionality_storage: 'granted', personalization_storage: 'granted', security_storage: 'granted', ad_user_data: 'granted', ad_personalization: 'granted', wait_for_update: 500 }); </script> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-W8DKT4D');</script> <script type="text/javascript"> +function(a,p,P,b,y){a.braze={};a.brazeQueue=[];for(var s="BrazeSdkMetadata DeviceProperties Card Card.prototype.dismissCard Card.prototype.removeAllSubscriptions Card.prototype.removeSubscription Card.prototype.subscribeToClickedEvent Card.prototype.subscribeToDismissedEvent Card.fromContentCardsJson Banner CaptionedImage ClassicCard ControlCard ContentCards ContentCards.prototype.getUnviewedCardCount Feed Feed.prototype.getUnreadCardCount ControlMessage InAppMessage InAppMessage.SlideFrom InAppMessage.ClickAction InAppMessage.DismissType InAppMessage.OpenTarget InAppMessage.ImageStyle InAppMessage.Orientation InAppMessage.TextAlignment InAppMessage.CropType InAppMessage.prototype.closeMessage InAppMessage.prototype.removeAllSubscriptions InAppMessage.prototype.removeSubscription InAppMessage.prototype.subscribeToClickedEvent InAppMessage.prototype.subscribeToDismissedEvent InAppMessage.fromJson FullScreenMessage ModalMessage HtmlMessage SlideUpMessage User User.Genders User.NotificationSubscriptionTypes User.prototype.addAlias User.prototype.addToCustomAttributeArray User.prototype.addToSubscriptionGroup User.prototype.getUserId User.prototype.incrementCustomUserAttribute User.prototype.removeFromCustomAttributeArray User.prototype.removeFromSubscriptionGroup User.prototype.setCountry User.prototype.setCustomLocationAttribute User.prototype.setCustomUserAttribute User.prototype.setDateOfBirth User.prototype.setEmail User.prototype.setEmailNotificationSubscriptionType User.prototype.setFirstName User.prototype.setGender User.prototype.setHomeCity User.prototype.setLanguage User.prototype.setLastKnownLocation User.prototype.setLastName User.prototype.setPhoneNumber User.prototype.setPushNotificationSubscriptionType InAppMessageButton InAppMessageButton.prototype.removeAllSubscriptions InAppMessageButton.prototype.removeSubscription InAppMessageButton.prototype.subscribeToClickedEvent FeatureFlag FeatureFlag.prototype.getStringProperty FeatureFlag.prototype.getNumberProperty FeatureFlag.prototype.getBooleanProperty automaticallyShowInAppMessages destroyFeed hideContentCards showContentCards showFeed showInAppMessage toggleContentCards toggleFeed changeUser destroy getDeviceId initialize isPushBlocked isPushPermissionGranted isPushSupported logCardClick logCardDismissal logCardImpressions logContentCardImpressions logContentCardClick logContentCardsDisplayed logCustomEvent logFeedDisplayed logInAppMessageButtonClick logInAppMessageClick logInAppMessageHtmlClick logInAppMessageImpression logPurchase openSession requestPushPermission removeAllSubscriptions removeSubscription requestContentCardsRefresh requestFeedRefresh refreshFeatureFlags requestImmediateDataFlush enableSDK isDisabled setLogger setSdkAuthenticationSignature addSdkMetadata disableSDK subscribeToContentCardsUpdates subscribeToFeedUpdates subscribeToInAppMessage subscribeToSdkAuthenticationFailures toggleLogging unregisterPush wipeData handleBrazeAction subscribeToFeatureFlagsUpdates getAllFeatureFlags".split(" "),i=0;i<s.length;i++){for(var m=s[i],k=a.braze,l=m.split("."),j=0;j<l.length-1;j++)k=k[l[j]];k[l[j]]=(new Function("return function "+m.replace(/\./g,"_")+"(){window.brazeQueue.push(arguments); return true}"))()}window.braze.getCachedContentCards=function(){return new window.braze.ContentCards};window.braze.getCachedFeed=function(){return new window.braze.Feed};window.braze.getUser=function(){return new window.braze.User};window.braze.getFeatureFlag=function(){return new window.braze.FeatureFlag};(y=p.createElement(P)).type='text/javascript'; y.src='https://js.appboycdn.com/web-sdk/4.8/braze.min.js'; y.async=1;(b=p.getElementsByTagName(P)[0]).parentNode.insertBefore(y,b) }(window,document,'script'); (function(){ braze.initialize('5b26b83b-aa4e-4bd1-b9fa-81880aa8ac83', { enableLogging: false, allowUserSuppliedJavascript: true, sessionTimeoutInSeconds: 300, baseUrl: 'sdk.iad-01.braze.com', doNotLoadFontAwesome: true }); var app_valid_paths = { 'docs' : true } function section_replace(removestr,valid_paths){ var reg_str = ''; $.each(valid_paths,function(k,v){ if (reg_str){ reg_str += '|'; } reg_str += '/' + k + '/'; }); return removestr.replace(new RegExp(reg_str),'') } braze.automaticallyShowInAppMessages(); var testfeed = true; // Fallback to show content cards upon update braze.subscribeToContentCardsUpdates(function(feed) { if (feed.cards.length > 0 && testfeed) { $('#cc_prompt').show(); testfeed = false; } }); braze.openSession(); var paths = window.location.pathname.split('/'); if (paths.length > 2 ) { var doc_base = paths[1].toLowerCase(); var val_path = app_valid_paths[doc_base]; if (val_path){ var section = section_replace(window.location.pathname,app_valid_paths); braze.logCustomEvent( doc_base + '_page', { url: window.location.href, section: section, hash: window.location.hash, anchor: window.location.hash.split('?')[0] }); } } // Test if there are any content cards var curcards = braze.getCachedContentCards(); if ('cards' in curcards) { if (curcards['cards'].length > 0) { $('#cc_prompt').show(); testfeed = false; } // Currently no cache content card, refresh else { braze.requestContentCardsRefresh(); } } })(); </script> <link type="text/css" rel="stylesheet" href="/docs/assets/css/swiper.css" /> <link type="text/css" rel="stylesheet" href="/docs/assets/css/algolia_theme.css" /><link href='/docs/assets/global-e8de6c13241c14e6d47cc5e159500ae8.css' rel='stylesheet' type='text/css' /><script type="text/javascript"> const page_collection = 'developer_guide'; const page_collection_title = 'Developer Guide'; const page_collection_default_path = 'home/'; const site_language = 'en'; const site_i18n = {}; site_i18n['next'] = 'NEXT'; site_i18n['previous'] = 'PREVIOUS'; site_i18n['popular_topic'] = 'Popular Topics'; site_i18n['helpful_resources'] = 'Helpful Resources'; site_i18n['braze_status'] = 'BRAZE SYSTEM STATUS'; site_i18n['braze_status_check'] = 'Checking Braze Status'; site_i18n['edit_github'] = 'Edit this page on GitHub'; site_i18n['page_nav_title'] = 'On this page'; site_i18n['helpful'] = 'HOW HELPFUL WAS THIS PAGE?';</script> <script type="text/javascript" src="/docs/assets/js/clipboard.js"></script> <script type='text/javascript' src='/docs/assets/js/jquery.mark.js' ></script> <script src='/docs/assets/global-f57726d814497eb28dbbf249f1433c0b.js' type='text/javascript'></script> <script type='text/javascript' src='/docs/assets/js/swiper.js' ></script> <script type='text/javascript' src='/docs/assets/js/algolia_search.js?1732651925' ></script> <script type="text/javascript"> const { autocomplete,getAlgoliaResults, createAutocomplete } = window['@algolia/autocomplete-js']; const { createAlgoliaInsightsPlugin } = window['@algolia/autocomplete-plugin-algolia-insights']; const searchClient = algoliasearch('1T770XQJ1A', 'ef2b60b317325b3227caabd0c9431d4b'); insightsClient('init', { appId: '1T770XQJ1A', apiKey: 'ef2b60b317325b3227caabd0c9431d4b' }); insightsClient('setUserToken', algolia_user); const algoliaInsightsPluginHeader = createAlgoliaInsightsPlugin({ insightsClient, onItemsChange({ insights, insightsEvents }) { const events = insightsEvents.map((insightsEvent) => ({ ...insightsEvent, eventName: 'Viewed from Header Search', })); insights.viewedObjectIDs(...events); }, onSelect({ insights, insightsEvents }) { const events = insightsEvents.map((insightsEvent) => ({ ...insightsEvent, eventName: 'Clicked from Header Search', })); insights.clickedObjectIDsAfterSearch(...events); }, }); const algoliaInsightsPluginMain = createAlgoliaInsightsPlugin({ insightsClient, onItemsChange({ insights, insightsEvents }) { const events = insightsEvents.map((insightsEvent) => ({ ...insightsEvent, eventName: 'Viewed from Home Search', })); insights.viewedObjectIDs(...events); }, onSelect({ insights, insightsEvents }) { const events = insightsEvents.map((insightsEvent) => ({ ...insightsEvent, eventName: 'Clicked from Home Search', })); insights.clickedObjectIDsAfterSearch(...events); }, }); const instant_search = instantsearch({ indexName: 'DocSearch', searchClient, }); var algolia_debug = false; var base_url = '/docs'; var toc_minheaders = 2 ; var toc_headers = 'h2, h3'; var algolia_doc_index = 'DocSearch'; var algolia_learning_index = 'BrazeLearningCourses'; </script> <!-- Adds LaTeX support --> <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"> </script> </head> <body data-spy="scroll" data-target="#toc" > <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W8DKT4D" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <main> <a class="skip-main" href="#content_start">Skip to content</a> <!-- OneTrust Cookies Consent Notice start for braze.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="a4189af1-fcc1-4ec1-9f51-e3bc768c6650"></script> <script type="text/javascript"> function OptanonWrapper() { } </script> <!-- OneTrust Cookies Consent Notice end for braze.com --> <header id="header_nav" > <nav class="navbar navbar-expand-md flex-column-md flex-md-row navbar-dark" aria-label="Header Navigation" title="Header Navigation"> <div id="header_wrapper"> <div id="nav_logo"> <a id="logo" href="/docs/"><img src="/docs/assets/img/logos/braze-logo-white.svg" alt="Braze"></a> <a id="icon_logo" href="/docs/"><img src="/docs/assets/img/logos/braze-logo-monogram-purple.svg" alt="Braze"></a> </div> <div class="navbarCollapse d-none d-md-block" id="header_navbar" > <ul class="navbar-nav" id="header_menu"><li class="nav-item "> <a class="nav-link" href="/docs/user_guide/introduction/"><div>User Guide</div></a> </li><li class="nav-item active"> <a class="nav-link" href="/docs/developer_guide/home/"><div>Developer Guide</div></a> </li><li class="nav-item "> <a class="nav-link" href="/docs/api/home/"><div>API</div></a> </li><li class="nav-item "> <a class="nav-link" href="/docs/partners/home/"><div>Technology Partners</div></a> </li><li class="nav-item "> <a class="nav-link" href="/docs/help/home/"><div>Help</div></a> </li><li> <ul id="braze_header_lang"> <li class="nav-item nav-item-lang-li"> <div id="nav-item-lang"> <label for="lang_select"><i class="fa-solid fa-globe">‍</i> </label> <select class="lang-select" id="lang_select" aria-label="language select"> <option value="en">EN</option> <option value="es">ES</option> <option value="fr">FR</option> <option value="ja">JA</option> </select> </div> </li> </ul> </li> </ul> </div><div class="navbarCollapse d-md-none" id="dropdown_navbar"> <div id="dropdown_navbar_lang"> <label for="lang_select"><i class="fa-solid fa-globe">‍</i> </label> <select class="lang-select" id="lang_select_responsive" aria-label="language select"> <option value="en">EN</option> <option value="es">ES</option> <option value="fr">FR</option> <option value="ja">JA</option> </select> </div> <ul class="navbar-nav " id="dropdown_menu"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="nav_responsive_dropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <div>Developer Guide</div> <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"> <path d="M4.5 9L7.5 6L4.5 3" stroke="#FDA4FB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> </svg> </a> <div class="dropdown-menu" aria-labelledby="nav_responsive_dropdown"><a class="dropdown-item " href="/docs/"><div>Home</div></a><a class="dropdown-item " href="/docs/user_guide/introduction/"><div>User Guide</div></a><a class="dropdown-item active" href="/docs/developer_guide/home/"><div>Developer Guide</div></a><a class="dropdown-item " href="/docs/api/home/"><div>API</div></a><a class="dropdown-item " href="/docs/partners/home/"><div>Technology Partners</div></a><a class="dropdown-item " href="/docs/help/home/"><div>Help</div></a><hr /> <a class="dropdown-item" target="_blank" href="https://www.braze.com"><div>braze.com</div><i class="fa-solid fa-up-right-from-square"></i></a> </div> </li> </ul> </div> </div> <div id="navbar-search"> <script src="/docs/assets/js/algolia_header_search.js?1732651925" ></script> <div class="flex-row ml-auto d-flex" id="search-form_div"> <div id="header-search-form"></div> <div id="header-search-panel"></div> </div> <div class="navbar-nav" id="site-link"><a class="nav-link" href="https://braze.com"><div>braze.com</div><i class="fa-solid fa-up-right-from-square"></i></a></div> </div> <button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#nav_bar" aria-controls="nav_bar" aria-expanded="false" aria-label="Toggle navigation" id="header_toggle"> <span class="burger burger-1"></span><span class="burger burger-2"></span><span class="burger burger-3"></span><span class="burger burger-4"></span> </button> </nav> </header> <div class="container-fluid" > <div class="row flex-xl-nowrap d-print-block "> <!-- button id="sidebar_toggle" class="btn btn-info d-print-none" data-toggle="collapse" aria-expanded="true" href="#nav_bar" > <i class="fas"></i> </button --> <div class="col-sm-12 col-md-3 col-lg-3 col-xl-2 d-print-none collapse d-md-block" id="nav_bar" > <div id="nav_col" class=" "> <button id="sidebar_toggle" class="btn btn-info d-print-none" href="#" aria-label="Side Navigation Toggle" title="Side Navigation Toggle"> <i class="fas fa-chevron-left"></i> </button><div id="nav_filter" class="flex-column flex-nowrap "> <form id="filter-form" > <div class="input-group"> <input type="text" class="form-control has-clear " name="nav_filter_input" id="nav_filter_input" placeholder="Filter Topics..." aria-label="Filter" /> <div class="input-group-append"> <i id="filter-action" class="fa"></i> </div> </div> </form> </div><nav class="bd-links navbar navbar-expand-lg navbar-light" id="left_navmenu" aria-label="Left Navigation" title="Left Navigation"><div id="filter-msg" class="flex-column flex-nowrap d-none"></div><div class='nav flex-column flex-nowrap collapse show' id='nav_top' > <div class='nav-item ' id='parent_nav_home' data-parent='parent_nav_top'><div class='nav_reg' data-parent='parent_nav_top'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/home/' class='nav_link' data-parent='parent_nav_top' aria-label='Home'> <div class='nav_title'>Home</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted' data-parent='parent_nav_top'><div class='nav_url' data-parent='parent_nav_top'><a tabindex='-1' href='#nav_top_gettingstarted' aria-label='Getting Started' data-toggle='collapse' data-target='#nav_top_gettingstarted' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/' class='nav_link' data-parent='parent_nav_top' aria-label='Getting Started'> <div class='nav_title'>Getting Started</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_gettingstarted' > <div class='nav-item ' id='parent_nav_top_gettingstarted_sdkoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/sdk_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='SDK Overview'> <div class='nav_title'>SDK Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted_platformoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/platform_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='Platform Overview'> <div class='nav_title'>Platform Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted_integrationoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/integration_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='Integration Overview'> <div class='nav_title'>Integration Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted_architectureoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/architecture_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='Architectural Overview'> <div class='nav_title'>Architectural Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted_analyticsoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/analytics_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='Analytics Overview'> <div class='nav_title'>Analytics Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_gettingstarted_customizationoverview' data-parent='parent_nav_top_gettingstarted'><div class='nav_reg' data-parent='parent_nav_top_gettingstarted'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/getting_started/customization_overview/' class='nav_link' data-parent='parent_nav_top_gettingstarted' aria-label='Customization Overview'> <div class='nav_title'>Customization Overview</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_featureflags' data-parent='parent_nav_top'><div class='nav_url' data-parent='parent_nav_top'><a tabindex='-1' href='#nav_top_featureflags' aria-label='Feature Flags' data-toggle='collapse' data-target='#nav_top_featureflags' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/' class='nav_link' data-parent='parent_nav_top' aria-label='Feature Flags'> <div class='nav_title'>Feature Flags</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_featureflags' > <div class='nav-item ' id='parent_nav_top_featureflags_about' data-parent='parent_nav_top_featureflags'><div class='nav_reg' data-parent='parent_nav_top_featureflags'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/about/' class='nav_link' data-parent='parent_nav_top_featureflags' aria-label='About Feature Flags'> <div class='nav_title'>About Feature Flags</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_featureflags_create' data-parent='parent_nav_top_featureflags'><div class='nav_reg' data-parent='parent_nav_top_featureflags'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/create/' class='nav_link' data-parent='parent_nav_top_featureflags' aria-label='Creating Feature Flags'> <div class='nav_title'>Creating Feature Flags</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_featureflags_canvas' data-parent='parent_nav_top_featureflags'><div class='nav_reg' data-parent='parent_nav_top_featureflags'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/canvas/' class='nav_link' data-parent='parent_nav_top_featureflags' aria-label='Feature Flags in Canvas'> <div class='nav_title'>Feature Flags in Canvas</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_featureflags_experiments' data-parent='parent_nav_top_featureflags'><div class='nav_reg' data-parent='parent_nav_top_featureflags'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/experiments/' class='nav_link' data-parent='parent_nav_top_featureflags' aria-label='Feature Flag Experiments'> <div class='nav_title'>Feature Flag Experiments</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_featureflags_faq' data-parent='parent_nav_top_featureflags'><div class='nav_reg' data-parent='parent_nav_top_featureflags'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/feature_flags/faq/' class='nav_link' data-parent='parent_nav_top_featureflags' aria-label='FAQ'> <div class='nav_title'>FAQ</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_contentcards' data-parent='parent_nav_top'><div class='nav_url' data-parent='parent_nav_top'><a tabindex='-1' href='#nav_top_contentcards' aria-label='Content Cards' data-toggle='collapse' data-target='#nav_top_contentcards' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/' class='nav_link' data-parent='parent_nav_top' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_contentcards' > <div class='nav-item ' id='parent_nav_top_contentcards_customizingstyles' data-parent='parent_nav_top_contentcards'><div class='nav_reg' data-parent='parent_nav_top_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/customizing_styles/' class='nav_link' data-parent='parent_nav_top_contentcards' aria-label='Customizing Card Styles'> <div class='nav_title'>Customizing Card Styles</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_contentcards_customizingbehavior' data-parent='parent_nav_top_contentcards'><div class='nav_reg' data-parent='parent_nav_top_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/customizing_behavior/' class='nav_link' data-parent='parent_nav_top_contentcards' aria-label='Customizing Card Behavior'> <div class='nav_title'>Customizing Card Behavior</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_contentcards_customizingfeed' data-parent='parent_nav_top_contentcards'><div class='nav_reg' data-parent='parent_nav_top_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/customizing_feed/' class='nav_link' data-parent='parent_nav_top_contentcards' aria-label='Customizing Feed'> <div class='nav_title'>Customizing Feed</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_contentcards_logginganalytics' data-parent='parent_nav_top_contentcards'><div class='nav_reg' data-parent='parent_nav_top_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/logging_analytics/' class='nav_link' data-parent='parent_nav_top_contentcards' aria-label='Logging Analytics'> <div class='nav_title'>Logging Analytics</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_contentcards_creatingcustomcontentcards' data-parent='parent_nav_top_contentcards'><div class='nav_reg' data-parent='parent_nav_top_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/content_cards/creating_custom_content_cards/' class='nav_link' data-parent='parent_nav_top_contentcards' aria-label='Creating Custom Content Cards'> <div class='nav_title'>Creating Custom Content Cards</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_sendingtestmessages' data-parent='parent_nav_top'><div class='nav_reg' data-parent='parent_nav_top'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/sending_test_messages/' class='nav_link' data-parent='parent_nav_top' aria-label='Sending Test Messages'> <div class='nav_title'>Sending Test Messages</div></a></div></div> </div> <div class='nav-item active_parent ' id='parent_nav_top_platformintegrationguides' data-parent='parent_nav_top'> <div class='nav_url' data-parent='parent_nav_top'><a tabindex='-1' href='#nav_top_platformintegrationguides' data-toggle='collapse' data-target='#nav_top_platformintegrationguides' class='nav_toggle ' aria-expanded='true' data-parent='parent_nav_top' aria-label='Platforms'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Platforms</div></a></div></div></div> <div class='nav flex-column flex-nowrap show' id='nav_top_platformintegrationguides' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_android' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Android and FireOS'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Android and FireOS</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_initialsdksetup' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_initialsdksetup' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Initial SDK Setup'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Initial SDK Setup</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_initialsdksetup' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup_androidsdkintegration' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/android_sdk_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup' aria-label='Android SDK Integration'> <div class='nav_title'>Android SDK Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup_testyourbasicintegration' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/test_your_basic_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup' aria-label='Test Your Basic Integration'> <div class='nav_title'>Test Your Basic Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup_additionalcustomizationandconfiguration' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/additional_customization_and_configuration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup' aria-label='Other SDK Customizations'> <div class='nav_title'>Other SDK Customizations</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup_accessibility' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/accessibility/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup' aria-label='Accessibility'> <div class='nav_title'>Accessibility</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_initialsdksetup_optionalgaidcollection' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/initial_sdk_setup/optional_gaid_collection/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_initialsdksetup' aria-label='Google Advertising ID (Optional)'> <div class='nav_title'>Google Advertising ID (Optional)</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Push Notifications'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Push Notifications</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications_android' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications_android' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications' aria-label='Android'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Android</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications_android' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications_android_integration' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications_android_integration' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Integration'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Integration</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications_android_integration' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration_standardintegration' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/integration/standard_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration' aria-label='Standard Integration'> <div class='nav_title'>Standard Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration_huaweiintegration' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/integration/huawei_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_integration' aria-label='Huawei Integration'> <div class='nav_title'>Huawei Integration</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications_android_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications_android_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications_android_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization_inlineimagepush' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/customization/inline_image_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization' aria-label='Inline Image Push'> <div class='nav_title'>Inline Image Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization_htmlrenderedpush' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/customization/html_rendered_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization' aria-label='HTML Push Notifications'> <div class='nav_title'>HTML Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization_advancedsettings' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/customization/advanced_settings/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization' aria-label='Advanced Settings'> <div class='nav_title'>Advanced Settings</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization_customeventcallback' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/customization/custom_event_callback/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android_customization' aria-label='Push Event Callback'> <div class='nav_title'>Push Event Callback</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_silentpushnotifications' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/silent_push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Silent Push Notifications'> <div class='nav_title'>Silent Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_pushstory' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/push_story/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Push Stories'> <div class='nav_title'>Push Stories</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_conversationpush' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/conversation_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Conversation Push'> <div class='nav_title'>Conversation Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_androidtvpush' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/android_tv_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Android TV Push'> <div class='nav_title'>Android TV Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_implementationguide' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Advanced Implementation Guide (Optional)'> <div class='nav_title'>Advanced Implementation Guide (Optional)</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_migratingtofirebasecloudmessaging' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/migrating_to_firebase_cloud_messaging/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Migrating to Firebase Cloud Messaging'> <div class='nav_title'>Migrating to Firebase Cloud Messaging</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_android_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/android/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_android' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications_fireos' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications_fireos' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications' aria-label='FireOS'><i class='fas'></i><div class='nav_block'><div class='nav_title'>FireOS</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications_fireos' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_integration' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_customization' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_pushnotifications_fireos_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_pushnotifications_fireos_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_pushnotifications_fireos_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_customization_advancedsettings' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/customization/advanced_settings/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_customization' aria-label='Advanced Settings'> <div class='nav_title'>Advanced Settings</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_silentpushnotifications' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/silent_push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Silent Push Notifications'> <div class='nav_title'>Silent Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_pushstory' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/push_story/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Push Stories'> <div class='nav_title'>Push Stories</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_testing' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/testing/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Testing'> <div class='nav_title'>Testing</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/push_notifications/fireos/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_pushnotifications_fireos' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div></div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_inappmessaging' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_inappmessaging' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='In-App Messaging'><i class='fas'></i><div class='nav_block'><div class='nav_title'>In-App Messaging</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_inappmessaging' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_integration' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_inappmessaging_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_inappmessaging_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_customlisteners' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/custom_listeners/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Custom Listeners'> <div class='nav_title'>Custom Listeners</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_messagedismissal' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/message_dismissal/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Message Dismissal'> <div class='nav_title'>Message Dismissal</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_keyvaluepairs' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/key_value_pairs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Key-Value Pairs'> <div class='nav_title'>Key-Value Pairs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_gifs' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/gifs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='GIFs'> <div class='nav_title'>GIFs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_youtubeinhtml' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/youtube_in_html/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='YouTube in HTML'> <div class='nav_title'>YouTube in HTML</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_customization_googlereviewprompt' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/customization/google_review_prompt/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging_customization' aria-label='Google Play Review Prompt'> <div class='nav_title'>Google Play Review Prompt</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_inappmessagedelivery' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/in-app_message_delivery/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='In-App Message Delivery'> <div class='nav_title'>In-App Message Delivery</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_ottdevices' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/ott_devices/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='OTT and TV Display'> <div class='nav_title'>OTT and TV Display</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_implementationguide' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='Advanced Implementation Guide (Optional)'> <div class='nav_title'>Advanced Implementation Guide (Optional)</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_inappmessaging_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/in-app_messaging/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_inappmessaging' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_contentcards' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_contentcards' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_contentcards' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Content Cards'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Content Cards</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_contentcards' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_contentcards_integration' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/content_cards/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_contentcards' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_contentcards_jetpackcompose' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/content_cards/jetpackcompose/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_contentcards' aria-label='Jetpack Compose'> <div class='nav_title'>Jetpack Compose</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_contentcards_gifs' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/content_cards/GIFs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_contentcards' aria-label='GIFs'> <div class='nav_title'>GIFs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_contentcards_implementationguide' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/content_cards/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_contentcards' aria-label='Advanced Implementation Guide (Optional)'> <div class='nav_title'>Advanced Implementation Guide (Optional)</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_newsfeed' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_newsfeed' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='News Feed'><i class='fas'></i><div class='nav_block'><div class='nav_title'>News Feed</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_newsfeed' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_integration' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_newsfeed_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_newsfeed_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_clicklistener' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/click_listener/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Handling Clicks Manually'> <div class='nav_title'>Handling Clicks Manually</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_keyvaluepairs' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/key_value_pairs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Key-Value Pairs'> <div class='nav_title'>Key-Value Pairs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_readandunread' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/read_and_unread/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Read & Unread Indicators'> <div class='nav_title'>Read & Unread Indicators</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_badges' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_customization_gifs' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/customization/gifs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed_customization' aria-label='GIFs'> <div class='nav_title'>GIFs</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_categories' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/categories/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed' aria-label='Defining a News Feed Category'> <div class='nav_title'>Defining a News Feed Category</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_newsfeed_refreshingthefeed' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/news_feed/refreshing_the_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_newsfeed' aria-label='Refreshing the Feed'> <div class='nav_title'>Refreshing the Feed</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_trackingsessions' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/tracking_sessions/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Tracking Sessions'> <div class='nav_title'>Tracking Sessions</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_trackingcustomevents' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/tracking_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_locationtracking' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/location_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Location Tracking'> <div class='nav_title'>Location Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_uninstalltracking' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/uninstall_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Uninstall Tracking'> <div class='nav_title'>Uninstall Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_analytics_disablingtracking' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/analytics/disabling_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_analytics' aria-label='Disabling SDK Tracking'> <div class='nav_title'>Disabling SDK Tracking</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases' data-parent='parent_nav_top_platformintegrationguides_android'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_android'><a tabindex='-1' href='#nav_top_platformintegrationguides_android_advancedusecases' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_android_advancedusecases' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Advanced Use Cases'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Advanced Use Cases</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_android_advancedusecases' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_deeplinking' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/deep_linking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Deep Linking'> <div class='nav_title'>Deep Linking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_localization' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/localization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Localization'> <div class='nav_title'>Localization</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_beaconintegration' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/beacon_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Beacon Integration'> <div class='nav_title'>Beacon Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_networkofflinemodeintegration' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/network_offline_mode_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Network Offline Mode'> <div class='nav_title'>Network Offline Mode</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_runtimeconfiguration' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/runtime_configuration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Runtime Configuration'> <div class='nav_title'>Runtime Configuration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_locationsandgeofences' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/locations_and_geofences/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Location & Geofences'> <div class='nav_title'>Location & Geofences</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_fontcustomization' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/font_customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Font Customization'> <div class='nav_title'>Font Customization</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_androidgoogletagmanager' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/android_google_tag_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Google Tag Manager for Android'> <div class='nav_title'>Google Tag Manager for Android</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_advancedusecases_addingbrazejsinterface' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/advanced_use_cases/adding_braze_js_interface/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android_advancedusecases' aria-label='Braze JavaScript Interface'> <div class='nav_title'>Braze JavaScript Interface</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_android13' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/android_13/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Android 13 Upgrade Guide'> <div class='nav_title'>Android 13 Upgrade Guide</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_googleplayprivacy' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/google_play_privacy/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Google Play Privacy Questionnaire'> <div class='nav_title'>Google Play Privacy Questionnaire</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_storage' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/storage/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Storage'> <div class='nav_title'>Storage</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_sampleapps' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/sample_apps/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Sample Apps'> <div class='nav_title'>Sample Apps</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_android_changelog' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_android'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/android/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_android' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Swift'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Swift</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_initialsdksetup' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_initialsdksetup' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Initial SDK Setup'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Initial SDK Setup</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_initialsdksetup' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_overview' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/overview/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup' aria-label='Integration Overview'> <div class='nav_title'>Integration Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup' aria-label='Installation Methods'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Installation Methods</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods_swiftpackagemanager' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/installation_methods/swift_package_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' aria-label='Swift Package Manager'> <div class='nav_title'>Swift Package Manager</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods_cocoapods' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/installation_methods/cocoapods/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' aria-label='CocoaPods'> <div class='nav_title'>CocoaPods</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods_manualintegration' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/installation_methods/manual_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup_installationmethods' aria-label='Manual Integration'> <div class='nav_title'>Manual Integration</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_completingintegration' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/completing_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup' aria-label='Completing the Integration'> <div class='nav_title'>Completing the Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_initialsdksetup_othersdkcustomizations' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/other_sdk_customizations/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_initialsdksetup' aria-label='Other SDK Customizations'> <div class='nav_title'>Other SDK Customizations</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_pushnotifications' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_pushnotifications' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Push Notifications'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Push Notifications</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_pushnotifications' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_integration' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_pushnotifications_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_pushnotifications_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_actionbuttons' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/action_buttons/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Action Buttons'> <div class='nav_title'>Action Buttons</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_badges' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_customsounds' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/custom_sounds/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Custom Sounds'> <div class='nav_title'>Custom Sounds</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_richnotifications' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/rich_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Rich Notifications'> <div class='nav_title'>Rich Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_ignoringinternalpush' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/ignoring_internal_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Ignoring Internal Push'> <div class='nav_title'>Ignoring Internal Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization_advancedsettings' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/customization/advanced_settings/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications_customization' aria-label='Push Settings'> <div class='nav_title'>Push Settings</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_silentpushnotifications' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/silent_push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Silent Push Notifications'> <div class='nav_title'>Silent Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_pushstory' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/push_story/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Push Stories'> <div class='nav_title'>Push Stories</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_pushnotifications_implementationguide' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/push_notifications/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_pushnotifications' aria-label='Advanced Implementation (Optional)'> <div class='nav_title'>Advanced Implementation (Optional)</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_inappmessaging' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_inappmessaging' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='In-App Messaging'><i class='fas'></i><div class='nav_block'><div class='nav_title'>In-App Messaging</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_inappmessaging' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_overview' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/overview/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_inappmessagedelivery' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/in-app_message_delivery/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging' aria-label='In-App Message Delivery'> <div class='nav_title'>In-App Message Delivery</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_inappmessaging_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_inappmessaging_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_tvos' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/tvos/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='tvOS'> <div class='nav_title'>tvOS</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_settingdelegates' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/setting_delegates/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='In-App Message UI Delegate'> <div class='nav_title'>In-App Message UI Delegate</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_behavioronclick' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/behavior_on_click/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='Custom On-Click Behavior'> <div class='nav_title'>Custom On-Click Behavior</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_customtriggering' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/custom_triggering/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='Custom Triggering'> <div class='nav_title'>Custom Triggering</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_modaldismissal' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/modal_dismissal/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='Modal Dismissal'> <div class='nav_title'>Modal Dismissal</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization_customappstorereviewprompt' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/customization/custom_app_store_review_prompt/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging_customization' aria-label='Example - App Store Review Prompt'> <div class='nav_title'>Example - App Store Review Prompt</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_inappmessaging_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/in-app_messaging/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_inappmessaging' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_contentcards' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_contentcards' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_contentcards' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Content Cards'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Content Cards</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_contentcards' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_contentcards_integration' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/content_cards/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_contentcards_tvos' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/content_cards/tvos/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_contentcards' aria-label='tvOS'> <div class='nav_title'>tvOS</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_liveactivities' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_liveactivities' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_liveactivities' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Live Activities'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Live Activities</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_liveactivities' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_liveactivities_liveactivities' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/live_activities/live_activities/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities' aria-label='Live Activities'> <div class='nav_title'>Live Activities</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_liveactivities_faq' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/live_activities/faq/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_liveactivities' aria-label='FAQ'> <div class='nav_title'>FAQ</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_trackingsessions' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/tracking_sessions/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Session Tracking'> <div class='nav_title'>Session Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_trackingcustomevents' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/tracking_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_swiftidfv' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/swift_idfv/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Collecting IDFV'> <div class='nav_title'>Collecting IDFV</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_locationtracking' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/location_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Location Tracking'> <div class='nav_title'>Location Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_uninstalltracking' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/uninstall_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Uninstall Tracking'> <div class='nav_title'>Uninstall Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_analytics_disablingtracking' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/analytics/disabling_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_analytics' aria-label='Disabling iOS SDK Tracking'> <div class='nav_title'>Disabling iOS SDK Tracking</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases' data-parent='parent_nav_top_platformintegrationguides_swift'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_swift'><a tabindex='-1' href='#nav_top_platformintegrationguides_swift_advancedusecases' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_swift_advancedusecases' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Advanced Use Cases'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Advanced Use Cases</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_swift_advancedusecases' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_linking' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/linking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Deep Linking'> <div class='nav_title'>Deep Linking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_finenetworktrafficcontrol' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/fine_network_traffic_control/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Fine Network Traffic Control'> <div class='nav_title'>Fine Network Traffic Control</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_googletagmanager' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/google_tag_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Google Tag Manager'> <div class='nav_title'>Google Tag Manager</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_locationsandgeofences' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/locations_and_geofences/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Locations and Geofences'> <div class='nav_title'>Locations and Geofences</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_addingbrazejsinterface' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/adding_braze_js_interface/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Adding the JavaScript Interface'> <div class='nav_title'>Adding the JavaScript Interface</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_localization' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/localization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Localization'> <div class='nav_title'>Localization</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_advancedusecases_delayedinitialization' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/advanced_use_cases/delayed_initialization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift_advancedusecases' aria-label='Delayed Initialization'> <div class='nav_title'>Delayed Initialization</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_ios18' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/ios_18/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='iOS 18 Upgrade Guide'> <div class='nav_title'>iOS 18 Upgrade Guide</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_privacymanifest' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/privacy_manifest/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Privacy manifest'> <div class='nav_title'>Privacy manifest</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_visionos' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/visionos/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='visionOS support'> <div class='nav_title'>visionOS support</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_storage' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/storage/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Storage'> <div class='nav_title'>Storage</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_sampleapps' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/sample_apps/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Sample Apps'> <div class='nav_title'>Sample Apps</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_swift_changelog' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_swift'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/swift/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_swift' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_web' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Web'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Web</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_web'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_pushnotifications' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_pushnotifications' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Push Notifications'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Push Notifications</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_pushnotifications' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_pushnotifications_integration' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/push_notifications/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_pushnotifications_safarimobilepush' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/push_notifications/safari_mobile_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications' aria-label='Safari Mobile Web Push'> <div class='nav_title'>Safari Mobile Web Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_pushnotifications_softpushprompt' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/push_notifications/soft_push_prompt/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications' aria-label='Soft Push Prompt'> <div class='nav_title'>Soft Push Prompt</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_pushnotifications_alternatepushdomain' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/push_notifications/alternate_push_domain/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_pushnotifications' aria-label='Alternate Web Push Domain'> <div class='nav_title'>Alternate Web Push Domain</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_web'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_inappmessaging' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_inappmessaging' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='In-App Messages'><i class='fas'></i><div class='nav_block'><div class='nav_title'>In-App Messages</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_inappmessaging' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_integration' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_inappmessaging_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_inappmessaging_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization_messagedismissal' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/message_dismissal/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Message Dismissal'> <div class='nav_title'>Message Dismissal</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization_loggingimpressionsandclicks' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/logging_impressions_and_clicks/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Logging Impressions and Clicks'> <div class='nav_title'>Logging Impressions and Clicks</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization_openlinkinnewtab' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/open_link_in_new_tab/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Open Link in New Tab'> <div class='nav_title'>Open Link in New Tab</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_customization_keyvaluepairs' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/customization/key_value_pairs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging_customization' aria-label='Key-Value Pairs'> <div class='nav_title'>Key-Value Pairs</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_inappmessagedelivery' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/in-app_message_delivery/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging' aria-label='In-App Message Delivery'> <div class='nav_title'>In-App Message Delivery</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_inappmessaging_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/in-app_messaging/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_inappmessaging' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_contentcards' data-parent='parent_nav_top_platformintegrationguides_web'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_contentcards' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_contentcards' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Content Cards'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Content Cards</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_contentcards' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_contentcards_integration' data-parent='parent_nav_top_platformintegrationguides_web_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/content_cards/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_contentcards' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed' data-parent='parent_nav_top_platformintegrationguides_web'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_newsfeed' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_newsfeed' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='News Feed'><i class='fas'></i><div class='nav_block'><div class='nav_title'>News Feed</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_newsfeed' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_integration' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_customization' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_newsfeed_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_newsfeed_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_newsfeed_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_customization_keyvaluepairs' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/customization/key_value_pairs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization' aria-label='Key-Value Pairs'> <div class='nav_title'>Key-Value Pairs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_customization_readandunread' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/customization/read_and_unread/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization' aria-label='Read and Unread Indicators'> <div class='nav_title'>Read and Unread Indicators</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_customization_badges' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_newsfeed_defininganewsfeedcategory' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/news_feed/defining_a_news_feed_category/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_newsfeed' aria-label='Defining a News Feed Category'> <div class='nav_title'>Defining a News Feed Category</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics' data-parent='parent_nav_top_platformintegrationguides_web'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_web'><a tabindex='-1' href='#nav_top_platformintegrationguides_web_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_web_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_web_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_trackingsessions' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/tracking_sessions/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Tracking Sessions'> <div class='nav_title'>Tracking Sessions</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_trackingcustomevents' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/tracking_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_locationtracking' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/location_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Location Tracking'> <div class='nav_title'>Location Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_analytics_disablingtracking' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/analytics/disabling_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web_analytics' aria-label='Disabling Web SDK Tracking'> <div class='nav_title'>Disabling Web SDK Tracking</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_ampsupport' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/amp_support/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='AMP Support'> <div class='nav_title'>AMP Support</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_cookiesandstorage' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/cookies_and_storage/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Cookies and Storage'> <div class='nav_title'>Cookies and Storage</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_browserextensions' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/browser_extensions/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Browser Extensions'> <div class='nav_title'>Browser Extensions</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_googletagmanager' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/google_tag_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Google Tag Manager'> <div class='nav_title'>Google Tag Manager</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_smarttvs' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/smart_tvs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Smart TV Integrations'> <div class='nav_title'>Smart TV Integrations</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_contentsecuritypolicy' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/content_security_policy/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Content Security Policy Headers'> <div class='nav_title'>Content Security Policy Headers</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_web_changelog' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_web'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/web/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_web' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_cordova' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_cordova' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Cordova'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Cordova</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_cordova' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_initialsetup' data-parent='parent_nav_top_platformintegrationguides_cordova'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_cordova'><a tabindex='-1' href='#nav_top_platformintegrationguides_cordova_initialsetup' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_cordova_initialsetup' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Initial Setup'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Initial Setup</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_cordova_initialsetup' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_initialsetup_integration' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/initial_setup/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_initialsetup_customizations' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/initial_setup/customizations/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova_initialsetup' aria-label='Customizations'> <div class='nav_title'>Customizations</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Push Notifications'> <div class='nav_title'>Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_contentcards' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/content_cards/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_analytics' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/analytics/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Analytics'> <div class='nav_title'>Analytics</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_otherintegrations' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/other_integrations/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Other Integrations'> <div class='nav_title'>Other Integrations</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_cordova_changelog' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_cordova'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/cordova/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_cordova' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_flutter' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_flutter' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Flutter'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Flutter</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_flutter' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_fluttersdkintegration' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/flutter_sdk_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Push Notifications'> <div class='nav_title'>Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_contentcards' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/content_cards/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_inappmessages' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/inapp_messages/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='In-App Messages'> <div class='nav_title'>In-App Messages</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_analytics' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/analytics/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Analytics'> <div class='nav_title'>Analytics</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_deeplinking' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/deep_linking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Deep Linking'> <div class='nav_title'>Deep Linking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_flutter_changelog' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_flutter'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/flutter/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_flutter' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_reactnative' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_reactnative' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='React Native'><i class='fas'></i><div class='nav_block'><div class='nav_title'>React Native</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_reactnative' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_reactsdksetup' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/react_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Push Notifications'> <div class='nav_title'>Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_contentcards' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/content_cards/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_inappmessages' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/inapp_messages/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='In-App Messages'> <div class='nav_title'>In-App Messages</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_analytics' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/analytics/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Analytics'> <div class='nav_title'>Analytics</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_sampleapp' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/sample_app/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Sample App'> <div class='nav_title'>Sample App</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_reactnative_changelog' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_reactnative'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/react_native/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_reactnative' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_unity' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_unity' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Unity'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Unity</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_unity' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_sdkintegration' data-parent='parent_nav_top_platformintegrationguides_unity'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_unity'><a tabindex='-1' href='#nav_top_platformintegrationguides_unity_sdkintegration' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_unity_sdkintegration' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='SDK Integration'><i class='fas'></i><div class='nav_block'><div class='nav_title'>SDK Integration</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_unity_sdkintegration' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_sdkintegration_android' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/sdk_integration/android/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration' aria-label='Android'> <div class='nav_title'>Android</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_sdkintegration_ios' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/sdk_integration/ios/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration' aria-label='iOS'> <div class='nav_title'>iOS</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_sdkintegration_advancedusecases' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/sdk_integration/advanced_use_cases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration' aria-label='Advanced Implementation'> <div class='nav_title'>Advanced Implementation</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_sdkintegration_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/sdk_integration/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_sdkintegration' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_unity'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_unity'><a tabindex='-1' href='#nav_top_platformintegrationguides_unity_pushnotifications' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_unity_pushnotifications' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='Push Notifications'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Push Notifications</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_unity_pushnotifications' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_pushnotifications_android' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/push_notifications/android/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications' aria-label='Android'> <div class='nav_title'>Android</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_pushnotifications_ios' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/push_notifications/ios/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications' aria-label='iOS'> <div class='nav_title'>iOS</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_pushnotifications_admpushnotifications' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/push_notifications/adm_push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_pushnotifications' aria-label='Amazon Device Messaging'> <div class='nav_title'>Amazon Device Messaging</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/in-app_messaging/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='In-App Messaging'> <div class='nav_title'>In-App Messaging</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_contentcards' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/content_cards/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_newsfeed' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/news_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='News Feed'> <div class='nav_title'>News Feed</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_analytics' data-parent='parent_nav_top_platformintegrationguides_unity'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_unity'><a tabindex='-1' href='#nav_top_platformintegrationguides_unity_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_unity_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_unity_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_analytics_loggingcustomevents' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/analytics/logging_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_unity_changelog' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unity'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unity/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unity' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_xamarin' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_xamarin' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Xamarin'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Xamarin</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_xamarin' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Push Notifications'> <div class='nav_title'>Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_inappmessages' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/inapp_messages/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='In-App Messaging'> <div class='nav_title'>In-App Messaging</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_contentcards' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/content_cards/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Content Cards'> <div class='nav_title'>Content Cards</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_analytics' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/analytics/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Analytics'> <div class='nav_title'>Analytics</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_newsfeed' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/news_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='News Feed'> <div class='nav_title'>News Feed</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_xamarin_changelog' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_xamarin'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/xamarin/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_xamarin' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_roku' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_roku' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Roku'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Roku</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_roku' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_roku'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_analytics' data-parent='parent_nav_top_platformintegrationguides_roku'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_roku'><a tabindex='-1' href='#nav_top_platformintegrationguides_roku_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_roku_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_roku' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_roku_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_analytics_loggingcustomevents' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/analytics/logging_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_roku'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_roku'><a tabindex='-1' href='#nav_top_platformintegrationguides_roku_inappmessaging' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_roku_inappmessaging' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_roku' aria-label='In-App Messages'><i class='fas'></i><div class='nav_block'><div class='nav_title'>In-App Messages</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_roku_inappmessaging' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_inappmessaging_overview' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/in-app_messaging/overview/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging' aria-label='Overview'> <div class='nav_title'>Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_inappmessaging_integration' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/in-app_messaging/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku_inappmessaging' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_roku_changelog' data-parent='parent_nav_top_platformintegrationguides_roku'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_roku'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/roku/changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_roku' aria-label='Changelog'> <div class='nav_title'>Changelog</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_unrealengine' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_unrealengine' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_unrealengine' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides' aria-label='Unreal Engine'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Unreal Engine</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_unrealengine' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_unrealengine_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_unrealengine'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_unrealengine'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/unreal_engine/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_unrealengine' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_tvandott' data-parent='parent_nav_top_platformintegrationguides'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/tv_and_ott/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides' aria-label='TV and OTT Integrations'> <div class='nav_title'>TV and OTT Integrations</div></a></div></div> </div> <div class='nav-item active_parent ' id='parent_nav_top_platformintegrationguides_legacysdks' data-parent='parent_nav_top_platformintegrationguides'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks' class='nav_toggle ' aria-expanded='true' data-parent='parent_nav_top_platformintegrationguides' aria-label='Legacy SDKs'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Legacy SDKs</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse show' id='nav_top_platformintegrationguides_legacysdks' > <div class='nav-item active_parent ' id='parent_nav_top_platformintegrationguides_legacysdks_ios' data-parent='parent_nav_top_platformintegrationguides_legacysdks'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios' class='nav_toggle ' aria-expanded='true' data-parent='parent_nav_top_platformintegrationguides_legacysdks' aria-label='iOS (legacy)'><i class='fas'></i><div class='nav_block'><div class='nav_title'>iOS (legacy)</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse show' id='nav_top_platformintegrationguides_legacysdks_ios' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Initial SDK Setup'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Initial SDK Setup</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_overview' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/overview/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' aria-label='Overview'> <div class='nav_title'>Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' aria-label='Installation Methods'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Installation Methods</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods_carthageintegration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/installation_methods/carthage_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' aria-label='Carthage'> <div class='nav_title'>Carthage</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods_cocoapods' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/installation_methods/cocoapods/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' aria-label='CocoaPods'> <div class='nav_title'>CocoaPods</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods_swiftpackagemanager' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/installation_methods/swift_package_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' aria-label='Swift Package Manager'> <div class='nav_title'>Swift Package Manager</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods_manualintegrationoptions' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/installation_methods/manual_integration_options/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_installationmethods' aria-label='Manual'> <div class='nav_title'>Manual</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_completingintegration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/completing_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' aria-label='Completing the Integration'> <div class='nav_title'>Completing the Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_othersdkcustomizations' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/other_sdk_customizations/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' aria-label='Other SDK Customizations'> <div class='nav_title'>Other SDK Customizations</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup_iossdkintegration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/initial_sdk_setup/ios_sdk_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_initialsdksetup' aria-label='SDK Integration Guide (Optional)'> <div class='nav_title'>SDK Integration Guide (Optional)</div></a></div></div> </div> </div><div class='nav-item active_parent ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' class='nav_toggle ' aria-expanded='true' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Push Notifications'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Push Notifications</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse show' id='nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_integration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_actionbuttons' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/action_buttons/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Action Buttons'> <div class='nav_title'>Action Buttons</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_customsounds' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/custom_sounds/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Custom Sounds'> <div class='nav_title'>Custom Sounds</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_richnotifications' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/rich_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Rich Notifications'> <div class='nav_title'>Rich Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_badges' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_ignoringinternalpush' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/ignoring_internal_push/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Ignoring Internal Push'> <div class='nav_title'>Ignoring Internal Push</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization_advancedsettings' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/customization/advanced_settings/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_customization' aria-label='Advanced Settings'> <div class='nav_title'>Advanced Settings</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_silentpushnotifications' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/silent_push_notifications/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Silent Push Notifications'> <div class='nav_title'>Silent Push Notifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_pushprimer' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/push_primer/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Push Primer'> <div class='nav_title'>Push Primer</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_pushstory' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/push_story/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Push Stories'> <div class='nav_title'>Push Stories</div></a></div></div> </div> <div class='nav-item active_parent active ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_implementationguide' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <div class='nav_title' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'>Advanced Implementation (Optional) </div></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_testing' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/testing/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Testing'> <div class='nav_title'>Testing</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_unittests' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/unit_tests/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Unit Tests (Optional)'> <div class='nav_title'>Unit Tests (Optional)</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_pushnotifications' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='In-App Messaging'><i class='fas'></i><div class='nav_block'><div class='nav_title'>In-App Messaging</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_overview' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/overview/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='Overview'> <div class='nav_title'>Overview</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_settingdelegates' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/setting_delegates/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Setting Delegates'> <div class='nav_title'>Setting Delegates</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_customizingorientation' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/customizing_orientation/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Customizing Orientation'> <div class='nav_title'>Customizing Orientation</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_handlinginappdisplay' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/handling_in_app_display/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Custom Display Handling'> <div class='nav_title'>Custom Display Handling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_behavioronclick' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/behavior_on_click/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Custom On-Click Behavior'> <div class='nav_title'>Custom On-Click Behavior</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_customtriggering' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/custom_triggering/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Custom Triggering'> <div class='nav_title'>Custom Triggering</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_customviewcontroller' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/custom_view_controller/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Custom View Controller'> <div class='nav_title'>Custom View Controller</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_modaldismissal' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/modal_dismissal/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Modal Dismissal'> <div class='nav_title'>Modal Dismissal</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization_keyvaluepairs' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/customization/key_value_pairs/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customization' aria-label='Key-Value Pairs'> <div class='nav_title'>Key-Value Pairs</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_inappmessagedelivery' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/in-app_message_delivery/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='In-App Message Delivery'> <div class='nav_title'>In-App Message Delivery</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_customappstorereviewprompt' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/custom_app_store_review_prompt/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='Custom App Store review prompt'> <div class='nav_title'>Custom App Store review prompt</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide' aria-label='Advanced Implementation (Optional)' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='Advanced Implementation (Optional)'> <div class='nav_title'>Advanced Implementation (Optional)</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide_shareplay' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/implementation_guide/shareplay/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_implementationguide' aria-label='SharePlay'> <div class='nav_title'>SharePlay</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging_troubleshooting' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/in-app_messaging/troubleshooting/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_inappmessaging' aria-label='Troubleshooting'> <div class='nav_title'>Troubleshooting</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_contentcards' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_contentcards' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Content Cards'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Content Cards</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_contentcards' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_integration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_customizingfeed' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/customizing_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Customizing Feed'> <div class='nav_title'>Customizing Feed</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_handlingclicksmanually' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/handling_clicks_manually/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Handling Clicks Manually'> <div class='nav_title'>Handling Clicks Manually</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_readunreadindicators' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/read_unread_indicators/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Read & Unread Indicators'> <div class='nav_title'>Read & Unread Indicators</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_badges' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization' aria-label='Use Cases'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Use Cases</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases_carouselview' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/customization/use_cases/carousel_view/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_customization_usecases' aria-label='Carousel View'> <div class='nav_title'>Carousel View</div></a></div></div> </div> </div></div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_refreshingthefeed' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/refreshing_the_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' aria-label='Refreshing the Feed'> <div class='nav_title'>Refreshing the Feed</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_multiplefeeds' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/multiple_feeds/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' aria-label='Multiple Feeds'> <div class='nav_title'>Multiple Feeds</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards_implementationguide' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/content_cards/implementation_guide/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_contentcards' aria-label='Advanced Implementation (Optional)'> <div class='nav_title'>Advanced Implementation (Optional)</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_newsfeed' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_newsfeed' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='News Feed'><i class='fas'></i><div class='nav_block'><div class='nav_title'>News Feed</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_newsfeed' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_integration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed' aria-label='Integration'> <div class='nav_title'>Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' aria-label='Customization' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/customization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed' aria-label='Customization'> <div class='nav_title'>Customization</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization_customstyling' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/customization/custom_styling/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' aria-label='Custom Styling'> <div class='nav_title'>Custom Styling</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization_badges' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/customization/badges/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_customization' aria-label='Badges'> <div class='nav_title'>Badges</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_defininganewsfeedcategory' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/defining_a_news_feed_category/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed' aria-label='Defining a News Feed Category'> <div class='nav_title'>Defining a News Feed Category</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed_refreshingthenewsfeed' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/news_feed/refreshing_the_news_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_newsfeed' aria-label='Refreshing the Feed'> <div class='nav_title'>Refreshing the Feed</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_analytics' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_analytics' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Analytics'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Analytics</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_analytics' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_trackingsessions' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/tracking_sessions/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Tracking Sessions'> <div class='nav_title'>Tracking Sessions</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_settinguserids' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/setting_user_ids/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Setting User IDs'> <div class='nav_title'>Setting User IDs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_trackingcustomevents' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/tracking_custom_events/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Tracking Custom Events'> <div class='nav_title'>Tracking Custom Events</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_settingcustomattributes' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/setting_custom_attributes/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Setting Custom Attributes'> <div class='nav_title'>Setting Custom Attributes</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_loggingpurchases' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/logging_purchases/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Logging Purchases'> <div class='nav_title'>Logging Purchases</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_locationtracking' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/location_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Location Tracking'> <div class='nav_title'>Location Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_uninstalltracking' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/uninstall_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Uninstall Tracking'> <div class='nav_title'>Uninstall Tracking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics_disablingtracking' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/analytics/disabling_tracking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_analytics' aria-label='Disabling iOS SDK Tracking'> <div class='nav_title'>Disabling iOS SDK Tracking</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Advanced Use Cases'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Advanced Use Cases</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_linking' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/linking/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Deep Linking'> <div class='nav_title'>Deep Linking</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_finenetworktrafficcontrol' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/fine_network_traffic_control/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Fine Network Traffic Control'> <div class='nav_title'>Fine Network Traffic Control</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_localization' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/localization/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Localization'> <div class='nav_title'>Localization</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_beaconintegration' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/beacon_integration/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Beacon Integration'> <div class='nav_title'>Beacon Integration</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_locationsandgeofences' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/locations_and_geofences/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Locations & Geofences'> <div class='nav_title'>Locations & Geofences</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases_googletagmanager' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/advanced_use_cases/google_tag_manager/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_advancedusecases' aria-label='Google Tag Manager'> <div class='nav_title'>Google Tag Manager</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_storage' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/storage/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Storage'> <div class='nav_title'>Storage</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_sampleapps' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/sample_apps/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Sample Apps'> <div class='nav_title'>Sample Apps</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_ios_changelog' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_ios_changelog' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios' aria-label='Changelog'><i class='fas'></i><div class='nav_block'><div class='nav_title'>Changelog</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_ios_changelog' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog_swiftchangelog' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/changelog/swift_changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog' aria-label='Swift'> <div class='nav_title'>Swift</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog_objcchangelog' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/changelog/objc_changelog/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_ios_changelog' aria-label='Objective-C'> <div class='nav_title'>Objective-C</div></a></div></div> </div> </div></div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_macos' data-parent='parent_nav_top_platformintegrationguides_legacysdks'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_macos' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_macos' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks' aria-label='MacOS (legacy)'><i class='fas'></i><div class='nav_block'><div class='nav_title'>MacOS (legacy)</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_macos' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_macos_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_legacysdks_macos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_macos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/macOS/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_macos' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> </div><div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_tvos' data-parent='parent_nav_top_platformintegrationguides_legacysdks'> <div class='nav_url' data-parent='parent_nav_top_platformintegrationguides_legacysdks'><a tabindex='-1' href='#nav_top_platformintegrationguides_legacysdks_tvos' data-toggle='collapse' data-target='#nav_top_platformintegrationguides_legacysdks_tvos' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top_platformintegrationguides_legacysdks' aria-label='tvOS (legacy)'><i class='fas'></i><div class='nav_block'><div class='nav_title'>tvOS (legacy)</div></a></div></div></div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_platformintegrationguides_legacysdks_tvos' > <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_tvos_initialsdksetup' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/tvos/initial_sdk_setup/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos' aria-label='Initial SDK Setup'> <div class='nav_title'>Initial SDK Setup</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_platformintegrationguides_legacysdks_tvos_newsfeed' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos'><div class='nav_reg' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/platform_integration_guides/legacy_sdks/tvos/news_feed/' class='nav_link' data-parent='parent_nav_top_platformintegrationguides_legacysdks_tvos' aria-label='News Feed'> <div class='nav_title'>News Feed</div></a></div></div> </div> </div></div></div><div class='nav-item ' id='parent_nav_top_authentication' data-parent='parent_nav_top'><div class='nav_reg' data-parent='parent_nav_top'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/authentication/' class='nav_link' data-parent='parent_nav_top' aria-label='SDK Authentication'> <div class='nav_title'>SDK Authentication</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_debugging' data-parent='parent_nav_top'><div class='nav_reg' data-parent='parent_nav_top'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/debugging/' class='nav_link' data-parent='parent_nav_top' aria-label='SDK Debugging'> <div class='nav_title'>SDK Debugging</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_changelogs' data-parent='parent_nav_top'><div class='nav_reg' data-parent='parent_nav_top'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/changelogs/' class='nav_link' data-parent='parent_nav_top' aria-label='Changelogs'> <div class='nav_title'>Changelogs</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_disclosures' data-parent='parent_nav_top'><div class='nav_url' data-parent='parent_nav_top'><a tabindex='-1' href='#nav_top_disclosures' aria-label='Disclosures' data-toggle='collapse' data-target='#nav_top_disclosures' class='nav_toggle ' aria-expanded='false' data-parent='parent_nav_top'><i class='fas'></i><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/disclosures/' class='nav_link' data-parent='parent_nav_top' aria-label='Disclosures'> <div class='nav_title'>Disclosures</div></a></div></div> </div> <div class='nav flex-column flex-nowrap collapse ' id='nav_top_disclosures' > <div class='nav-item ' id='parent_nav_top_disclosures_securityandvulnerabilitydisclosure' data-parent='parent_nav_top_disclosures'><div class='nav_reg' data-parent='parent_nav_top_disclosures'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/disclosures/security_and_vulnerability_disclosure/' class='nav_link' data-parent='parent_nav_top_disclosures' aria-label='Security Vulnerability Disclosure'> <div class='nav_title'>Security Vulnerability Disclosure</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_disclosures_opensourcesoftwaredisclosure' data-parent='parent_nav_top_disclosures'><div class='nav_reg' data-parent='parent_nav_top_disclosures'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/disclosures/open_source_software_disclosure/' class='nav_link' data-parent='parent_nav_top_disclosures' aria-label='Open Source Software Disclosure'> <div class='nav_title'>Open Source Software Disclosure</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_disclosures_securityqualifications' data-parent='parent_nav_top_disclosures'><div class='nav_reg' data-parent='parent_nav_top_disclosures'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/disclosures/security_qualifications/' class='nav_link' data-parent='parent_nav_top_disclosures' aria-label='Security Qualifications'> <div class='nav_title'>Security Qualifications</div></a></div></div> </div> <div class='nav-item ' id='parent_nav_top_disclosures_innovationstatement' data-parent='parent_nav_top_disclosures'><div class='nav_reg' data-parent='parent_nav_top_disclosures'><div class='nav_block'> <a tabindex='-1' href='/docs/developer_guide/disclosures/innovation_statement/' class='nav_link' data-parent='parent_nav_top_disclosures' aria-label='Innovation Statement'> <div class='nav_title'>Innovation Statement</div></a></div></div> </div> </div></div></nav> <div id="nav_bottom" style=""> <!-- a href="https://www.braze.com/terms/" target="_blank"><div class="nav_bottom_item"><i class="fa fa-balance-scale"></i> LEGAL</div></a> <a href="https://learning.braze.com" target="_blank"><div class="nav_bottom_item"><i class="fa fa-flask"></i> Braze Learning </div></a --> <a id="status-indicator" href="https://braze.statuspage.io" target="_blank"> <div class="nav_bottom_item"> <div class="status-title">BRAZE SYSTEM STATUS</div> <div class="color-dot"></div><div class="color-description">Checking Braze Status</div> </div></a> </div> <script type="text/javascript"> function loadStatusPage() { var lsp = document.createElement('script'); lsp.type = 'text/javascript'; lsp.async = true; lsp.src = '//statuspage-production.s3.amazonaws.com/se-v2.js'; lsp.onload = function() { if (typeof(StatusPage) !== "undefined") { var sp = new StatusPage.page({page: 'c947v6z63ltm'}); sp.status({ success: function (data) { var sd = document.getElementById('status-indicator'); sd.getElementsByClassName('color-description')[0].textContent = data.status.description; sd.getElementsByClassName('color-dot')[0].className = "color-dot " + data.status.indicator; } }); } }; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(lsp, s); }; window.addEventListener('load', loadStatusPage, false); </script> </div> </div> <div class="col d-print-block " id="main_content" > <div id="article-main"> <div id="content_start"></div><div id="breadcrumb"> </div><p><br /></p> <div class="alert alert-warning" role="alert"><div class="alert-msg"> <b>warning: </b><br /> <p><a href="https://github.com/Appboy/appboy-ios-sdk">AppboyKit</a> (also known as the Objective-C SDK) is no longer supported and has been replaced by the <a href="/docs/developer_guide/platform_integration_guides/swift/initial_sdk_setup/overview/">Swift SDK</a>. It will no longer receive new features, bug fixes, security updates, or technical support—however, messaging and analytics will continue to function as normal. To learn more, see <a href="https://www.braze.com/resources/articles/introducing-the-new-braze-swift-sdk">Introducing the New Braze Swift SDK</a>.</p> </div></div> <p><br /></p> <div class="alert alert-important" role="alert"><div class="alert-msg"> <b>important: </b><br /> <p>Looking for the basic push notification developer integration guide? Find it <a href="/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/">here</a>.</p> </div></div> <h1 id="push-notification-implementation-guide">Push notification implementation guide</h1> <blockquote> <p>This optional and advanced implementation guide covers ways to leverage push notification content app extensions to get the most out of your push messages. Included are three custom use cases built by our team, accompanying code snippets, and guidance on logging analytics. Visit our Braze Demo Repository <a href="https://github.com/braze-inc/braze-growth-shares-ios-demo-app">here</a>! Note that this implementation guide is centered around a Swift implementation, but Objective-C snippets are provided for those interested.</p> </blockquote> <h2 id="notification-content-app-extensions">Notification content app extensions</h2> <p><img src="/docs/assets/img/push_implementation_guide/push1.png?91c6ec13530880751408064491084939" alt="Two push messages shown side-by side. The message on the right shows what a push looks like with the default UI. The message on the right shows a coffee punch card push made by implementing a custom push UI." style="max-width:65%;border:0;margin-top:10px" /></p> <p>Push notifications while seemingly standard across different platforms, offer immense customization options past what is normally implemented in the default UI. When a push notification is expanded, content notification extensions enable a custom view of the expanded push notification.</p> <p>Push notifications can be expanded in three different ways: <br />- A long press on the push banner<br />- Swiping down on the push banner<br />- Swiping the banner to the left and selecting “View”</p> <p>These custom views offer smart ways to engage customers allowing you to display many distinct types of content including interactive notifications, notifications populated with user data, and even push messages that can capture information like phone numbers and email. While implementing push in this way may be unfamiliar to some, one of our well-known features at Braze, <a href="/docs/user_guide/message_building_by_channel/push/advanced_push_options/push_stories/">Push Stories</a>, are a prime example of what a custom view for a notification content app extension can look like!</p> <h4 id="requirements">Requirements</h4> <p><img src="/docs/assets/img/push_implementation_guide/push15.png?db7a91d736b0c52fec117b45d26df73a" alt="" style="float:right;max-width:50%;margin-left:10px; border:0;margin-top:10px" /></p> <ul> <li><a href="/docs/developer_guide/platform_integration_guides/ios/push_notifications/integration/">Push notifications</a> successfully integrated in your app</li> <li>iOS 10 or higher</li> <li>The following files generated by Xcode based on your coding language:</li> </ul> <p>Swift<br /> - <code class="language-plaintext highlighter-rouge">NotificationViewController.swift</code><br /> - <code class="language-plaintext highlighter-rouge">MainInterface.storyboard</code><br /><br /> Objective-C<br /> - <code class="language-plaintext highlighter-rouge">NotificationViewController.h</code><br /> - <code class="language-plaintext highlighter-rouge">NotificationViewController.m</code><br /> - <code class="language-plaintext highlighter-rouge">MainInterface.storyboard</code></p> <h3 id="custom-category-configuration">Custom category configuration</h3> <p>To set up a custom view in the dashboard you must toggle on notification buttons and enter your custom category. The pre-registered custom iOS category you provide is then checked against the <code class="language-plaintext highlighter-rouge">UNNotificationExtensionCategory</code> in the <code class="language-plaintext highlighter-rouge">.plist</code> of your Notification Content Extension Target. The value given here must match what is set in the Braze dashboard.</p> <p><img src="/docs/assets/img/push_implementation_guide/push16.png?c0ac6b32c2ea5599387a965710c29e45" alt="The notification button options found in the push message composer settings." style="max-width:75%;border:0;margin-top:10px" /> <img src="/docs/assets/img/push_implementation_guide/push17.png?ea571cc66d7068844c32cda7ddc7810f" alt="" style="max-width:75%;border:0;margin-top:10px" /></p> <div class="alert alert-tip" role="alert"><div class="alert-msg"> <b>tip: </b><br /> <p>Since pushes with content extensions aren’t always apparent, it is recommended to include a call to action to nudge your users to expand their push notifications.</p> </div></div> <h2 id="use-case-and-implementation-walkthrough">Use case and implementation walkthrough</h2> <p>There are three push notification content app extension types provided. Each type has a concept walkthrough, potential use cases, and a look into how push notification variables may look and be used in the Braze dashboard:</p> <ul> <li><a href="#interactive-push-notification">Interactive push notification</a></li> <li><a href="#personalized-push-notifications">Personalized push notifications</a></li> <li><a href="#information-capture-push-notification">Information capture push notifications</a></li> </ul> <h3 id="interactive-push-notification">Interactive push notification</h3> <p>Push notifications can respond to user actions inside a content extension. For users running iOS 12 or later, this means you can turn your push messages into fully interactive push notifications! This interactivity offers many possibilities to get your users engaged in your notifications. The following example shows a push where users are able to play a match game inside the expanded notification.</p> <p><img src="/docs/assets/img/push_implementation_guide/push12.png?f4763e86576bafea7aaa2d6f031bc1c8" alt="A diagram of what the phases of a interactive push notification could look like. The images show a user pressing into a push notification that displays an interactive matching game." style="border:0" /></p> <h4 id="dashboard-configuration">Dashboard configuration</h4> <p>To set up a custom view in the dashboard, within the notification button settings enter the specific category you want to display. Next, in the <code class="language-plaintext highlighter-rouge">.plist</code> of your Notification Content Extension, you must also set the custom category to the <code class="language-plaintext highlighter-rouge">UNNotificationExtensionCategory</code> attribute. The value given here must match what is set in the Braze dashboard. Lastly, to enable user interactions in a push notification, set the <code class="language-plaintext highlighter-rouge">UNNotificationExtensionInteractionEnabled</code> key to true.</p> <p><img src="/docs/assets/img/push_implementation_guide/push3.png?2bddea0aaf50c739683ac740575df282" alt="" style="float:right;max-width:45%;" /></p> <p><img src="/docs/assets/img/push_implementation_guide/push14.png?f5816a24e8b6f319e0d23f94f1c427a2" alt="The notification button options found in the push message composer settings." style="max-width:50%;" /></p> <h4 id="other-use-cases">Other use cases</h4> <p>Push content extensions are an exciting option to introduce interactivity to your promotions and applications. Some examples include a game for users to play, a spin-to-win wheel for discounts, or a “like” button to save a listing or song.</p> <h5 id="ready-to-log-analytics">Ready to log analytics?</h5> <p>Visit the <a href="#logging-analytics">following section</a> to get a better understanding of how the flow of data should look.</p> <h3 id="personalized-push-notifications">Personalized push notifications</h3> <p><img src="/docs/assets/img/push_implementation_guide/push6.png?7f0917cca3f0ea27c1c77117e413acda" alt="Two iPhones displayed side-by-side. The first iPhone shows the unexpanded view of the push message. The second iPhone shows the expanded version of the push message displaying a "progress" shot of how far they are through a course, the next session, and when the next session id due by." style="float:right;max-width:40%;margin-left:15px;border:0" /></p> <p>Push notifications can display user-specific information inside a content extension. The example to the right shows a push notification after a user has completed a specific task (Braze Learning course) and is now encouraged to expand this notification to check their progress. The information provided here is user-specific and can be fired off as a session is completed or specific user action is taken by leveraging an API trigger.</p> <h4 id="dashboard-configuration-1">Dashboard configuration</h4> <p>To set up a personalized push in the dashboard, you must register the specific category you want to be displayed, and then within the key-value pairs using standard Liquid, set the appropriate user attributes you want the message to show. These views can be personalized based on specific user attributes of a specific user profile.</p> <p><img src="/docs/assets/img/push_implementation_guide/push5.png?812aa15fa8d8577be0e7c43c1e0e9c88" alt="Four sets of key-value pairs, where "next_session_name" and "next_session_complete_date" are set as an API trigger property using Liquid, and "completed_session count" and "total_session_count" are set as a custom user attribute using Liquid." style="max-width:60%;" /></p> <h4 id="handling-key-value-pairs">Handling key-value pairs</h4> <p>The following method, <code class="language-plaintext highlighter-rouge">didReceive</code> is called when the content extension has received a notification, it can be found within the <code class="language-plaintext highlighter-rouge">NotificationViewController</code>. The key-value pairs provided in the dashboard are represented in the code through the use of a <code class="language-plaintext highlighter-rouge">userInfo</code> dictionary.</p> <p><strong>Parsing Key-Value Pairs from Push Notifications</strong><br /></p> <ul class="ab-nav ab-nav-tabs tab_toggle_ul" id="tab_chlhmvfkdsiz_nav"> <li tabindex="0" class="coderow swift active"><a class="tab_toggle" data-tab-target="tab_chlhmvfkdsiz" data-tab="swift">swift</a></li> <li tabindex="0" class="coderow objective-c"><a class="tab_toggle" data-tab-target="tab_chlhmvfkdsiz" data-tab="objective-c">objective-c</a></li> </ul> <div id="tab_chlhmvfkdsiz" class="ab-tab-content tab_toggle_div"> <div class="ab-tab-pane swift_tab " data-tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">didReceive</span><span class="p">(</span><span class="n">_</span> <span class="nv">notification</span><span class="p">:</span> <span class="kt">UNNotification</span><span class="p">)</span> <span class="p">{</span> <span class="k">let</span> <span class="nv">userInfo</span> <span class="o">=</span> <span class="n">notification</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">userInfo</span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">value</span> <span class="o">=</span> <span class="n">userInfo</span><span class="p">[</span><span class="s">"YOUR-KEY-VALUE-PAIR"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">String</span><span class="p">,</span> <span class="k">let</span> <span class="nv">otherValue</span> <span class="o">=</span> <span class="n">userInfo</span><span class="p">[</span><span class="s">"YOUR-OTHER-KEY-VALUE-PAIR"</span><span class="p">]</span> <span class="k">as?</span> <span class="kt">String</span><span class="p">,</span> <span class="k">else</span> <span class="p">{</span> <span class="nf">fatalError</span><span class="p">(</span><span class="s">"Key-Value Pairs are incorrect."</span><span class="p">)}</span> <span class="o">...</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-tab-pane objective-c_tab " data-tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didReceiveNotification</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">UNNotification</span> <span class="o">*</span><span class="p">)</span><span class="nv">notification</span> <span class="p">{</span> <span class="n">NSDictionary</span> <span class="o">*</span><span class="n">userInfo</span> <span class="o">=</span> <span class="n">notification</span><span class="p">.</span><span class="n">request</span><span class="p">.</span><span class="n">content</span><span class="p">.</span><span class="n">userInfo</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="n">userInfo</span><span class="p">[</span><span class="s">@"YOUR-KEY-VALUE-PAIR"</span><span class="p">]</span> <span class="o">&&</span> <span class="n">userInfo</span><span class="p">[</span><span class="s">@"YOUR-OTHER-KEY-VALUE-PAIR"</span><span class="p">])</span> <span class="p">{</span> <span class="p">...</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="p">[</span><span class="n">NSException</span> <span class="nf">raise</span><span class="p">:</span><span class="n">NSGenericException</span> <span class="nf">format</span><span class="p">:</span><span class="s">@"Key-Value Pairs are incorrect"</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> <h4 id="other-use-cases-1">Other use cases</h4> <p>The ideas for progress-based and user-focused push content extensions are endless, some examples include adding the option to share your progress across different platforms, expressing achievements unlocked, punch cards, or even onboarding checklists.</p> <h5 id="ready-to-log-analytics-1">Ready to log analytics?</h5> <p>Visit the <a href="#logging-analytics">following section</a> to get a better understanding of how the flow of data should look.</p> <h3 id="information-capture-push-notification">Information capture push notification</h3> <p>Push notifications can capture user information inside a content extension, allowing you to push the limits of what is possible with a push. Examining the following flow shown, the view is able to respond to state changes. Those state change components are represented in each image.</p> <ol> <li>User receives a push notification.</li> <li>Push is opened and prompts the user for information.</li> <li>Information is provided and if valid, the register button is shown.</li> <li>Confirmation view is displayed, and push gets dismissed.</li> </ol> <p><img src="/docs/assets/img/push_implementation_guide/push8.png?ddf5c85bc38f951c4b4bf34c049650d1" alt="" style="border:0;" /></p> <p>Note that the information requested here can be a wide range of things such as SMS number capture, it doesn’t have to be email-specific.</p> <h4 id="dashboard-configuration-2">Dashboard configuration</h4> <p>To set up an information capture capable push in the dashboard, you must register and set your custom category, and provide the key-value pairs that are needed. As seen in the example, you may also include an image in your push. To do this, you must integrate <a href="/docs/developer_guide/platform_integration_guides/ios/push_notifications/customization/rich_notifications/">rich notifications</a>, set the notification style in your campaign to Rich Notification, and include a rich push image.</p> <p><img src="/docs/assets/img/push_implementation_guide/push9.png?0efceb67a25f5d2d44afedc0d1fb6757" alt="A push message with three sets of key-value pairs. 1. "Braze_id" set as a Liquid call to retrieve Braze ID. 2. "cert_title" set as "Braze Marketer Certification". 3. "Cert_description" set as "Certified Braze marketers drive..."." /></p> <h4 id="handling-button-actions">Handling button actions</h4> <p>Each action button is uniquely identified. The code checks if your response identifier is equal to the <code class="language-plaintext highlighter-rouge">actionIndentifier</code>, and if so, knows that the user clicked the action button.</p> <p><strong>Handling Push Notification Action Button Responses</strong><br /></p> <ul class="ab-nav ab-nav-tabs tab_toggle_ul" id="tab_lnkjkflfqykx_nav"> <li tabindex="0" class="coderow swift active"><a class="tab_toggle" data-tab-target="tab_lnkjkflfqykx" data-tab="swift">swift</a></li> <li tabindex="0" class="coderow objective-c"><a class="tab_toggle" data-tab-target="tab_lnkjkflfqykx" data-tab="objective-c">objective-c</a></li> </ul> <div id="tab_lnkjkflfqykx" class="ab-tab-content tab_toggle_div"> <div class="ab-tab-pane swift_tab " data-tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">didReceive</span><span class="p">(</span><span class="n">_</span> <span class="nv">response</span><span class="p">:</span> <span class="kt">UNNotificationResponse</span><span class="p">,</span> <span class="n">completionHandler</span> <span class="nv">completion</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">(</span><span class="kt">UNNotificationContentExtensionResponseOption</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Void</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">actionIdentifier</span> <span class="o">==</span> <span class="s">"YOUR-REGISTER-IDENTIFIER"</span> <span class="p">{</span> <span class="c1">// do something</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// do something else</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-tab-pane objective-c_tab " data-tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didReceiveNotificationResponse</span><span class="p">:(</span><span class="n">UNNotificationResponse</span> <span class="o">*</span><span class="p">)</span><span class="nv">response</span> <span class="nf">completionHandler</span><span class="p">:(</span><span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n">UNNotificationContentExtensionResponseOption</span><span class="p">))</span><span class="nv">completion</span> <span class="p">{</span> <span class="k">if</span> <span class="p">([</span><span class="n">response</span><span class="p">.</span><span class="n">actionIdentifier</span> <span class="nf">isEqualToString</span><span class="p">:</span><span class="s">@"YOUR-REGISTER-IDENTIFIER"</span><span class="p">])</span> <span class="p">{</span> <span class="n">completion</span><span class="p">(</span><span class="n">UNNotificationContentExtensionResponseOptionDismiss</span><span class="p">);</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="n">completion</span><span class="p">(</span><span class="n">UNNotificationContentExtensionResponseOptionDoNotDismiss</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> <h5 id="dismissing-pushes">Dismissing pushes</h5> <p>Push notifications can be automatically dismissed from an action button press. There exist three pre-built push dismissal options that are recommended:</p> <ol> <li><code class="language-plaintext highlighter-rouge">completion(.dismiss)</code> - Dismisses the notification</li> <li><code class="language-plaintext highlighter-rouge">completion(.doNotDismiss)</code> - Notification stays open</li> <li><code class="language-plaintext highlighter-rouge">completion(.dismissAndForward)</code> - Push dismisses and the user gets forwarded into the application.</li> </ol> <h4 id="other-use-cases-2">Other use cases</h4> <p>Requesting user input through push notifications is an exciting opportunity that many companies do not take advantage of. In these push messages, you can not only request basic information like name, email, or number, but you could also prompt users to complete a user profile if unfinished, or even to submit feedback.</p> <h5 id="ready-to-log-analytics-2">Ready to log analytics?</h5> <p>Visit the <a href="#logging-analytics">following section</a> to get a better understanding of how the flow of data should look.</p> <h2 id="logging-analytics">Logging analytics</h2> <h3 id="logging-with-the-braze-api-recommended">Logging with the Braze API (recommended)</h3> <p>Logging analytics can only be done in real-time with the help of the customer’s server hitting our <a href="/docs/api/endpoints/user_data/post_user_track/"><code class="language-plaintext highlighter-rouge">/users/track</code> endpoint</a>. To log analytics, send down the <code class="language-plaintext highlighter-rouge">braze_id</code> value in the key-value pairs field (as seen in the following screenshot) to identify which user profile to update.</p> <p><img src="/docs/assets/img/push_implementation_guide/push18.png?d7fc546f7b4af6d9c01c111faee4a218" alt="A push message with three sets of key-value pairs. 1. "Braze_id" set as a Liquid call to retrieve Braze ID. 2. "cert_title" set as "Braze Marketer Certification". 3. "Cert_description" set as "Certified Braze marketers drive..."." style="max-width:80%;" /></p> <h3 id="logging-manually">Logging manually</h3> <p>Logging manually will require you to first configure App Groups within Xcode, and then create, save, and retrieve analytics. This will require some custom developer work on your end. The following code snippets shown will help address this.</p> <p>It’s also important to note that analytics are not sent to Braze until the mobile application is subsequently launched. This means that, depending on your dismissal settings, there often exists an indeterminate period of time between when a push notification is dismissed and the mobile app is launched and the analytics are retrieved. While this time buffer may not affect all use cases, users should consider the impact and if necessary, adjust their user journey to include opening the application to address this concern.</p> <p><img src="/docs/assets/img/push_implementation_guide/push13.png?b344791d6cb043b40fc9ed534252384d" alt="A graphic describing how analytics are processed in Braze. 1. Analytics data is created. 2. Analytics data is saved. 3. Push notification is dismissed. 4. Indeterminate period of time between when push notification is dismissed and mobile app is launched. 5. Mobile app is launched. 6. Analytics data is received. 7. Analytics data is sent to Braze." /></p> <h4 id="step-1-configure-app-groups-within-xcode">Step 1: Configure App Groups within Xcode</h4> <p>Add a capability <code class="language-plaintext highlighter-rouge">App Groups</code>. If you haven’t had any app group in your app, go to the capability of the main app target, turn on the <code class="language-plaintext highlighter-rouge">App Groups</code>, and click the “+”. Use your App’s bundle ID to create the App Group. For example, if your app’s bundle ID is <code class="language-plaintext highlighter-rouge">com.company.appname</code>, you can name your App Group <code class="language-plaintext highlighter-rouge">group.com.company.appname.xyz</code>. Make sure the <code class="language-plaintext highlighter-rouge">App Groups</code> are turned on for both your main app target and the content extension target.</p> <p><img src="/docs/assets/img/ios/push_story/add_app_groups.png?b154a979f0573611390b1cee567592a9" alt="" /></p> <h4 id="step-2-integrate-code-snippets">Step 2: Integrate code snippets</h4> <p>The following code snippets are a helpful reference on how to save and send custom events, custom attributes, and user attributes. This guide will be speaking in terms of UserDefaults, but the code representation will be in the form of a helper file <code class="language-plaintext highlighter-rouge">RemoteStorage</code>. There also exist additional helper files <code class="language-plaintext highlighter-rouge">UserAttributes</code> and <code class="language-plaintext highlighter-rouge">EventName Dictionary</code> that are used when sending and saving user attributes. All helper files can be found at the end of this guide.</p> <ul class="ab-nav ab-nav-tabs tab_toggle_only_ul" id="tab_ayzhigjnyosu_nav"> <li tabindex="0" class="coderow custom-events active"><a class="tab_toggle_only" data-tab-target="tab_ayzhigjnyosu" data-tab="custom-events">custom events</a></li> <li tabindex="0" class="coderow custom-attributes"><a class="tab_toggle_only" data-tab-target="tab_ayzhigjnyosu" data-tab="custom-attributes">custom attributes</a></li> <li tabindex="0" class="coderow user-attributes"><a class="tab_toggle_only" data-tab-target="tab_ayzhigjnyosu" data-tab="user-attributes">user attributes</a></li> <li tabindex="0" class="coderow helper-files"><a class="tab_toggle_only" data-tab-target="tab_ayzhigjnyosu" data-tab="helper-files">helper files</a></li> </ul> <div id="tab_ayzhigjnyosu" class="ab-tab-content tab_toggle_only_div"> <div class="ab-tab-pane custom-events_tab " data-tab="custom events"><h5 id="saving-custom-events">Saving custom events</h5> <p>To save custom events you must create the analytics from scratch. This is done by creating a dictionary, populating it with metadata, and saving the data through the use of a helper file.</p> <ol> <li>Initialize a dictionary with event metadata</li> <li>Initialize <code class="language-plaintext highlighter-rouge">userDefaults</code> to retrieve and store the event data</li> <li>If there is an existing array, append new data to the existing array and save</li> <li>If there is not an existing array, save the new array to <code class="language-plaintext highlighter-rouge">userDefaults</code></li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_zqhphasapdfy_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_zqhphasapdfy" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_zqhphasapdfy" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_zqhphasapdfy" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">saveCustomEvent</span><span class="p">(</span><span class="n">with</span> <span class="nv">properties</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]?</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// 1</span> <span class="k">let</span> <span class="nv">customEventDictionary</span> <span class="o">=</span> <span class="kt">Dictionary</span><span class="p">(</span><span class="nv">eventName</span><span class="p">:</span> <span class="s">"YOUR-EVENT-NAME"</span><span class="p">,</span> <span class="nv">properties</span><span class="p">:</span> <span class="n">properties</span><span class="p">)</span> <span class="c1">// 2</span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="k">var</span> <span class="nv">pendingEvents</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomEvents</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]]</span> <span class="p">{</span> <span class="n">pendingEvents</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="nv">contentsOf</span><span class="p">:</span> <span class="p">[</span><span class="n">customEventDictionary</span><span class="p">])</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">(</span><span class="n">pendingEvents</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomEvents</span><span class="p">)</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">([</span><span class="n">customEventDictionary</span><span class="p">],</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomEvents</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">saveCustomEvent</span><span class="p">:(</span><span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="p">)</span><span class="nv">properties</span> <span class="p">{</span> <span class="c1">// 1 </span> <span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="n">customEventDictionary</span> <span class="o">=</span> <span class="p">[[</span><span class="n">NSDictionary</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithEventName</span><span class="p">:</span><span class="s">@"YOUR-EVENT-NAME"</span> <span class="nf">properties</span><span class="p">:</span><span class="n">properties</span><span class="p">];</span> <span class="c1">// 2</span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSMutableArray</span> <span class="o">*</span><span class="n">pendingEvents</span> <span class="o">=</span> <span class="p">[[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomEvents</span><span class="p">]</span> <span class="nf">mutableCopy</span><span class="p">];</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="p">(</span><span class="n">pendingEvents</span><span class="p">)</span> <span class="p">{</span> <span class="p">[</span><span class="n">pendingEvents</span> <span class="nf">addObject</span><span class="p">:</span><span class="n">customEventDictionary</span><span class="p">];</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:</span><span class="n">pendingEvents</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:@[</span> <span class="n">customEventDictionary</span> <span class="p">]</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> <h5 id="sending-custom-events-to-braze">Sending custom events to Braze</h5> <p>After the SDK is initialized is the best time to log any saved analytics from a notification content app extension. This can be done by, looping through any pending events, checking for the “Event Name” key, setting the appropriate values in Braze, and then clearing the storage for the next time this function is needed.</p> <ol> <li>Loop through the array of pending events</li> <li>Loop through each key-value pair in the <code class="language-plaintext highlighter-rouge">pendingEvents</code> dictionary</li> <li>Explicitly checking key for “Event Name” to set the value accordingly</li> <li>Every other key-value will be added to the <code class="language-plaintext highlighter-rouge">properties</code> dictionary</li> <li>Log individual custom event</li> <li>Remove all pending events from storage</li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_fdtbpdkvqbph_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_fdtbpdkvqbph" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_fdtbpdkvqbph" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_fdtbpdkvqbph" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">logPendingCustomEventsIfNecessary</span><span class="p">()</span> <span class="p">{</span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">pendingEvents</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomEvents</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]]</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="p">}</span> <span class="c1">// 1 </span> <span class="k">for</span> <span class="n">event</span> <span class="k">in</span> <span class="n">pendingEvents</span> <span class="p">{</span> <span class="k">var</span> <span class="nv">eventName</span><span class="p">:</span> <span class="kt">String</span><span class="p">?</span> <span class="k">var</span> <span class="nv">properties</span><span class="p">:</span> <span class="p">[</span><span class="kt">AnyHashable</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">[:]</span> <span class="c1">// 2</span> <span class="k">for</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">in</span> <span class="n">event</span> <span class="p">{</span> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="kt">PushNotificationKey</span><span class="o">.</span><span class="n">eventName</span><span class="o">.</span><span class="n">rawValue</span> <span class="p">{</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="k">let</span> <span class="nv">eventNameValue</span> <span class="o">=</span> <span class="n">value</span> <span class="k">as?</span> <span class="kt">String</span> <span class="p">{</span> <span class="n">eventName</span> <span class="o">=</span> <span class="n">eventNameValue</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nf">print</span><span class="p">(</span><span class="s">"Invalid type for event_name key"</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="n">properties</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 5 </span> <span class="k">if</span> <span class="k">let</span> <span class="nv">eventName</span> <span class="o">=</span> <span class="n">eventName</span> <span class="p">{</span> <span class="nf">logCustomEvent</span><span class="p">(</span><span class="n">eventName</span><span class="p">,</span> <span class="nv">withProperties</span><span class="p">:</span> <span class="n">properties</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 6 </span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">removeObject</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomEvents</span><span class="p">)</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">logPendingEventsIfNecessary</span> <span class="p">{</span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSArray</span> <span class="o">*</span><span class="n">pendingEvents</span> <span class="o">=</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomEvents</span><span class="p">];</span> <span class="c1">// 1 </span> <span class="k">for</span> <span class="p">(</span><span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="n">event</span> <span class="k">in</span> <span class="n">pendingEvents</span><span class="p">)</span> <span class="p">{</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">eventName</span> <span class="o">=</span> <span class="nb">nil</span><span class="p">;</span> <span class="n">NSMutableDictionary</span> <span class="o">*</span><span class="n">properties</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSMutableDictionary</span> <span class="nf">dictionary</span><span class="p">];</span> <span class="c1">// 2 </span> <span class="k">for</span> <span class="p">(</span><span class="n">NSString</span><span class="o">*</span> <span class="n">key</span> <span class="k">in</span> <span class="n">event</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">([</span><span class="n">key</span> <span class="nf">isEqualToString</span><span class="p">:</span><span class="s">@"event_name"</span><span class="p">])</span> <span class="p">{</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="p">([[</span><span class="n">event</span> <span class="nf">objectForKey</span><span class="p">:</span><span class="n">key</span><span class="p">]</span> <span class="nf">isKindOfClass</span><span class="p">:[</span><span class="n">NSString</span> <span class="nf">class</span><span class="p">]])</span> <span class="p">{</span> <span class="n">eventName</span> <span class="o">=</span> <span class="p">[</span><span class="n">event</span> <span class="nf">objectForKey</span><span class="p">:</span><span class="n">key</span><span class="p">];</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="n">NSLog</span><span class="p">(</span><span class="s">@"Invalid type for event_name key"</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="n">properties</span><span class="p">[</span><span class="nf">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="p">[</span><span class="nf">key</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 5 </span> <span class="k">if</span> <span class="p">(</span><span class="n">eventName</span> <span class="o">!=</span> <span class="nb">nil</span><span class="p">)</span> <span class="p">{</span> <span class="p">[[</span><span class="n">Appboy</span> <span class="nf">sharednstance</span><span class="p">]</span> <span class="nf">logCustomEvent</span><span class="p">:</span><span class="n">eventName</span> <span class="nf">withProperties</span><span class="p">:</span><span class="n">properties</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 6 </span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">removeObjectForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomEvents</span><span class="p">];</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div></div> <div class="ab-tab-pane custom-attributes_tab " data-tab="custom attributes"><h5 id="saving-custom-attributes">Saving custom attributes</h5> <p>To save custom attributes you must create the analytics from scratch. This is done by creating a dictionary, populating it with metadata, and saving the data through the use of a helper file.</p> <ol> <li>Initialize a dictionary with attribute metadata</li> <li>Initialize <code class="language-plaintext highlighter-rouge">userDefaults</code> to retrieve and store the attribute data</li> <li>If there is an existing array, append new data to the existing array and save</li> <li>If there is not an existing array, save the new array to <code class="language-plaintext highlighter-rouge">userDefaults</code></li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_vyrrapzxrdhd_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_vyrrapzxrdhd" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_vyrrapzxrdhd" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_vyrrapzxrdhd" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">saveCustomAttribute</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// 1 </span> <span class="k">let</span> <span class="nv">customAttributeDictionary</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s">"YOUR-CUSTOM-ATTRIBUTE-KEY"</span><span class="p">:</span> <span class="s">"YOUR-CUSTOM-ATTRIBUTE-VALUE"</span><span class="p">]</span> <span class="c1">// 2 </span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="k">var</span> <span class="nv">pendingAttributes</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomAttributes</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]]</span> <span class="p">{</span> <span class="n">pendingAttributes</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="nv">contentsOf</span><span class="p">:</span> <span class="p">[</span><span class="n">customAttributeDictionary</span><span class="p">])</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">(</span><span class="n">pendingAttributes</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomAttributes</span><span class="p">)</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">([</span><span class="n">customAttributeDictionary</span><span class="p">],</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomAttributes</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">saveCustomAttribute</span> <span class="p">{</span> <span class="c1">// 1 </span> <span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="n">customAttributeDictionary</span> <span class="o">=</span> <span class="p">@{</span> <span class="s">@"YOUR-CUSTOM-ATTRIBUTE-KEY"</span><span class="o">:</span> <span class="s">@"YOUR-CUSTOM-ATTRIBUTE-VALUE"</span> <span class="p">};</span> <span class="c1">// 2 </span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSMutableArray</span> <span class="o">*</span><span class="n">pendingAttributes</span> <span class="o">=</span> <span class="p">[[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">]</span> <span class="nf">mutableCopy</span><span class="p">];</span> <span class="c1">// 3</span> <span class="k">if</span> <span class="p">(</span><span class="n">pendingAttributes</span><span class="p">)</span> <span class="p">{</span> <span class="p">[</span><span class="n">pendingAttributes</span> <span class="nf">addObject</span><span class="p">:</span><span class="n">customAttributeDictionary</span><span class="p">];</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:</span><span class="n">pendingAttributes</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:@[</span> <span class="n">customAttributeDictionary</span> <span class="p">]</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> <h5 id="sending-custom-attributes-to-braze">Sending custom attributes to Braze</h5> <p>After the SDK is initialized is the best time to log any saved analytics from a notification content app extension. This can be done by looping through the pending attributes, setting the appropriate custom attribute in Braze, and then clearing the storage for the next time this function is needed.</p> <ol> <li>Loop through the array of pending attributes</li> <li>Loop through each key-value pair in the <code class="language-plaintext highlighter-rouge">pendingAttributes</code> dictionary</li> <li>Log individual custom attribute with corresponding key and value</li> <li>Remove all pending attributes from storage</li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_ogcfewbdfnze_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_ogcfewbdfnze" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_ogcfewbdfnze" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_ogcfewbdfnze" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">logPendingCustomAttributesIfNecessary</span><span class="p">()</span> <span class="p">{</span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">pendingAttributes</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomAttributes</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]]</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="p">}</span> <span class="c1">// 1</span> <span class="n">pendingAttributes</span><span class="o">.</span><span class="n">forEach</span> <span class="p">{</span> <span class="nf">setCustomAttributesWith</span><span class="p">(</span><span class="nv">keysAndValues</span><span class="p">:</span> <span class="nv">$0</span><span class="p">)</span> <span class="p">}</span> <span class="c1">// 4 </span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">removeObject</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingCustomAttributes</span><span class="p">)</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">setCustomAttributesWith</span><span class="p">(</span><span class="nv">keysAndValues</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">])</span> <span class="p">{</span> <span class="c1">// 2 </span> <span class="k">for</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">in</span> <span class="n">keysAndValues</span> <span class="p">{</span> <span class="c1">// 3</span> <span class="k">if</span> <span class="k">let</span> <span class="nv">value</span> <span class="o">=</span> <span class="n">value</span> <span class="k">as?</span> <span class="p">[</span><span class="kt">String</span><span class="p">]</span> <span class="p">{</span> <span class="nf">setCustomAttributeArrayWithKey</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="nv">andValue</span><span class="p">:</span> <span class="n">value</span><span class="p">)</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nf">setCustomAttributeWithKey</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="nv">andValue</span><span class="p">:</span> <span class="n">value</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">logPendingCustomAttributesIfNecessary</span> <span class="p">{</span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSArray</span> <span class="o">*</span><span class="n">pendingAttributes</span> <span class="o">=</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="c1">// 1</span> <span class="k">for</span> <span class="p">(</span><span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span><span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="n">attribute</span> <span class="k">in</span> <span class="n">pendingAttributes</span><span class="p">)</span> <span class="p">{</span> <span class="p">[</span><span class="n">self</span> <span class="nf">setCustomAttributeWith</span><span class="p">:</span><span class="n">attribute</span><span class="p">];</span> <span class="p">}</span> <span class="c1">// 4 </span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">removeObjectForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">setCustomAttributeWith</span><span class="p">:(</span><span class="n">NSDictionary</span><span class="o"><</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">></span> <span class="o">*</span><span class="p">)</span><span class="nv">keysAndValues</span> <span class="p">{</span> <span class="c1">// 2</span> <span class="k">for</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="n">key</span> <span class="k">in</span> <span class="n">keysAndValues</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// 3 </span> <span class="p">[</span><span class="n">self</span> <span class="nf">setCustomAttributeWith</span><span class="p">:</span><span class="n">key</span> <span class="nf">andValue</span><span class="p">:[</span><span class="n">keysAndValues</span> <span class="nf">objectForKey</span><span class="p">:</span><span class="n">key</span><span class="p">]];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div></div> <div class="ab-tab-pane user-attributes_tab " data-tab="user attributes"><h5 id="saving-user-attributes">Saving user attributes</h5> <p>When saving user attributes, it is recommended to create a custom object to decipher what type of attribute is being updated (<code class="language-plaintext highlighter-rouge">email</code>, <code class="language-plaintext highlighter-rouge">first_name</code>, <code class="language-plaintext highlighter-rouge">phone_number</code>, etc.). The object should be compatible with being stored/retrieved from <code class="language-plaintext highlighter-rouge">UserDefaults</code>. See the <code class="language-plaintext highlighter-rouge">UserAttribute</code> helper file for one example of how to accomplish this.</p> <ol> <li>Initialize an encoded <code class="language-plaintext highlighter-rouge">UserAttribute</code> object with the corresponding type</li> <li>Initialize <code class="language-plaintext highlighter-rouge">userDefaults</code> to retrieve and store the event data</li> <li>If there is an existing array, append new data to the existing array and save</li> <li>If there is not an existing array, save the new array to <code class="language-plaintext highlighter-rouge">userDefaults</code></li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_rsutnfeizcug_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_rsutnfeizcug" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_rsutnfeizcug" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_rsutnfeizcug" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">saveUserAttribute</span><span class="p">()</span> <span class="p">{</span> <span class="c1">// 1 </span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">data</span> <span class="o">=</span> <span class="k">try</span><span class="p">?</span> <span class="kt">PropertyListEncoder</span><span class="p">()</span><span class="o">.</span><span class="nf">encode</span><span class="p">(</span><span class="kt">UserAttribute</span><span class="o">.</span><span class="nf">userAttributeType</span><span class="p">(</span><span class="s">"USER-ATTRIBUTE-VALUE"</span><span class="p">))</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="p">}</span> <span class="c1">// 2 </span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="k">var</span> <span class="nv">pendingAttributes</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingUserAttributes</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[</span><span class="kt">Data</span><span class="p">]</span> <span class="p">{</span> <span class="n">pendingAttributes</span><span class="o">.</span><span class="nf">append</span><span class="p">(</span><span class="nv">contentsOf</span><span class="p">:</span> <span class="p">[</span><span class="n">data</span><span class="p">])</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">(</span><span class="n">pendingAttributes</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingUserAttributes</span><span class="p">)</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">store</span><span class="p">([</span><span class="n">data</span><span class="p">],</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingUserAttributes</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">saveUserAttribute</span> <span class="p">{</span> <span class="c1">// 1 </span> <span class="n">UserAttribute</span> <span class="o">*</span><span class="n">userAttribute</span> <span class="o">=</span> <span class="p">[[</span><span class="n">UserAttribute</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithUserField</span><span class="p">:</span><span class="s">@"USER-ATTRIBUTE-VALUE"</span> <span class="nf">attributeType</span><span class="p">:</span><span class="n">UserAttributeTypeEmail</span><span class="p">];</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">error</span><span class="p">;</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">data</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSKeyedArchiver</span> <span class="nf">archivedDataWithRootObject</span><span class="p">:</span><span class="n">userAttribute</span> <span class="nf">requiringSecureCoding</span><span class="p">:</span><span class="nb">YES</span> <span class="n">error</span><span class="o">:&</span><span class="n">error</span><span class="p">];</span> <span class="k">if</span> <span class="p">(</span><span class="n">error</span> <span class="o">!=</span> <span class="nb">nil</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// log error</span> <span class="p">}</span> <span class="c1">// 2 </span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSMutableArray</span> <span class="o">*</span><span class="n">pendingAttributes</span> <span class="o">=</span> <span class="p">[[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">]</span> <span class="nf">mutableCopy</span><span class="p">];</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="p">(</span><span class="n">pendingAttributes</span><span class="p">)</span> <span class="p">{</span> <span class="p">[</span><span class="n">pendingAttributes</span> <span class="nf">addObject</span><span class="p">:</span><span class="n">data</span><span class="p">];</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:</span><span class="n">pendingAttributes</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// 4 </span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">store</span><span class="p">:@[</span><span class="n">data</span><span class="p">]</span> <span class="nf">forKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> <h5 id="sending-user-attributes-to-braze">Sending user attributes to Braze</h5> <p>After the SDK is initialized is the best time to log any saved analytics from a notification content app extension. This can be done by looping through the pending attributes, setting the appropriate custom attribute in Braze, and then clearing the storage for the next time this function is needed.</p> <ol> <li>Loop through the array of <code class="language-plaintext highlighter-rouge">pendingAttributes</code> data</li> <li>Initialize an encoded <code class="language-plaintext highlighter-rouge">UserAttribute</code> object from attribute data</li> <li>Set specific user field based on the User Attribute type (email)</li> <li>Remove all pending user attributes from storage</li> </ol> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_pdmqqbtldqzm_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_pdmqqbtldqzm" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_pdmqqbtldqzm" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_pdmqqbtldqzm" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 </pre></td><td class="rouge-code"><pre><span class="kd">func</span> <span class="nf">logPendingUserAttributesIfNecessary</span><span class="p">()</span> <span class="p">{</span> <span class="k">let</span> <span class="nv">remoteStorage</span> <span class="o">=</span> <span class="kt">RemoteStorage</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="o">.</span><span class="n">suite</span><span class="p">)</span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">pendingAttributes</span> <span class="o">=</span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">retrieve</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingUserAttributes</span><span class="p">)</span> <span class="k">as?</span> <span class="p">[</span><span class="kt">Data</span><span class="p">]</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="p">}</span> <span class="c1">// 1 </span> <span class="k">for</span> <span class="n">attributeData</span> <span class="k">in</span> <span class="n">pendingAttributes</span> <span class="p">{</span> <span class="c1">// 2 </span> <span class="k">guard</span> <span class="k">let</span> <span class="nv">userAttribute</span> <span class="o">=</span> <span class="k">try</span><span class="p">?</span> <span class="kt">PropertyListDecoder</span><span class="p">()</span><span class="o">.</span><span class="nf">decode</span><span class="p">(</span><span class="kt">UserAttribute</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">from</span><span class="p">:</span> <span class="n">attributeData</span><span class="p">)</span> <span class="k">else</span> <span class="p">{</span> <span class="k">continue</span> <span class="p">}</span> <span class="c1">// 3 </span> <span class="k">switch</span> <span class="n">userAttribute</span> <span class="p">{</span> <span class="k">case</span> <span class="o">.</span><span class="nf">email</span><span class="p">(</span><span class="k">let</span> <span class="nv">email</span><span class="p">):</span> <span class="n">user</span><span class="p">?</span><span class="o">.</span><span class="n">email</span> <span class="o">=</span> <span class="n">email</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 4 </span> <span class="n">remoteStorage</span><span class="o">.</span><span class="nf">removeObject</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">pendingUserAttributes</span><span class="p">)</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 </pre></td><td class="rouge-code"><pre><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">logPendingUserAttributesIfNecessary</span> <span class="p">{</span> <span class="n">RemoteStorage</span> <span class="o">*</span><span class="n">remoteStorage</span> <span class="o">=</span> <span class="p">[[</span><span class="n">RemoteStorage</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithStorageType</span><span class="p">:</span><span class="n">StorageTypeSuite</span><span class="p">];</span> <span class="n">NSArray</span> <span class="o">*</span><span class="n">pendingAttributes</span> <span class="o">=</span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">retrieveForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">];</span> <span class="c1">// 1 </span> <span class="k">for</span> <span class="p">(</span><span class="n">NSData</span> <span class="o">*</span><span class="n">attributeData</span> <span class="k">in</span> <span class="n">pendingAttributes</span><span class="p">)</span> <span class="p">{</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">error</span><span class="p">;</span> <span class="c1">// 2 </span> <span class="n">UserAttribute</span> <span class="o">*</span><span class="n">userAttribute</span> <span class="o">=</span> <span class="p">[</span><span class="n">NSKeyedUnarchiver</span> <span class="nf">unarchivedObjectOfClass</span><span class="p">:[</span><span class="n">UserAttribute</span> <span class="nf">class</span><span class="p">]</span> <span class="nf">fromData</span><span class="p">:</span><span class="n">attributeData</span> <span class="n">error</span><span class="o">:&</span><span class="n">error</span><span class="p">];</span> <span class="k">if</span> <span class="p">(</span><span class="n">error</span> <span class="o">!=</span> <span class="nb">nil</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// log error</span> <span class="p">}</span> <span class="c1">// 3 </span> <span class="k">if</span> <span class="p">(</span><span class="n">userAttribute</span><span class="p">)</span> <span class="p">{</span> <span class="k">switch</span> <span class="p">(</span><span class="n">userAttribute</span><span class="p">.</span><span class="n">attributeType</span><span class="p">)</span> <span class="p">{</span> <span class="k">case</span> <span class="n">UserAttributeTypeEmail</span><span class="p">:</span> <span class="p">[</span><span class="n">self</span> <span class="nf">user</span><span class="p">].</span><span class="n">email</span> <span class="o">=</span> <span class="n">userAttribute</span><span class="p">.</span><span class="n">userField</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="c1">// 4 </span> <span class="p">[</span><span class="n">remoteStorage</span> <span class="nf">removeObjectForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">];</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div></div> <div class="ab-tab-pane helper-files_tab " data-tab="helper files"><h5 id="helper-files">Helper files</h5> <div id="remotestorage-helper-file" class="details_title"></div> <details><summary>RemoteStorage Helper File</summary><div class="detail_div"> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_rhlxjvnzavie_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_rhlxjvnzavie" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_rhlxjvnzavie" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_rhlxjvnzavie" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 </pre></td><td class="rouge-code"><pre><span class="kd">enum</span> <span class="kt">RemoteStorageKey</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="kt">CaseIterable</span> <span class="p">{</span> <span class="c1">// MARK: - Notification Content Extension Analytics</span> <span class="k">case</span> <span class="n">pendingCustomEvents</span> <span class="o">=</span> <span class="s">"pending_custom_events"</span> <span class="k">case</span> <span class="n">pendingCustomAttributes</span> <span class="o">=</span> <span class="s">"pending_custom_attributes"</span> <span class="k">case</span> <span class="n">pendingUserAttributes</span> <span class="o">=</span> <span class="s">"pending_user_attributes"</span> <span class="p">}</span> <span class="kd">enum</span> <span class="kt">RemoteStorageType</span> <span class="p">{</span> <span class="k">case</span> <span class="n">standard</span> <span class="k">case</span> <span class="n">suite</span> <span class="p">}</span> <span class="kd">class</span> <span class="kt">RemoteStorage</span><span class="p">:</span> <span class="kt">NSObject</span> <span class="p">{</span> <span class="kd">private</span> <span class="k">var</span> <span class="nv">storageType</span><span class="p">:</span> <span class="kt">RemoteStorageType</span> <span class="o">=</span> <span class="o">.</span><span class="n">standard</span> <span class="kd">private</span> <span class="kd">lazy</span> <span class="k">var</span> <span class="nv">defaults</span><span class="p">:</span> <span class="kt">UserDefaults</span> <span class="o">=</span> <span class="p">{</span> <span class="k">switch</span> <span class="n">storageType</span> <span class="p">{</span> <span class="k">case</span> <span class="o">.</span><span class="nv">standard</span><span class="p">:</span> <span class="k">return</span> <span class="o">.</span><span class="n">standard</span> <span class="k">case</span> <span class="o">.</span><span class="nv">suite</span><span class="p">:</span> <span class="k">return</span> <span class="kt">UserDefaults</span><span class="p">(</span><span class="nv">suiteName</span><span class="p">:</span> <span class="s">"YOUR-DOMAIN-IDENTIFIER"</span><span class="p">)</span><span class="o">!</span> <span class="p">}</span> <span class="p">}()</span> <span class="nf">init</span><span class="p">(</span><span class="nv">storageType</span><span class="p">:</span> <span class="kt">RemoteStorageType</span> <span class="o">=</span> <span class="o">.</span><span class="n">standard</span><span class="p">)</span> <span class="p">{</span> <span class="k">self</span><span class="o">.</span><span class="n">storageType</span> <span class="o">=</span> <span class="n">storageType</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">store</span><span class="p">(</span><span class="n">_</span> <span class="nv">value</span><span class="p">:</span> <span class="kt">Any</span><span class="p">,</span> <span class="n">forKey</span> <span class="nv">key</span><span class="p">:</span> <span class="kt">RemoteStorageKey</span><span class="p">)</span> <span class="p">{</span> <span class="n">defaults</span><span class="o">.</span><span class="nf">set</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">rawValue</span><span class="p">)</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">retrieve</span><span class="p">(</span><span class="n">forKey</span> <span class="nv">key</span><span class="p">:</span> <span class="kt">RemoteStorageKey</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Any</span><span class="p">?</span> <span class="p">{</span> <span class="k">return</span> <span class="n">defaults</span><span class="o">.</span><span class="nf">object</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">rawValue</span><span class="p">)</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">removeObject</span><span class="p">(</span><span class="n">forKey</span> <span class="nv">key</span><span class="p">:</span> <span class="kt">RemoteStorageKey</span><span class="p">)</span> <span class="p">{</span> <span class="n">defaults</span><span class="o">.</span><span class="nf">removeObject</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">rawValue</span><span class="p">)</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">resetStorageKeys</span><span class="p">()</span> <span class="p">{</span> <span class="k">for</span> <span class="n">key</span> <span class="k">in</span> <span class="kt">RemoteStorageKey</span><span class="o">.</span><span class="n">allCases</span> <span class="p">{</span> <span class="n">defaults</span><span class="o">.</span><span class="nf">removeObject</span><span class="p">(</span><span class="nv">forKey</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">rawValue</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 </pre></td><td class="rouge-code"><pre><span class="k">@interface</span> <span class="nc">RemoteStorage</span> <span class="p">()</span> <span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">StorageType</span> <span class="n">storageType</span><span class="p">;</span> <span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSUserDefaults</span> <span class="o">*</span><span class="n">defaults</span><span class="p">;</span> <span class="k">@end</span> <span class="k">@implementation</span> <span class="nc">RemoteStorage</span> <span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">initWithStorageType</span><span class="p">:(</span><span class="n">StorageType</span><span class="p">)</span><span class="nv">storageType</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">self</span> <span class="o">=</span> <span class="p">[</span><span class="n">super</span> <span class="nf">init</span><span class="p">])</span> <span class="p">{</span> <span class="n">self</span><span class="p">.</span><span class="n">storageType</span> <span class="o">=</span> <span class="n">storageType</span><span class="p">;</span> <span class="p">}</span> <span class="k">return</span> <span class="n">self</span><span class="p">;</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">store</span><span class="p">:(</span><span class="n">id</span><span class="p">)</span><span class="nv">value</span> <span class="nf">forKey</span><span class="p">:(</span><span class="n">RemoteStorageKey</span><span class="p">)</span><span class="nv">key</span> <span class="p">{</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">setValue</span><span class="p">:</span><span class="n">value</span> <span class="nf">forKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">key</span><span class="p">]];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">retrieveForKey</span><span class="p">:(</span><span class="n">RemoteStorageKey</span><span class="p">)</span><span class="nv">key</span> <span class="p">{</span> <span class="k">return</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">objectForKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">key</span><span class="p">]];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">removeObjectForKey</span><span class="p">:(</span><span class="n">RemoteStorageKey</span><span class="p">)</span><span class="nv">key</span> <span class="p">{</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">removeObjectForKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">key</span><span class="p">]];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">resetStorageKeys</span> <span class="p">{</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">removeObjectForKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomEvents</span><span class="p">]];</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">removeObjectForKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">]];</span> <span class="p">[[</span><span class="n">self</span> <span class="nf">defaults</span><span class="p">]</span> <span class="nf">removeObjectForKey</span><span class="p">:[</span><span class="n">self</span> <span class="nf">rawValueForKey</span><span class="p">:</span><span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">]];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="n">NSUserDefaults</span> <span class="o">*</span><span class="p">)</span><span class="n">defaults</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">self</span><span class="p">.</span><span class="n">defaults</span><span class="p">)</span> <span class="p">{</span> <span class="k">switch</span> <span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">storageType</span><span class="p">)</span> <span class="p">{</span> <span class="k">case</span> <span class="n">StorageTypeStandard</span><span class="p">:</span> <span class="k">return</span> <span class="p">[</span><span class="n">NSUserDefaults</span> <span class="nf">standardUserDefaults</span><span class="p">];</span> <span class="k">break</span><span class="p">;</span> <span class="k">case</span> <span class="n">StorageTypeSuite</span><span class="p">:</span> <span class="k">return</span> <span class="p">[[</span><span class="n">NSUserDefaults</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithSuiteName</span><span class="p">:</span><span class="s">@"YOUR-DOMAIN-IDENTIFIER"</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="n">self</span><span class="p">.</span><span class="n">defaults</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="n">NSString</span><span class="o">*</span><span class="p">)</span><span class="nf">rawValueForKey</span><span class="p">:(</span><span class="n">RemoteStorageKey</span><span class="p">)</span><span class="nv">remoteStorageKey</span> <span class="p">{</span> <span class="k">switch</span><span class="p">(</span><span class="n">remoteStorageKey</span><span class="p">)</span> <span class="p">{</span> <span class="k">case</span> <span class="n">RemoteStorageKeyPendingCustomEvents</span><span class="p">:</span> <span class="k">return</span> <span class="s">@"pending_custom_events"</span><span class="p">;</span> <span class="k">case</span> <span class="n">RemoteStorageKeyPendingCustomAttributes</span><span class="p">:</span> <span class="k">return</span> <span class="s">@"pending_custom_attributes"</span><span class="p">;</span> <span class="k">case</span> <span class="n">RemoteStorageKeyPendingUserAttributes</span><span class="p">:</span> <span class="k">return</span> <span class="s">@"pending_user_attributes"</span><span class="p">;</span> <span class="nl">default:</span> <span class="p">[</span><span class="n">NSException</span> <span class="nf">raise</span><span class="p">:</span><span class="n">NSGenericException</span> <span class="nf">format</span><span class="p">:</span><span class="s">@"Unexpected FormatType."</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> </div></details> <div id="userattribute-helper-file" class="details_title"></div> <details><summary>UserAttribute Helper File</summary><div class="detail_div"> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_dbgjzrzmfsyf_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_dbgjzrzmfsyf" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_dbgjzrzmfsyf" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_dbgjzrzmfsyf" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 </pre></td><td class="rouge-code"><pre><span class="kd">enum</span> <span class="kt">UserAttribute</span><span class="p">:</span> <span class="kt">Hashable</span> <span class="p">{</span> <span class="k">case</span> <span class="nf">email</span><span class="p">(</span><span class="kt">String</span><span class="p">?)</span> <span class="p">}</span> <span class="c1">// MARK: - Codable</span> <span class="kd">extension</span> <span class="kt">UserAttribute</span><span class="p">:</span> <span class="kt">Codable</span> <span class="p">{</span> <span class="kd">private</span> <span class="kd">enum</span> <span class="kt">CodingKeys</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="kt">CodingKey</span> <span class="p">{</span> <span class="k">case</span> <span class="n">email</span> <span class="p">}</span> <span class="kd">func</span> <span class="nf">encode</span><span class="p">(</span><span class="n">to</span> <span class="nv">encoder</span><span class="p">:</span> <span class="kt">Encoder</span><span class="p">)</span> <span class="k">throws</span> <span class="p">{</span> <span class="k">var</span> <span class="nv">values</span> <span class="o">=</span> <span class="n">encoder</span><span class="o">.</span><span class="nf">container</span><span class="p">(</span><span class="nv">keyedBy</span><span class="p">:</span> <span class="kt">CodingKeys</span><span class="o">.</span><span class="k">self</span><span class="p">)</span> <span class="k">switch</span> <span class="k">self</span> <span class="p">{</span> <span class="k">case</span> <span class="o">.</span><span class="nf">email</span><span class="p">(</span><span class="k">let</span> <span class="nv">email</span><span class="p">):</span> <span class="k">try</span> <span class="n">values</span><span class="o">.</span><span class="nf">encode</span><span class="p">(</span><span class="n">email</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">email</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="nf">init</span><span class="p">(</span><span class="n">from</span> <span class="nv">decoder</span><span class="p">:</span> <span class="kt">Decoder</span><span class="p">)</span> <span class="k">throws</span> <span class="p">{</span> <span class="k">let</span> <span class="nv">values</span> <span class="o">=</span> <span class="k">try</span> <span class="n">decoder</span><span class="o">.</span><span class="nf">container</span><span class="p">(</span><span class="nv">keyedBy</span><span class="p">:</span> <span class="kt">CodingKeys</span><span class="o">.</span><span class="k">self</span><span class="p">)</span> <span class="k">let</span> <span class="nv">email</span> <span class="o">=</span> <span class="k">try</span> <span class="n">values</span><span class="o">.</span><span class="nf">decode</span><span class="p">(</span><span class="kt">String</span><span class="o">.</span><span class="k">self</span><span class="p">,</span> <span class="nv">forKey</span><span class="p">:</span> <span class="o">.</span><span class="n">email</span><span class="p">)</span> <span class="k">self</span> <span class="o">=</span> <span class="o">.</span><span class="nf">email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 </pre></td><td class="rouge-code"><pre><span class="k">@implementation</span> <span class="nc">UserAttribute</span> <span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">initWithUserField</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">userField</span> <span class="nf">attributeType</span><span class="p">:(</span><span class="n">UserAttributeType</span><span class="p">)</span><span class="nv">attributeType</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">self</span> <span class="o">=</span> <span class="p">[</span><span class="n">super</span> <span class="nf">init</span><span class="p">])</span> <span class="p">{</span> <span class="n">self</span><span class="p">.</span><span class="n">userField</span> <span class="o">=</span> <span class="n">userField</span><span class="p">;</span> <span class="n">self</span><span class="p">.</span><span class="n">attributeType</span> <span class="o">=</span> <span class="n">attributeType</span><span class="p">;</span> <span class="p">}</span> <span class="k">return</span> <span class="n">self</span><span class="p">;</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">encodeWithCoder</span><span class="p">:(</span><span class="n">NSCoder</span> <span class="o">*</span><span class="p">)</span><span class="nv">encoder</span> <span class="p">{</span> <span class="p">[</span><span class="n">encoder</span> <span class="nf">encodeObject</span><span class="p">:</span><span class="n">self</span><span class="p">.</span><span class="n">userField</span> <span class="nf">forKey</span><span class="p">:</span><span class="s">@"userField"</span><span class="p">];</span> <span class="p">[</span><span class="n">encoder</span> <span class="nf">encodeInteger</span><span class="p">:</span><span class="n">self</span><span class="p">.</span><span class="n">attributeType</span> <span class="nf">forKey</span><span class="p">:</span><span class="s">@"attributeType"</span><span class="p">];</span> <span class="p">}</span> <span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">initWithCoder</span><span class="p">:(</span><span class="n">NSCoder</span> <span class="o">*</span><span class="p">)</span><span class="nv">decoder</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">self</span> <span class="o">=</span> <span class="p">[</span><span class="n">super</span> <span class="nf">init</span><span class="p">])</span> <span class="p">{</span> <span class="n">self</span><span class="p">.</span><span class="n">userField</span> <span class="o">=</span> <span class="p">[</span><span class="n">decoder</span> <span class="nf">decodeObjectForKey</span><span class="p">:</span><span class="s">@"userField"</span><span class="p">];</span> <span class="n">NSInteger</span> <span class="n">attributeRawValue</span> <span class="o">=</span> <span class="p">[</span><span class="n">decoder</span> <span class="nf">decodeIntegerForKey</span><span class="p">:</span><span class="s">@"attributeType"</span><span class="p">];</span> <span class="n">self</span><span class="p">.</span><span class="n">attributeType</span> <span class="o">=</span> <span class="p">(</span><span class="n">UserAttributeType</span><span class="p">)</span> <span class="n">attributeRawValue</span><span class="p">;</span> <span class="p">}</span> <span class="k">return</span> <span class="n">self</span><span class="p">;</span> <span class="p">}</span> <span class="k">@end</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> </div></details> <div id="eventname-dictionary-helper-file" class="details_title"></div> <details><summary>EventName Dictionary Helper File</summary><div class="detail_div"> <ul class="ab-sub_nav ab-sub_nav-sub_tabs sub_tab_toggle_ul" id="sub_tab_koexbagrrnre_nav"> <li tabindex="0" class="coderow swift_sub_tab sub_active"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_koexbagrrnre" data-sub_tab="swift_sub_tab">swift</a></li> <li tabindex="0" class="coderow objective-c_sub_tab"><a class="sub_tab_toggle" data-sub_tab-target="sub_tab_koexbagrrnre" data-sub_tab="objective-c_sub_tab">objective-c</a></li> </ul> <div id="sub_tab_koexbagrrnre" class="ab-sub_tab-content sub_tab_toggle_div"> <div class="ab-sub_tab-pane swift_sub_tab " data-sub_tab="swift"><div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 </pre></td><td class="rouge-code"><pre><span class="kd">extension</span> <span class="kt">Dictionary</span> <span class="k">where</span> <span class="kt">Key</span> <span class="o">==</span> <span class="kt">String</span><span class="p">,</span> <span class="kt">Value</span> <span class="o">==</span> <span class="kt">Any</span> <span class="p">{</span> <span class="nf">init</span><span class="p">(</span><span class="nv">eventName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">properties</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">:</span> <span class="kt">Any</span><span class="p">]?</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">)</span> <span class="p">{</span> <span class="k">self</span><span class="o">.</span><span class="nf">init</span><span class="p">()</span> <span class="k">self</span><span class="p">[</span><span class="kt">PushNotificationKey</span><span class="o">.</span><span class="n">eventName</span><span class="o">.</span><span class="n">rawValue</span><span class="p">]</span> <span class="o">=</span> <span class="n">eventName</span> <span class="k">if</span> <span class="k">let</span> <span class="nv">properties</span> <span class="o">=</span> <span class="n">properties</span> <span class="p">{</span> <span class="k">for</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">in</span> <span class="n">properties</span> <span class="p">{</span> <span class="k">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></td></tr></tbody></table></code></pre></div></div></div> <div class="ab-sub_tab-pane objective-c_sub_tab " data-sub_tab="objective-c"><div class="language-objc highlighter-rouge"><div class="highlight"><pre class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 </pre></td><td class="rouge-code"><pre><span class="k">@implementation</span> <span class="nc">NSDictionary</span> <span class="p">(</span><span class="nl">Helper</span><span class="p">)</span> <span class="k">-</span> <span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="nf">initWithEventName</span><span class="p">:(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">eventName</span> <span class="nf">properties</span><span class="p">:(</span><span class="n">NSDictionary</span> <span class="o">*</span><span class="p">)</span><span class="nv">properties</span> <span class="p">{</span> <span class="n">self</span> <span class="o">=</span> <span class="p">[</span><span class="n">self</span> <span class="nf">init</span><span class="p">];</span> <span class="k">if</span> <span class="p">(</span><span class="n">self</span><span class="p">)</span> <span class="p">{</span> <span class="n">dict</span><span class="p">[</span><span class="s">@"event_name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">eventName</span><span class="p">;</span> <span class="k">for</span><span class="p">(</span><span class="n">id</span> <span class="n">key</span> <span class="k">in</span> <span class="n">properties</span><span class="p">)</span> <span class="p">{</span> <span class="n">dict</span><span class="p">[</span><span class="nf">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">properties</span><span class="p">[</span><span class="nf">key</span><span class="p">];</span> <span class="p">}</span> <span class="p">}</span> <span class="k">return</span> <span class="n">self</span><span class="p">;</span> <span class="p">}</span> <span class="k">@end</span> </pre></td></tr></tbody></table></code></pre></div></div></div> </div> </div></details> <p><br /></p></div> </div> </div><div id="bottom_nav" ><div class="gitedit_div"> <a href="https://github.com/braze-inc/braze-docs/blob/develop/_docs/_developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/implementation_guide.md" class="extignore" target="_blank"> <img src="/docs/assets/img/GitHub-Mark-32px.png" alt="Github" /> Edit this page on GitHub </a> </div> <div id="feedback"><div id="feedback_title"> HOW HELPFUL WAS THIS PAGE? </div><div id="feedback_answer"> <ul class="list-inline rating-list"> <li class="inline-star" tabindex="0"><i class="fas fa-star" data-value="Very Helpful" title="Very Helpful"></i></li> <li class="inline-star" tabindex="0"><i class="fas fa-star" data-value="Helpful" title="Helpful"></i></li> <li class="inline-star" tabindex="0"><i class="fas fa-star" data-value="Somewhat Helpful" title="Somewhat Helpful"></i></li> <li class="inline-star" tabindex="0"><i class="fas fa-star" data-value="Unhelpful" title="Unhelpful"></i></li> <li class="inline-star" tabindex="0"><i class="fas fa-star" data-value="Very Unhelpful" title="Very Unhelpful"></i></li> </ul> </div> <div id="feedback_comment_div"> <div> <textarea id="feedback_comment" placeholder="How can we improve this page?"></textarea> </div> <button type="submit" name="submit_feedback" value="SUBMIT FEEDBACK" class="btn btn-black" id="feedback_submit_button" role="button"> SUBMIT FEEDBACK </button> </div> <div id="feedback_msg"> </div> </div> <script type="text/javascript"> var feedback_site = '/docs/developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/implementation_guide/'; var feedback_article_title = 'Advanced Push Notification Implementation for iOS (Optional)'; var feedback_nav_title = 'Advanced Implementation (Optional)'; </script> <!-- div class="gradient-line" ></div --> <div id="bottom_page_nav"> <a id="page_prev_link"><div id="page_prev" ></div></a> <a id="page_next_link"><div id="page_next" ></div></a> </div> </div><div id="footer_div"> <div id="footer_container" class=""> <footer id="footer_terms"> <ul> <li>© Braze. All Rights Reserved</li> <li><a href="https://www.braze.com/privacy/"> Privacy Policy</a> </li> <li><button id="ot-sdk-btn" class="ot-sdk-show-settings" style="color: inherit;background: inherit;border: inherit;font: inherit;padding: 0;">Cookies</button></li> </ul> </footer> </div> </div> </div><div class="d-none d-lg-block col-lg-2 d-print-none" id="toc_col"> <div class="gitedit_div" style="margin-top: 30px;padding-left: 5px;"> <a href="https://github.com/braze-inc/braze-docs/blob/develop/_docs/_developer_guide/platform_integration_guides/legacy_sdks/ios/push_notifications/implementation_guide.md" class="extignore" target="_blank"> <img src="/docs/assets/img/GitHub-Mark-32px.png" alt="Github" /> Edit this page on GitHub </a> </div> <div id="toc" ></div> </div> </div> </div> <a id="cc_prompt" href="#"> <div class="gradient-circle spinning"></div> <div class="copy"><span>New Stuff!</span></div> </a> <div id="contentcards"> </div> </main> </body> </html>