New Relic uses Apple's vendor ID to track specific devices for accurate counts of users. One of the special features of the vendor ID is it is unique across a suite of apps using the same bundle ID base. For example, the vendor ID is the same across apps that use the same bundle ID: com.company-name.*
.
This article describes how to obscure this cross-app identifier using a hidden API (available in iOS agent version 6.11.0):
+[NewRelic saltDeviceUUID:(BOOL)enabled]
Enable device uuid salt
To access the hidden method +[NewRelic saltDeviceUUID:(BOOL)enabled]
, add a category to the NewRelic
object:
@interface NewRelic (salt) + (void) saltDeviceUUID:(BOOL)enabled;@end
This can be added in your AppDelegate.h
after #include <NewRelic/NewRelic.h>
and before the @implementation AppDelgate
:
//
// AppDelegate.m
//
// Created on 9/11/12.
// © 2012 New Relic, Inc. All rights reserved.
//
#import "AppDelegate.h"
#import <NewRelic/NewRelic.h>
@interface NewRelic (salt)
+ (void) saltDeviceUUID:(BOOL)enabled;
@end
@implementation AppDelegate
// code
@end
Call the API
Next, call [NewRelic saltDeviceUUID:YES];
before your [NewRelic startWithApplicationToken:]
//
// AppDelegate.m
//
// Created on 9/11/12.
// © 2012 New Relic Inc. All rights reserved.
//
#import "AppDelegate.h"
#import <NewRelic/NewRelic.h>
@interface NewRelic (salt)
+ (void) saltDeviceUUID:(BOOL)enabled;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[NewRelic saltDeviceUUID:YES];
[NewRelic startWithApplicationToken:@"MY_TOKEN"];
...
}
...
@end
You device IDs are now be obfuscated in all events and data sent to New Relic.