OneTrust Consent Management for iOS

Integrate the RudderStack iOS (Obj-C) SDK with OneTrust.

The iOS (Obj-C) SDKiOS (Obj-C) refers to the legacy RudderStack iOS SDK. Note that it will be deprecated soon.

For new implementations, use the iOS (Swift) SDK instead.
lets you specify the user’s consent during initialization.

This guide lists the steps to develop a consent interceptor for the iOS (Obj-C) SDK and use the interceptor to initialize the SDK after the user gives their consent.

The iOS (Swift) SDK does not have a dedicated OneTrust consent management integration

The new iOS (Swift) SDK does not have a dedicated integration for OneTrust consent management. To implement OneTrust consent-based event filtering for cloud mode destinations, add the consentManagement object within the context of your event payload.

See Consent Management Support Matrix for more information.

Overview

The consent management is designed to be a filter for the event destinations and the natively added factories. Since the SDK initializes the native integration factories during the startup, you must first capture the user’s consent to the cookie categories.

Note that:

  • The iOS (Obj-C) SDK supports the OneTrust consent management feature only in v1.10.0 and above.
  • You can add only one consent filter to the iOS (Obj-C) SDK.

For filtering, RudderStack uses the getConsentStatus(forCategory categoryId: String) method of the OneTrust SDK.

This setup assumes the iOS (Obj-C) SDK and the OneTrust SDK are already added to your application.

  1. Install RudderOneTrustConsentFilter by adding the following line to your Podfile:
ruby
pod 'RudderOneTrustConsentFilter', '~> 1.0.0'
  1. Import the iOS (Obj-C) SDK:
objectivec
@import RudderOneTrustConsentFilter;
  1. Add the imports to your AppDelegate file under the didFinishLaunchingWithOptions method, as shown:
objectivec
@interface AppDelegate ()<OTEventListener>

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[OTPublishersHeadlessSDK shared] startSDKWithStorageLocation:STORAGE_LOCATION domainIdentifier:DOMAIN_IDENTIFIER languageCode:@"en" params:nil loadOffline:NO completionHandler:^(OTResponse *response) {
        if (response.status) {
        
        }
    }];
    
    [[OTPublishersHeadlessSDK shared] addEventListener:self];
}

- (void)initializeRudderSDK {
    RSConfigBuilder *builder = [[RSConfigBuilder alloc] init];
    [builder withLoglevel:RSLogLevelDebug];
    [builder withDataPlaneUrl:DATA_PLANE_URL];
    [builder withConsentFilter:[[RudderOneTrustConsentFilter alloc] init]];

    [RSClient getInstance:rudderConfig.WRITE_KEY config:builder.build];
}

- (void)onPreferenceCenterConfirmChoices {
    [self initializeRudderSDK];
}
Make sure you load the SDK only if the user provides their consent.
  1. Create a CustomConsentIFilter.h file by extending RSConsentFilter:
objectivec
#import <Foundation/Foundation.h>
#import <Rudder/Rudder.h>
NS_ASSUME_NONNULL_BEGIN
@interface CustomConsentFilter : NSObject<RSConsentFilter>
@end
NS_ASSUME_NONNULL_END
  1. Create a CustomConsentFilter.m file.
objectivec
#import "CustomConsentFilter.h"

@implementation CustomConsentFilter

- (NSDictionary <NSString *, NSNumber *> * __nullable)filterConsentedDestinations:(NSArray <RSServerDestination *> *)destinations {
    NSDictionary <NSString *, NSNumber *> *filteredConsentedDestinations;
    // Do someting
    return filteredConsentedDestinations;
}

@end

You can register CustomConsentFilter with the iOS (Obj-C) SDK during its initialization, as shown:

objectivec
RSConfigBuilder *builder = [[RSConfigBuilder alloc] init];
[builder withLoglevel:RSLogLevelDebug];
[builder withDataPlaneUrl:DATA_PLANE_URL];
[builder withConsentInterceptor:[[CustomConsentFilter alloc] init]];
[RSClient getInstance:WRITE_KEY config:builder.build];

Additional settings for cloud mode

RudderStack supports OneTrust integration in cloud mode from iOS (Obj-C) SDK v1.12.0 and above, and RudderOneTrustConsentFilter 1.1.0.

You can specify your OneTrust cookie categories when sending events from your iOS (Obj-C) source in the cloud mode.

  1. Set up your iOS (Obj-C) source in the RudderStack dashboard.
  2. Connect it to a destination.
  3. In the destination settings, enter the OneTrust category IDs in the Enter consent category IDs field. You can specify multiple consent category IDs by pressing the Enter key after each ID.
You can find the category IDs in your OneTrust dashboard under Preference & Consent Management > Cookie Compliance > Categorizations > Categories.
OneTrust category ID in consent settings

Note that the settings for specifying multiple consent IDs vary slightly for some destinations. Click Add more after specifying each consent category ID.


Questions? Let's figure it out together.

Join the RudderStack Slack community to connect with other users, customers, and the RudderStack team — or reach out for direct support.