{"__v":11,"_id":"5672d7fe3cab740d00d15a48","category":{"__v":18,"_id":"562014108a05d7230006ffad","pages":["562014118a05d7230006ffb6","562014118a05d7230006ffb7","562014118a05d7230006ffb8","562014118a05d7230006ffb9","562014118a05d7230006ffba","562014118a05d7230006ffbb","562014118a05d7230006ffbc","562014118a05d7230006ffbd","562014118a05d7230006ffbe","562014118a05d7230006ffbf","562014118a05d7230006ffc0","5620146f8a05d72300070013","565ed96ff76b8d0d0055422b","565f1bb623fd5f0d00a12a51","565f2996413e06170093de98","565f29db0dc99e1900f24ba8","565f2b23649b951900c89724","565f2b5d413e06170093de9e","5666d8b46819320d000c2e10","5666dd1866debc1700503e38","5666e3da5d00370d00ede577","5666ef36f672550d000851aa","5666f1116819320d000c2e3e","5666f7bf6819320d000c2e53","5672d7fe3cab740d00d15a48","56e961cef3c3031900041af4","56ebc03943304e2900e2116f","56f116a0ab5e790e00fb3950"],"project":"54861bb654b3ce0b00367292","version":"5620140f8a05d7230006ffac","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2014-12-08T21:55:25.679Z","from_sync":false,"order":0,"slug":"1-setup","title":"Onboarding/Moment integration"},"parentDoc":null,"project":"54861bb654b3ce0b00367292","user":"548d74b716fc980b00e2a786","version":{"__v":3,"_id":"5620140f8a05d7230006ffac","project":"54861bb654b3ce0b00367292","createdAt":"2015-10-15T21:01:03.908Z","releaseDate":"2015-10-15T21:01:03.908Z","categories":["562014108a05d7230006ffad","562014108a05d7230006ffae","562014108a05d7230006ffaf","562014108a05d7230006ffb0","562014108a05d7230006ffb1","562014108a05d7230006ffb2","562014108a05d7230006ffb3","562014108a05d7230006ffb4","562014108a05d7230006ffb5","5666f7f5d784a70d00397bff","56967935b6d61f0d00acfb0b"],"is_deprecated":true,"is_hidden":false,"is_beta":false,"is_stable":false,"codename":"Moments","version_clean":"2.0.0","version":"2.0"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-12-17T15:42:54.326Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":24,"body":"[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//\\n//  AppDelegate.m\\n//\\n//  Created by Tomer Shkolnik.\\n//  Copyright © 2015 elasticode. All rights reserved.\\n//\\n\\n#import \\\"AppDelegate.h\\\"\\n#import <ElastiCode/ElastiCode.h>\\n:::at:::interface AppDelegate ()\\n@end\\n\\n@implementation AppDelegate\\n\\n- (BOOL)application:(UIApplication *)application \\n  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\\n#ifdef DEBUG\\n    [ElastiCode devModeWithLogging:elastiCodeLogLevelErrors];\\n#endif\\n    // Set ThirdParty Analytics - Mixpanel\\n    [ElastiCode setThirdPartyAnalytics:@\\\"Mixpanel\\\"\\n                                action:^(NSString * _Nonnull eventName) {\\n                                    Mixpanel *mixpanel = [Mixpanel sharedInstance];\\n                                    [mixpanel track:eventName properties:@{}];\\n    }];\\n    \\n    // Define moments:\\n    [ElastiCode defineMoment:@\\\"New feature tour\\\"];\\n    \\n    // Add actions for buttons\\n    [ElastiCode addActions:@[\\n      [ECOnBoardingAction createWithName:@\\\"Ask for premission\\\"\\n       \\taction:^{\\n          // premission logic\\n       }]\\n    ]];\\n\\n    // Register to notifications\\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionStartedNotification:) name:ELASTICODE_SESSION_STARTED object:nil];\\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionRestartedNotification:) name:ELASTICODE_SESSION_RESTARTED object:nil];\\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_elasticodeMomentDefined:) name:ELASTICODE_MOMENT_DEFINED object:nil];\\n    \\n    [ElastiCode startSession:@\\\"your-api-key\\\" onBoardingVersion:@\\\"1.0\\\"];\\n    return YES;\\n}\\n- (void)applicationWillResignActive:(UIApplication *)application {}\\n- (void)applicationDidEnterBackground:(UIApplication *)application {}\\n- (void)applicationWillEnterForeground:(UIApplication *)application {}\\n- (void)applicationDidBecomeActive:(UIApplication *)application {}\\n- (void)applicationWillTerminate:(UIApplication *)application {}\\n\\n-(void) _elasticodeMomentDefined:(NSNotification*) note\\n{\\n    NSDictionary* response = [note userInfo];\\n    if(response){\\n        NSString* momentN = [response objectForKey:@\\\"momentName\\\"];\\n        NSNumber* momentS = [response objectForKey:@\\\"dontShow\\\"];\\n        if(![momentS boolValue] && [momentN isEqualToString:@\\\"New feature tour\\\"]){\\n          // Will show the moment as soon as possible\\n\\t\\t    \\t[ElastiCode showMoment:momentN];\\n        }\\n        NSLog(@\\\"Moment defined:%@\\\", momentN);\\n    }\\n}\\n\\n-(void) _sessionStartedNotification:(NSNotification*) note { }\\n-(void) _sessionRestartedNotification:(NSNotification*) note { }\\n\\n@end\\n  \",\n      \"language\": \"objectivec\"\n    },\n    {\n      \"code\": \"//\\n//  AppDelegate.swift\\n//\\n//  Created by Tomer Shkolnik.\\n//  Copyright © 2015 elasticode. All rights reserved.\\n//\\n\\nimport UIKit\\n\\n@UIApplicationMain\\nclass AppDelegate: UIResponder, UIApplicationDelegate {\\n\\n    var window: UIWindow?\\n    \\n    func application(application: UIApplication, didFinishLaunchingWithOptions\\n        launchOptions: [NSObject: AnyObject]?) -> Bool {\\n        #if DEBUG\\n            ElastiCode .devModeWithLogging(elastiCodeLogLevelErrors)\\n        #endif\\n        // Set ThirdParty Analytics - Mixpanel\\n        ElastiCode .setThirdPartyAnalytics(\\\"Mixpanel\\\") { (eventName) -> Void in\\n                mixpanel.track(eventName,properties: [])\\n        }\\n        \\n        // Define moments:\\n        ElastiCode .defineMoment(\\\"New feature tour\\\")\\n        \\n        // Add actions for buttons\\n        ElastiCode .addActions([\\n        \\tECOnBoardingAction .createWithName(\\\"Ask for premission\\\",\\n          \\taction: { () -> Void in\\n            \\t// premission logic\\n              })\\n              ]\\n        )\\n        NSNotificationCenter.defaultCenter()\\n        \\t.addObserver(self, selector: \\\"_sessionStartedNotification:\\\", \\n          \\tname: ELASTICODE_SESSION_STARTED, object: nil\\n          )\\n        NSNotificationCenter.defaultCenter()\\n        \\t.addObserver(self, selector: \\\"_sessionRestartedNotification:\\\", \\n          \\tname: ELASTICODE_SESSION_RESTARTED, object: nil\\n        )\\n        NSNotificationCenter.defaultCenter()\\n        \\t.addObserver(self, selector: \\\"_elasticodeMomentDefined:\\\", \\n          \\tname: ELASTICODE_MOMENT_DEFINED, object: nil\\n          )\\n        ElastiCode .startSession(\\\"your-api-key\\\", onBoardingVersion: \\\"1.0\\\")\\n            \\n        return true\\n    }\\n    func applicationWillResignActive(application: UIApplication) {}\\n    func applicationDidEnterBackground(application: UIApplication) {}\\n    func applicationWillEnterForeground(application: UIApplication) {}\\n    func applicationDidBecomeActive(application: UIApplication) {}\\n    func applicationWillTerminate(application: UIApplication) {}\\n    \\n    func _elasticodeMomentDefined(notif: NSNotification){\\n        if let userInfo:Dictionary<String,AnyObject> = \\n        \\tnotif.userInfo as? Dictionary<String,AnyObject>{\\n            let momentN = userInfo[\\\"momentName\\\"] as! String;\\n            let momentS = userInfo[\\\"dontShow\\\"] as! NSNumber;\\n            if(!momentS .boolValue && momentN == \\\"New feature tour\\\"){\\n                // Will show the moment as soon as possible\\n                ElastiCode .showMoment(momentN)\\n            }\\n        }\\n    }\\n    func _sessionStartedNotification(notif: NSNotification) {}\\n    func _sessionRestartedNotification(notif: NSNotification) {}\\n}\\n\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]","excerpt":"","slug":"appdelegate-example-advanced","type":"basic","title":"AppDelegate Example (Advanced)"}

AppDelegate Example (Advanced)


[block:code] { "codes": [ { "code": "//\n// AppDelegate.m\n//\n// Created by Tomer Shkolnik.\n// Copyright © 2015 elasticode. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import <ElastiCode/ElastiCode.h>\n@interface AppDelegate ()\n@end\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application \n didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n#ifdef DEBUG\n [ElastiCode devModeWithLogging:elastiCodeLogLevelErrors];\n#endif\n // Set ThirdParty Analytics - Mixpanel\n [ElastiCode setThirdPartyAnalytics:@\"Mixpanel\"\n action:^(NSString * _Nonnull eventName) {\n Mixpanel *mixpanel = [Mixpanel sharedInstance];\n [mixpanel track:eventName properties:@{}];\n }];\n \n // Define moments:\n [ElastiCode defineMoment:@\"New feature tour\"];\n \n // Add actions for buttons\n [ElastiCode addActions:@[\n [ECOnBoardingAction createWithName:@\"Ask for premission\"\n \taction:^{\n // premission logic\n }]\n ]];\n\n // Register to notifications\n [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionStartedNotification:) name:ELASTICODE_SESSION_STARTED object:nil];\n [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_sessionRestartedNotification:) name:ELASTICODE_SESSION_RESTARTED object:nil];\n [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_elasticodeMomentDefined:) name:ELASTICODE_MOMENT_DEFINED object:nil];\n \n [ElastiCode startSession:@\"your-api-key\" onBoardingVersion:@\"1.0\"];\n return YES;\n}\n- (void)applicationWillResignActive:(UIApplication *)application {}\n- (void)applicationDidEnterBackground:(UIApplication *)application {}\n- (void)applicationWillEnterForeground:(UIApplication *)application {}\n- (void)applicationDidBecomeActive:(UIApplication *)application {}\n- (void)applicationWillTerminate:(UIApplication *)application {}\n\n-(void) _elasticodeMomentDefined:(NSNotification*) note\n{\n NSDictionary* response = [note userInfo];\n if(response){\n NSString* momentN = [response objectForKey:@\"momentName\"];\n NSNumber* momentS = [response objectForKey:@\"dontShow\"];\n if(![momentS boolValue] && [momentN isEqualToString:@\"New feature tour\"]){\n // Will show the moment as soon as possible\n\t\t \t[ElastiCode showMoment:momentN];\n }\n NSLog(@\"Moment defined:%@\", momentN);\n }\n}\n\n-(void) _sessionStartedNotification:(NSNotification*) note { }\n-(void) _sessionRestartedNotification:(NSNotification*) note { }\n\n@end\n ", "language": "objectivec" }, { "code": "//\n// AppDelegate.swift\n//\n// Created by Tomer Shkolnik.\n// Copyright © 2015 elasticode. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n var window: UIWindow?\n \n func application(application: UIApplication, didFinishLaunchingWithOptions\n launchOptions: [NSObject: AnyObject]?) -> Bool {\n #if DEBUG\n ElastiCode .devModeWithLogging(elastiCodeLogLevelErrors)\n #endif\n // Set ThirdParty Analytics - Mixpanel\n ElastiCode .setThirdPartyAnalytics(\"Mixpanel\") { (eventName) -> Void in\n mixpanel.track(eventName,properties: [])\n }\n \n // Define moments:\n ElastiCode .defineMoment(\"New feature tour\")\n \n // Add actions for buttons\n ElastiCode .addActions([\n \tECOnBoardingAction .createWithName(\"Ask for premission\",\n \taction: { () -> Void in\n \t// premission logic\n })\n ]\n )\n NSNotificationCenter.defaultCenter()\n \t.addObserver(self, selector: \"_sessionStartedNotification:\", \n \tname: ELASTICODE_SESSION_STARTED, object: nil\n )\n NSNotificationCenter.defaultCenter()\n \t.addObserver(self, selector: \"_sessionRestartedNotification:\", \n \tname: ELASTICODE_SESSION_RESTARTED, object: nil\n )\n NSNotificationCenter.defaultCenter()\n \t.addObserver(self, selector: \"_elasticodeMomentDefined:\", \n \tname: ELASTICODE_MOMENT_DEFINED, object: nil\n )\n ElastiCode .startSession(\"your-api-key\", onBoardingVersion: \"1.0\")\n \n return true\n }\n func applicationWillResignActive(application: UIApplication) {}\n func applicationDidEnterBackground(application: UIApplication) {}\n func applicationWillEnterForeground(application: UIApplication) {}\n func applicationDidBecomeActive(application: UIApplication) {}\n func applicationWillTerminate(application: UIApplication) {}\n \n func _elasticodeMomentDefined(notif: NSNotification){\n if let userInfo:Dictionary<String,AnyObject> = \n \tnotif.userInfo as? Dictionary<String,AnyObject>{\n let momentN = userInfo[\"momentName\"] as! String;\n let momentS = userInfo[\"dontShow\"] as! NSNumber;\n if(!momentS .boolValue && momentN == \"New feature tour\"){\n // Will show the moment as soon as possible\n ElastiCode .showMoment(momentN)\n }\n }\n }\n func _sessionStartedNotification(notif: NSNotification) {}\n func _sessionRestartedNotification(notif: NSNotification) {}\n}\n", "language": "swift" } ] } [/block]