- aggiornamento libreria per supportare diversi client id e client secret

This commit is contained in:
giuseppenuc committed 2018-03-26 10:48:49 +02:00
1 parent 1f625585b9
commit 6c8cf96e65
87 files changed
+2459 -1776

No files matched your search

@@ -220,13 +220,14 @@ static NSString *g_overrideAppID = nil;
@property (nonatomic, copy) NSString *pushNotificationsDeviceTokenString;
@property (nonatomic, strong) dispatch_source_t flushTimer;
@property (nonatomic, strong) dispatch_source_t attributionIDRecheckTimer;
@end
@implementation FBSDKAppEvents
{
BOOL _explicitEventsLoggedYet;
NSTimer *_flushTimer;
NSTimer *_attributionIDRecheckTimer;
FBSDKServerConfiguration *_serverConfiguration;
FBSDKAppEventsState *_appEventsState;
NSString *_userID;
@@ -246,18 +247,18 @@ static NSString *g_overrideAppID = nil;
self = [super init];
if (self) {
_flushBehavior = FBSDKAppEventsFlushBehaviorAuto;
_flushTimer = [NSTimer timerWithTimeInterval:FLUSH_PERIOD_IN_SECONDS
target:self
selector:@selector(flushTimerFired:)
userInfo:nil
repeats:YES];
_attributionIDRecheckTimer = [NSTimer timerWithTimeInterval:APP_SUPPORTS_ATTRIBUTION_ID_RECHECK_PERIOD
target:self
selector:@selector(appSettingsFetchStateResetTimerFired:)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_flushTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop mainRunLoop] addTimer:_attributionIDRecheckTimer forMode:NSDefaultRunLoopMode];
typeof(self) __weak weakSelf = self;
self.flushTimer = [FBSDKUtility startGCDTimerWithInterval:FLUSH_PERIOD_IN_SECONDS
block:^{
[weakSelf flushTimerFired:nil];
}];
self.attributionIDRecheckTimer = [FBSDKUtility startGCDTimerWithInterval:APP_SUPPORTS_ATTRIBUTION_ID_RECHECK_PERIOD
block:^{
[weakSelf appSettingsFetchStateResetTimerFired:nil];
}];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(applicationMovingFromActiveStateOrTerminating)
@@ -286,10 +287,8 @@ static NSString *g_overrideAppID = nil;
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
// technically these timers retain self so there's a cycle but
// we're a singleton anyway.
[_flushTimer invalidate];
[_attributionIDRecheckTimer invalidate];
[FBSDKUtility stopGCDTimer:self.flushTimer];
[FBSDKUtility stopGCDTimer:self.attributionIDRecheckTimer];
}
#pragma mark - Public Methods
@@ -790,8 +789,7 @@ static NSString *g_overrideAppID = nil;
[self fetchServerConfiguration:^(void) {
NSString *receipt_data = [appEventsState extractReceiptData];
NSString *JSONString = [appEventsState JSONStringForEvents:_serverConfiguration.implicitLoggingEnabled];
NSData *encodedEvents = [JSONString dataUsingEncoding:NSUTF8StringEncoding];
NSString *encodedEvents = [appEventsState JSONStringForEvents:_serverConfiguration.implicitLoggingEnabled];
if (!encodedEvents) {
[FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents
logEntry:@"FBSDKAppEvents: Flushing skipped - no events after removing implicitly logged ones.\n"];
@@ -806,7 +804,7 @@ static NSString *g_overrideAppID = nil;
postParameters[@"receipt_data"] = receipt_data;
}
postParameters[@"custom_events_file"] = encodedEvents;
postParameters[@"custom_events"] = encodedEvents;
if (appEventsState.numSkipped > 0) {
postParameters[@"num_skipped_events"] = [NSString stringWithFormat:@"%lu", (unsigned long)appEventsState.numSkipped];
}
@@ -55,9 +55,7 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
FBSDKBridgeAPIRequest *_pendingRequest;
FBSDKBridgeAPICallbackBlock _pendingRequestCompletionBlock;
id<FBSDKURLOpening> _pendingURLOpen;
#ifdef __IPHONE_11_0
SFAuthenticationSession *_authenticationSession NS_AVAILABLE_IOS(11_0);
#endif
#endif
BOOL _expectingBackground;
UIViewController *_safariViewController;
@@ -172,12 +170,12 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
completion:completePendingOpenURLBlock];
_safariViewController = nil;
} else {
#ifdef __IPHONE_11_0
if (_authenticationSession != nil) {
[_authenticationSession cancel];
_authenticationSession = nil;
if (@available(iOS 11.0, *)) {
if (_authenticationSession != nil) {
[_authenticationSession cancel];
_authenticationSession = nil;
}
}
#endif
completePendingOpenURLBlock();
}
if ([pendingURLOpen canOpenURL:url
@@ -243,9 +241,9 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
// might have been a "didBecomeActive" event pending that we want to ignore.
BOOL notExpectingBackground = !_expectingBackground && !_safariViewController && !_isDismissingSafariViewController;
#if !TARGET_OS_TV
#ifdef __IPHONE_11_0
notExpectingBackground = notExpectingBackground && !_authenticationSession;
#endif
if (@available(iOS 11.0, *)) {
notExpectingBackground = notExpectingBackground && !_authenticationSession;
}
#endif
if (notExpectingBackground) {
_active = YES;
@@ -347,22 +345,22 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
_expectingBackground = NO;
_pendingURLOpen = sender;
#ifdef __IPHONE_11_0
if ([sender isAuthenticationURL:url]) {
Class SFAuthenticationSessionClass = fbsdkdfl_SFAuthenticationSessionClass();
if (SFAuthenticationSessionClass != nil) {
_authenticationSession = [[SFAuthenticationSessionClass alloc] initWithURL:url callbackURLScheme:[FBSDKInternalUtility appURLScheme] completionHandler:^ (NSURL *aURL, NSError *error) {
handler(error == nil, error);
if (error == nil) {
[self application:[UIApplication sharedApplication] openURL:aURL sourceApplication:@"com.apple" annotation:nil];
}
_authenticationSession = nil;
}];
[_authenticationSession start];
return;
if (@available(iOS 11.0, *)) {
if ([sender isAuthenticationURL:url]) {
Class SFAuthenticationSessionClass = fbsdkdfl_SFAuthenticationSessionClass();
if (SFAuthenticationSessionClass != nil) {
_authenticationSession = [[SFAuthenticationSessionClass alloc] initWithURL:url callbackURLScheme:[FBSDKInternalUtility appURLScheme] completionHandler:^ (NSURL *aURL, NSError *error) {
handler(error == nil, error);
if (error == nil) {
[self application:[UIApplication sharedApplication] openURL:aURL sourceApplication:@"com.apple" annotation:nil];
}
_authenticationSession = nil;
}];
[_authenticationSession start];
return;
}
}
}
#endif
// trying to dynamically load SFSafariViewController class
// so for the cases when it is available we can send users through Safari View Controller flow
@@ -44,5 +44,5 @@
#import <FBSDKCoreKit/FBSDKDeviceViewControllerBase.h>
#endif
#define FBSDK_VERSION_STRING @"4.29.0"
#define FBSDK_VERSION_STRING @"4.31.1"
#define FBSDK_TARGET_PLATFORM_VERSION @"v2.11"
@@ -30,6 +30,7 @@
// constants
static NSString *const kGetHTTPMethod = @"GET";
static NSString *const kPostHTTPMethod = @"POST";
@interface FBSDKGraphRequest()
@property (nonatomic, assign) FBSDKGraphRequestFlags flags;
@@ -144,12 +145,23 @@ static NSString *const kGetHTTPMethod = @"GET";
+ (NSString *)serializeURL:(NSString *)baseUrl
params:(NSDictionary *)params
httpMethod:(NSString *)httpMethod {
return [self serializeURL:baseUrl params:params httpMethod:httpMethod forBatch:NO];
}
+ (NSString *)serializeURL:(NSString *)baseUrl
params:(NSDictionary *)params
httpMethod:(NSString *)httpMethod
forBatch:(BOOL)forBatch {
params = [self preprocessParams: params];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSURL *parsedURL = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
#pragma clang pop
if ([httpMethod isEqualToString:kPostHTTPMethod] && !forBatch) {
return baseUrl;
}
NSString *queryPrefix = parsedURL.query ? @"&" : @"?";
NSString *query = [FBSDKInternalUtility queryStringWithDictionary:params error:NULL invalidObjectHandler:^id(id object, BOOL *stop) {
@@ -443,7 +443,7 @@ NSURLSessionDataDelegate
NSUInteger bodyLength = [[body data] length] / 1024;
[request setValue:[FBSDKGraphRequestConnection userAgent] forHTTPHeaderField:@"User-Agent"];
[request setValue:[FBSDKGraphRequestBody mimeContentType] forHTTPHeaderField:@"Content-Type"];
[request setValue:[body mimeContentType] forHTTPHeaderField:@"Content-Type"];
[request setHTTPShouldHandleCookies:NO];
[self logRequest:request bodyLength:bodyLength bodyLogger:bodyLogger attachmentLogger:attachmentLogger];
@@ -495,7 +495,8 @@ NSURLSessionDataDelegate
NSString *url = [FBSDKGraphRequest serializeURL:baseURL
params:request.parameters
httpMethod:request.HTTPMethod];
httpMethod:request.HTTPMethod
forBatch:forBatch];
return url;
}
@@ -52,4 +52,18 @@
*/
+ (NSString *)URLEncode:(NSString *)value;
/**
Creates a timer using Grand Central Dispatch.
- Parameter interval: The interval to fire the timer, in seconds.
- Parameter block: The code block to execute when timer is fired.
- Returns: The dispatch handle.
*/
+ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block;
/**
Stop a timer that was started by startGCDTimerWithInterval.
- Parameter timer: The dispatch handle received from startGCDTimerWithInterval.
*/
+ (void)stopGCDTimer:(dispatch_source_t)timer;
@end
@@ -81,6 +81,32 @@
}
#pragma clang diagnostic pop
+ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block
{
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, // source type
0, // handle
0, // mask
dispatch_get_main_queue()); // queue
dispatch_source_set_timer(timer, // dispatch source
dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC), // start
interval * NSEC_PER_SEC, // interval
0 * NSEC_PER_SEC); // leeway
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
return timer;
}
+ (void)stopGCDTimer:(dispatch_source_t)timer
{
if (timer) {
dispatch_source_cancel(timer);
}
}
- (instancetype)init
{
FBSDK_NO_DESIGNATED_INITIALIZER();
@@ -714,11 +714,7 @@ static NSMapTable *_transientObjects;
if (![self isRegisteredCanOpenURLScheme:urlScheme]){
NSString *reason = [NSString stringWithFormat:@"%@ is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0", urlScheme];
#ifdef __IPHONE_9_0
@throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil];
#else
[FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:reason];
#endif
}
}
@@ -51,6 +51,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKGraphRequestFlags)
+ (BOOL)isAttachment:(id)item;
+ (NSString *)serializeURL:(NSString *)baseUrl
params:(NSDictionary *)params
httpMethod:(NSString *)httpMethod;
httpMethod:(NSString *)httpMethod
forBatch:(BOOL)forBatch;
@end
@@ -42,6 +42,6 @@
dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)dataAttachment
logger:(FBSDKLogger *)logger;
+ (NSString *)mimeContentType;
- (NSString *)mimeContentType;
@end
@@ -28,20 +28,26 @@
@implementation FBSDKGraphRequestBody
{
NSMutableData *_data;
NSMutableDictionary *_json;
}
- (instancetype)init
{
if ((self = [super init])) {
_data = [[NSMutableData alloc] init];
_json = [NSMutableDictionary dictionary];
}
return self;
}
+ (NSString *)mimeContentType
- (NSString *)mimeContentType
{
return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", kStringBoundary];
if (_json) {
return @"application/json";
} else {
return [NSString stringWithFormat:@"multipart/form-data; boundary=%@",kStringBoundary];
}
}
- (void)appendUTF8:(NSString *)utf8
@@ -62,6 +68,9 @@
[self _appendWithKey:key filename:nil contentType:nil contentBlock:^{
[self appendUTF8:value];
}];
if (key && value) {
[_json setObject:value forKey:key];
}
[logger appendFormat:@"\n %@:\t%@", key, (NSString *)value];
}
@@ -73,6 +82,7 @@
[self _appendWithKey:key filename:key contentType:@"image/jpeg" contentBlock:^{
[_data appendData:data];
}];
_json = nil;
[logger appendFormat:@"\n %@:\t<Image - %lu kB>", key, (unsigned long)([data length] / 1024)];
}
@@ -83,6 +93,7 @@
[self _appendWithKey:key filename:key contentType:@"content/unknown" contentBlock:^{
[_data appendData:data];
}];
_json = nil;
[logger appendFormat:@"\n %@:\t<Data - %lu kB>", key, (unsigned long)([data length] / 1024)];
}
@@ -96,11 +107,22 @@
[self _appendWithKey:key filename:filename contentType:contentType contentBlock:^{
[_data appendData:data];
}];
_json = nil;
[logger appendFormat:@"\n %@:\t<Data - %lu kB>", key, (unsigned long)([data length] / 1024)];
}
- (NSData *)data
{
if (_json) {
NSData *jsonData;
if (_json.allKeys.count > 0) {
jsonData = [NSJSONSerialization dataWithJSONObject:_json options:0 error:nil];
} else {
jsonData = [NSData data];
}
return jsonData;
}
return [_data copy];
}
@@ -53,6 +53,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationSmartLoginOptions)
advertisingIDEnabled:(BOOL)advertisingIDEnabled
implicitLoggingEnabled:(BOOL)implicitLoggingEnabled
implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
appIndexingTriggerEnabled:(BOOL)appIndexingTriggerEnabled
systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled
nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled
dialogConfigurations:(NSDictionary *)dialogConfigurations
@@ -75,6 +76,7 @@ NS_DESIGNATED_INITIALIZER;
@property (nonatomic, strong, readonly) FBSDKErrorConfiguration *errorConfiguration;
@property (nonatomic, assign, readonly, getter=isImplicitLoggingSupported) BOOL implicitLoggingEnabled;
@property (nonatomic, assign, readonly, getter=isImplicitPurchaseLoggingSupported) BOOL implicitPurchaseLoggingEnabled;
@property (nonatomic, assign, readonly, getter=isAppIndexingTriggerEnabled) BOOL appIndexingTriggerEnabled;
@property (nonatomic, assign, readonly, getter=isLoginTooltipEnabled) BOOL loginTooltipEnabled;
@property (nonatomic, assign, readonly, getter=isNativeAuthFlowEnabled) BOOL nativeAuthFlowEnabled;
@property (nonatomic, assign, readonly, getter=isSystemAuthenticationEnabled) BOOL systemAuthenticationEnabled;
@@ -31,6 +31,7 @@
#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY @"implicitLoggingEnabled"
#define FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY @"defaultShareMode"
#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY @"implicitPurchaseLoggingEnabled"
#define FBSDK_SERVER_CONFIGURATION_APP_INDEXING_TRIGGER_ENABLED_KEY @"appIndexingTriggerEnabled"
#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY @"loginTooltipEnabled"
#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY @"loginTooltipText"
#define FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY @"systemAuthenticationEnabled"
@@ -87,6 +88,7 @@ const NSInteger FBSDKServerConfigurationVersion = 2;
advertisingIDEnabled:(BOOL)advertisingIDEnabled
implicitLoggingEnabled:(BOOL)implicitLoggingEnabled
implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
appIndexingTriggerEnabled:(BOOL)appIndexingTriggerEnabled
systemAuthenticationEnabled:(BOOL)systemAuthenticationEnabled
nativeAuthFlowEnabled:(BOOL)nativeAuthFlowEnabled
dialogConfigurations:(NSDictionary *)dialogConfigurations
@@ -109,6 +111,7 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
_advertisingIDEnabled = advertisingIDEnabled;
_implicitLoggingEnabled = implicitLoggingEnabled;
_implicitPurchaseLoggingEnabled = implicitPurchaseLoggingEnabled;
_appIndexingTriggerEnabled = appIndexingTriggerEnabled;
_systemAuthenticationEnabled = systemAuthenticationEnabled;
_nativeAuthFlowEnabled = nativeAuthFlowEnabled;
_dialogConfigurations = [dialogConfigurations copy];
@@ -177,6 +180,8 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
BOOL implicitLoggingEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY];
BOOL implicitPurchaseLoggingEnabled =
[decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY];
BOOL appIndexingTriggerEnabled =
[decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_APP_INDEXING_TRIGGER_ENABLED_KEY];
BOOL systemAuthenticationEnabled =
[decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_SYSTEM_AUTHENTICATION_ENABLED_KEY];
FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY];
@@ -209,6 +214,7 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
advertisingIDEnabled:advertisingIDEnabled
implicitLoggingEnabled:implicitLoggingEnabled
implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled
appIndexingTriggerEnabled:appIndexingTriggerEnabled
systemAuthenticationEnabled:systemAuthenticationEnabled
nativeAuthFlowEnabled:nativeAuthFlowEnabled
dialogConfigurations:dialogConfigurations
@@ -238,6 +244,8 @@ implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled
[encoder encodeBool:_implicitLoggingEnabled forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY];
[encoder encodeBool:_implicitPurchaseLoggingEnabled
forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY];
[encoder encodeBool:_appIndexingTriggerEnabled
forKey:FBSDK_SERVER_CONFIGURATION_APP_INDEXING_TRIGGER_ENABLED_KEY];
[encoder encodeBool:_loginTooltipEnabled forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY];
[encoder encodeObject:_loginTooltipText forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY];
[encoder encodeBool:_nativeAuthFlowEnabled forKey:FBSDK_SERVER_CONFIGURATION_NATIVE_AUTH_FLOW_ENABLED_KEY];
@@ -65,6 +65,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures)
FBSDKServerConfigurationManagerAppEventsFeaturesNone = 0,
FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled = 1 << 0,
FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled = 1 << 1,
FBSDKServerConfigurationManagerAppEventsFeaturesAppIndexingTriggerEnabled = 1 << 6,
};
#pragma mark - Public Class Methods
@@ -172,7 +173,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures)
NSUInteger appEventsFeatures = [FBSDKTypeUtility unsignedIntegerValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD]];
BOOL advertisingIDEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled);
BOOL implicitPurchaseLoggingEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled);
BOOL appIndexingTriggerEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesAppIndexingTriggerEnabled);
NSString *appName = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD]];
BOOL loginTooltipEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD]];
NSString *loginTooltipText = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD]];
@@ -198,6 +199,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures)
advertisingIDEnabled:advertisingIDEnabled
implicitLoggingEnabled:implicitLoggingEnabled
implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled
appIndexingTriggerEnabled:appIndexingTriggerEnabled
systemAuthenticationEnabled:systemAuthenticationEnabled
nativeAuthFlowEnabled:nativeAuthFlowEnabled
dialogConfigurations:dialogConfigurations
@@ -298,6 +300,7 @@ typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures)
advertisingIDEnabled:NO
implicitLoggingEnabled:NO
implicitPurchaseLoggingEnabled:NO
appIndexingTriggerEnabled:NO
systemAuthenticationEnabled:NO
nativeAuthFlowEnabled:NO
dialogConfigurations:nil