iOS - lonslonz/rakedocument GitHub Wiki

Download

[download ํŽ˜์ด์ง€](Rake manual#wiki-download)

์„ค์น˜

  • ๋‹ค์šด๋ฐ›์€ ์••์ถ• ํŒŒ์ผ์„ ํ‘ผ๋‹ค.
  • Mixpanel ํด๋”๋ฅผ ํ”„๋กœ์ ํŠธ์— drag & drop ํ•œ๋‹ค. ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด "Copy items into destination Group's folder"๋ฅผ ์ฒดํฌํ•ด์„œ ๋ณต์‚ฌํ•œ๋‹ค.

drop

  • Targets > Build Phases > Link binary with libraries ์—์„œ ์•„๋ž˜ framework๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    • Foundation.framework
    • UIKit.framework
    • SystemConfiguration.framework
    • CoreTelephony.framework
    • AdSupport.framework

ARC

ํ˜„์žฌ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ARC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ARC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์˜ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

  • ๋ฉ”๋‰ด์˜ Project > Target > Build Phases
  • ๊ฐ addํ•œ ํŒŒ์ผ์„ ํด๋ฆญํ•˜์—ฌ ๋‹ค์Œ์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฝ์ž… : -fno-objc-arc.

์ฝ”๋“œ ๋„ฃ๊ธฐ

์ตœ์ดˆ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ

  • application launch๊ฐ€ ๋๋‚œ ์ดํ›„ ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

      #define MIXPANEL_TOKEN @"YOUR TOKEN" // ์„œ๋น„์Šค์— ํ• ๋‹น ๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.
      #define MIXPANLE_USE_DEVSERVER true     // ํ…Œ์ŠคํŠธ์šฉ ๊ฐœ๋ฐœ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  true๋กœ ์„ธํŒ…ํ•œ๋‹ค. ๋ฐฐํฌ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ false๋กœ ์„ธํŒ…ํ•œ๋‹ค.
    
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
          self.window = [ [ [UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]] autorelease];
          self.mixpanel = [Mixpanel sharedInstanceWithToken:MIXPANEL_TOKEN andUseDevServer:MIXPANLE_USE_DEVSERVER];   // initialize
       
       
          self.viewController = [ [ [ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
          self.window.rootViewController = self.viewController;
          [self.window makeKeyAndVisible];
          
          
          [ [UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
          
          return YES;
      }
    
  • define ๊ตฌ๋ฌธ์—์„œ token๊ณผ MIXPANLE_USE_DEVSERVER ๋ฅผ ์…‹ํŒ…ํ•ด์•ผ ํ•œ๋‹ค.

  • ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  MIXPANLE_USE_DEVSERVERf๋ฅผ true๋กœ ์„ธํŒ…ํ•œ๋‹ค. ์‹ค ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ false๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

ํŽ˜์ด์ง€ ์ „ํ™˜์ด๋‚˜ button ํด๋ฆญ ์‹œ์— ๋กœ๊ทธ๋ฅผ ์Œ“๊ธฐ

  • ๋กœ๊ทธ๋ฅผ ์Œ“๋Š” ๊ฒƒ์€ track()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์ด track()์— ์ธ์ž๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค. ์ธ์ž๋Š” NSDictionary ํƒ€์ž…์ด๋‹ค.

  • track() ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. SKP ๋‚ด์—์„œ ๋กœ๊ทธ ํฌ๋งท์ด ์ •์˜๋˜์–ด ์‚ฌ์šฉ๋  ๋•Œ๋Š” NSDictionary์— ๋ฏธ๋ฆฌ ์ •์˜๋œ key, value๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

      - (IBAction)trackEvent:(id)sender
      {
          Mixpanel *mixpanel = [Mixpanel sharedInstance];
          [mixpanel track:[NSDictionary dictionaryWithObjectsAndKeys:
                                                     @"junghyun", @"userId",
                                                     @"a01jdksa904812df", @"purchaseId",
                                                     @"30000", @"price",
                                                     nil]];
      }
    

์Œ“์ธ ๋กœ๊ทธ๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ธฐ

  • ๋กœ๊ทธ๋ฅผ ์Œ“๋Š” ๊ฒƒ๊ณผ ๋กœ๊ทธ๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. track()์€ ๋กœ๊ทธ๋ฅผ ์•ฑ ๋‚ด๋ถ€(plist file)์— ์Œ“๊ณ , flush()๋Š” ์Œ“์€ ๋กœ๊ทธ๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.

  • ์Œ“์€ ๋กœ๊ทธ๋Š” ์••์ถ•ํ•ด์„œ ์ „์†ก๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋กœ๊ทธ๋ฅผ ํ•œ๋ฒˆ์— ์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. ์ด๋•Œ flush()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

  • ๋””ํดํŠธ๋กœ๋Š” 1๋ถ„์— ํ•œ๋ฒˆ ์Œ“์ธ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•œ๋‹ค. (setFlushInterval() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.)

  • ๋ณดํ†ต์€ activity์˜ onDestroy()์—์„œ flush()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

      - (IBAction)flushPressed:(id)sender {
          statusText.text = [NSString stringWithFormat:@"flush button pressed"];
          Mixpanel *mixpanel = [Mixpanel sharedInstance];
          [mixpanel flush];
      }
    

๋ฐ˜๋ณต๋˜๋Š” ํ•„๋“œ๋ฅผ ํ•œ๋ฒˆ๋งŒ ๋“ฑ๋กํ•˜๊ธฐ

NSString* memberId = @"CURRENT_MEMBER_ID";
NSString* sessionId = @"NEW_SESSION_ID";
[self.mixpanel registerSuperProperties:@{@"memeberId": memberId}];    // memeberId๋ฅผ super properties๋กœ ์„ค์ •
[self.mixpanel registerSuperProperties:@{@"sessionId": sessionId}];  // sessionID๋ฅผ super properties๋กœ ์„ค์ •

Sentinel๊ณผ ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•˜๊ธฐ

  • Sentinel ์ ์šฉ์€ json์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๋Œ€์‹  Pojo ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Sentine ํ™ˆํŽ˜์ด์ง€์—์„œ iOS์šฉ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋ฐ›์•„ ํ”„๋กœ์ ํŠธ์— ๋งํฌํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

      - (IBAction)clickMakeLogWithSentinel:(id)sender {
          RakeSampleSentinelShuttle *shuttle = [[RakeSampleSentinelShuttle alloc] init];
          
          [shuttle page_id:self.getMyPageId];
          [shuttle action_id:@"onclick"];
          [shuttle action_extra_value:@"3"];
          
          [self.rake track:[shuttle toNSDictionary]];
          NSLog(@"%@", [shuttle toJSONString]);
      }
    
  • ๋‹ค๋ฅธ ์ฝ”๋“œ๋Š” ๋™์ผํ•˜๋ฉฐ shuttle ๊ฐ์ฒด์— ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ set ํ•œ ํ›„ rake track ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ NSDictionary ๋กœ ๋ฐ”๊พธ์–ด ํ˜ธ์ถœํ•œ๋‹ค.

์˜ˆ์ œ

API

  • Mixpanel::track:(NSDictionary *) properties

    • properties : ๋ฐ์ดํ„ฐ๋ฅผ json ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•œ๋‹ค. SKP์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ ํฌ๋งท์— ์ •์˜๋œ key์™€ value๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • Mixpanel::registerSuperProperties:(NSDictionary *) properties

    • properties : ๋ฐ์ดํ„ฐ๋ฅผ json ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•œ๋‹ค. super properties ๋กœ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ๋กœ๊ทธ์— ์œ ์ง€๋œ๋‹ค.
  • Mixpanel::registerSuperPropertiesOnce:(NSDictionary *) properties

    • properties : ๋ฐ์ดํ„ฐ๋ฅผ json ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•œ๋‹ค. super properties ๋กœ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ๋กœ๊ทธ์— ์œ ์ง€๋œ๋‹ค. ๊ฐ™์€ ํ‚ค๋กœ ์„ค์ •๋œ ๊ฐ’์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ƒˆ๋กœ ์ž…๋ ฅํ•œ ํ‚ค๋Š” ๋ฌด์‹œ๋˜๊ณ  ์ด์ „ ๊ฐ’์ด ์œ ์ง€๋œ๋‹ค.
  • Mixpanel::unregisterSuperProperties:(NSString *) propertyName

    • propertyName : propertyName์— ํ•ด๋‹นํ•˜๋Š” super property๋ฅผ ์‚ญ์ œ ํ•œ๋‹ค.
  • Mixpanel::flush()

    • ๋กœ๊ทธ๋ฅผ ์„œ๋ฒ„์— ์ „์†ก ํ•œ๋‹ค.
  • Mixpanel::setFlushInterval:(NSUInteger)interval

    • milli-seconds ๋‹จ์œ„๋กœ flush ์ฃผ๊ธฐ๋ฅผ ์„ค์ •ํ•œ๋‹ค.