Deliver better mobile apps

Safely deliver, configure, and optimize every feature outside of an app store release.

The leading solution for cross-platform feature flagging and experimentation

Product teams drive mobile engagement with Optimizely

Find out how Zumper mitigates risk when it comes to launching new features. Watch the video to learn about the Full Stack experiment that increased messages sent through their mobile app by 10%.

Experiment anywhere in your tech stack

Optimizely Full Stack is more than just mobile experimentation. Go beyond your mobile client and deep into your backend. Test pricing, search algorithms, and more.

Launch with confidence

Reduce the risk of releasing new app versions with phased rollouts. Feature flags, traffic allocation, and remotely configurable variables enable you to test new features and quickly remove or modify the ones that don’t work.

Platform Page mobile Rollout

Update your app in real-time

Modify app UI and functionality in real-time without waiting for App Store or Google Play review.

Platform Page mobile UI

Unify the customer experience

Ensure consistent user experiences throughout your entire platform. The mobile SDKs work seamlessly with all other Optimizely SDKs. Full Stack feature flagging and experimentation works across channels and devices, at every level of your tech stack.

Iterate faster, with more control and fewer risks

Flexible configuration options

Run experiments in any part of your app. Easily configure networking, logging, exception handling, integrations, and much more to meet your production needs.

Focus on performance

Experiment in real time with minimal performance impact. Our lightweight, open source SDKs make no network requests, and enable instant updates to your app--no App Store or Google Play Review required.

A trusted solution

Optimize your app on the world’s leading Experimentation Platform that is already delivering billions of experiences globally. Powered by Optimizely’s industry-leading Stats Engine.

                      
              #import <OptimizelySDKiOS/OptimizelySDKiOS.h>
              
              OPTLYManager *manager = [OPTLYManager init:^(OPTLYManagerBuilder * _Nullable builder) {
                builder.projectId = @"projectId";
              }];
              
              

// Asynchronously initialize the Optimizely client

[manager initializeWithCallback:^(NSError * _Nullable error, OPTLYClient * _Nullable client) {

// Activate an experiment

OPTLYVariation *variation = [client activate:@"my_experiment" userId:@"user_123"]; if ([variation.variationKey isEqualToString:@"variation_a"]) {

// Execute code for variation A

} else if ([variation.variationKey isEqualToString:@"variation_b"]) {

// Execute code for variation B

} else {

// Execute default code

}

// Track an event

[client track:@"purchase_completed" userId:@"user_123"]; }];
                      
              import OptimizelySDKiOS
              
              let optimizelyManager = OPTLYManager.init {(builder) in
                builder!.projectId = "projectId"
              }
              
              

// Asynchronously initialize the Optimizely Client

manager?.initialize(callback: { [weak self] (error, client) in

// Activate an experiment

let variation = client?.activate("my_experiment", userId: "user_123") if (variation?.variationKey == "variation_a") {

// Execute code for variation A

} else if (variation?.variationKey == "variation_b") {

// Execute code for variation B

} else {

// Execute default code

}

// Track an Event

client?.track("purchase_completed", userId: "user_123") })
                      
              import com.optimizely.ab.android.sdk.OptimizelyClient;
              
              OptimizelyClient optimizelyClient = optimizelyManager.getOptimizely();
              
              

// Activate an experiment

Variation variation = optimizelyClient.activate("my_experiment", "user_123"); if (variation != null) { if (variation.is("variation_a")) {

// Execute code for variation A

} else if (variation.is("variation_b")) {

// Execute code for variation B

} } else {

// Execute default code

}

// Track an event

optimizelyClient.track("purchase_completed", "user_123");
                      
              import { OptimizelyFeature } from '@optimizely/react-sdk'
               
              function FeatureComponent() {
                return (
                  <OptimizelyFeature feature="sort-algorithm">
                    {(isEnabled, variables) => (
                      <SearchComponent algorithm={variables.algorithm}>
                    )}
                  </OptimizelyFeature>
                )
              }
                      
                    

A complete mobile product solution for experimentation and feature flagging

  • Icon for Open source SDKs content
    Open source SDKs

    Our Swift, Objective-C, and Android SDKs are transparent, so you know exactly how they work.

  • Icon for Phased rollouts content
    Phased rollouts

    Reduce the risk of launching new features by rolling them out first to a small set of users, either random or targeted.

  • Icon for Audiences content
    Audiences

    Define custom attributes for fine-grained targeting and segmentation.

  • Icon for Full stack experimentation content
    Full stack experimentation

    Run experiments that span both frontend and backend code, in conjunction with any of Optimizely’s SDKs.

  • Icon for Instant updates content
    Instant updates

    Make updates to your experiments and variables in real-time without waiting for your next App Store release.

  • Icon for Traffic splitting content
    Traffic splitting

    Easily create randomized traffic switches anywhere in your app without affecting performance.

  • Icon for Event tracking content
    Event tracking

    Monitor all the conversion metrics and KPIs you care about, in your app or any other service.

  • Icon for Custom configuration content
    Custom configuration

    Easily swap out your own components for logging, error handling, event dispatching, integrations, and more.

  • Icon for Multichannel experimentation content
    Multichannel experimentation

    Set your own user IDs to create consistent personalized experiences across all your customer channels.

  • Icon for Optimizely Stats Engine content
    Optimizely Stats Engine

    See the impact of your experiments in real-time, with the world’s leading Experimentation Platform.

  • Icon for Raw event export content
    Raw event export

    Easily download the complete event data from Optimizely.

  • Icon for Enterprise-ready security content
    Enterprise-ready security

    Roles and permissions, 2-factor authentication, and single sign-on (SSO).

Trunk Club increased lead quality and stylist efficiency with Optimizely

At Trunk Club, mobile is at the forefront of their business. It’s where new customers first tend to interact with the brand and existing customers browse new collections. Because mobile users were often exploring rather than buying, the Trunk Club team experimented with different app mechanics to help separate the window shoppers from serious buyers.

Learn how Trunk Club increased lead quality and stylist efficiency by optimizing mobile app onboarding.

Start experimenting in your mobile app today