æ®å¿µãªãããããã¥ã¡ã³ãã«ã¯ããŠãŒã¶ãŒãããã·ã¥éç¥ããµãã¹ã¯ã©ã€ãããã€ãã³ããŸãã¯ã¢ããªã±ãŒã·ã§ã³ãããã¯ã°ã©ãŠã³ãã«åãæ¿ããã€ãã³ãïŒAppDidEnterBackgoundïŒãã€ã³ã¿ãŒã»ããããå¿ èŠãããå Žåã®å¯ŸåŠæ¹æ³ãèšèŒãããŠããŸããããäžéšã®ãã©ã°ã€ã³ã§ã¯ãã®ã€ãã³ããžã®ã¢ã¯ã»ã¹ãå¿ èŠãªå ŽåããããŸãæžãããã
ãŸããããã¥ã¡ã³ãã§ã¯ãCïŒãŸãã¯jsã³ãŒããããã€ãã£ãã«ããŸãã¯ãã®éã«ãã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ãããšèª¬æããŠããŸãã ãã ãããããã®ã«ãŒã«ã¯æ瀺çã«èª¬æãããŠããªãããã詳现ã«èª¬æããããšã¯çã«ããªã£ãŠããŸãã 以äžã«ç€ºããã©ã¡ãŒã¿ãŒãæž¡ãããã®ã«ãŒã«ã¯ãæ¢åã®ãã©ã°ã€ã³Fb Unity SDKããã³GoogleAnalyticsã調ã¹ããšãã«ååŸãããŸããã
ãã€ãã£ãã³ãŒããšCïŒã®éã§åãæž¡ãã§ãããã©ã¡ãŒã¿ãŒã®çš®é¡ïŒããã³ãã®éïŒïŒ
string = const char* // Unity char* = string // Unity bool //( ) int //( ) float //( )
ãã€ãã£ãã³ãŒãã§äœæ¥ããå Žåãconst char *ã¯ããã®æ¹æ³ã§ãã䟿å©ãªiOS NSStringã«ç°¡åã«å€æã§ããŸãã
NSString* CreateNSString (const char* string) { if (string) return [NSString stringWithUTF8String: string]; else return [NSString stringWithUTF8String: ""]; }
ãã€ãã£ãã¡ãœããããè¿ãããæååå€ã¯ãUTF â 8ã§ãšã³ã³ãŒãããããšã³ã³ãŒããããããŒãã«å²ãåœãŠãããŠããå¿ èŠããããŸãã ã¢ããœãŒãã®åŒã³åºãã¯ãæååã«å¯ŸããŠã¯ç¡æã§ãã è¿ãããCè¡ã®Monoã³ã³ãã€ã©ãŒã¯.NETæååãäœæããæ»ãå€ã«å¯ŸããŠfreeãåŒã³åºããããããŒãã§ã®å²ãåœãŠãå¿ èŠã§ãã
åé¡ãåé¿ããããã«ãããŒãã«æååã®ã³ããŒãäœæããã¡ãœãããåŒã³åºãããšãã§ããŸãïŒBonjourã®äŸããïŒã
char* MakeStringCopy (const char* string) { if (string == NULL) return NULL; char* res = (char*)malloc(strlen(string) + 1); strcpy(res, string); return res; }
ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãã®ãã¥ãŒã®ç¶æ ã®å€æŽã«é¢é£ããæ©èœã¯Unityã«èšèŒãããŠããŸãããUnity3dã®å ¬åŒFb SDKãçµ±åãããæ å ±ãåä¿¡ããããã«ãããžã§ã¯ããæ§ç¯ãããŸããã ãã®ãããžã§ã¯ãã§ã¯ãUnity3dããŒãžã§ã³5.1.2f1ããã³Fb Unity SKDããŒãžã§ã³6.2ïŒ ããã«ãããŸã ïŒãiOS SDK 8.4ã䜿çšããŸããã ãããžã§ã¯ãã¯iOSã§æ§ç¯ãããIL2CPPã¯Player Settingsã®Scripting BackendãšããŠéžæãããŸããã
ãªããã®æ å ±ãå¿ èŠãªã®ã§ããããïŒ ãã€ãã£ãæ©èœã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã®å€åïŒ App Life Cycle-Apple Developer ïŒãã¡ã€ã³Viewã¢ããªã±ãŒã·ã§ã³ãšã¬ã³ãã©ãŒã®ç¶æ ã®å€åã«é¢ããã¡ãã»ãŒãžããªãã¹ã³ãããã€ãã£ãiOSãã©ã°ã€ã³ãéçºããã«ã¯ ããšãã°ããœãŒã·ã£ã«ãããã¯ãŒã¯ã®ãã€ãã£ããã©ã°ã€ã³ãŸãã¯ãã€ãã£ãiOSãã©ã°ã€ã³ããµããŒãããŠããããŸããŸãªã¢ããªã¹ãã®ãã©ã°ã€ã³ãçµ±åããããã«ãã®æ©èœãå¿ èŠã«ãªãå ŽåããããŸãããUnity3dçšã®ãã©ã°ã€ã³ã®ããŒãžã§ã³ã¯ãããŸããã
ãã®å Žåã2ã€ã®åºåããããŸãã
- Xcodeãããžã§ã¯ããçæããŸãã ã¢ããªã±ãŒã·ã§ã³ããªã²ãŒãã®ãœãŒã¹ã³ãŒããèŠã€ããŠå€æŽãããã©ã°ã€ã³ãçµ±åããŸãã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ãæçµçããé ãé¢ããŠãããå°æ¥å€æŽãè¡ãããå ŽåãXcodeãããžã§ã¯ããåçæãããã©ã°ã€ã³ãæåããçµ±åããå¿ èŠãããããšã§ãã ãã®ã¢ãããŒãã¯äžåºŠã ã䜿çšããŸããã åºç瀟ã¯ç¬èªã®ã€ã³ã¹ããŒã«ããã³è³Œå ¥ãã©ãã«ãŒãçµ±åããããšã䞻匵ãããããžã§ã¯ãã¯ããããUnibillãã©ã°ã€ã³ã䜿çšããŸãããæ¯æã远跡ã¯ãã®ãã©ã°ã€ã³ã«ãã£ãŠå°ç¡ãã«ãããUnibillãœãŒã¹ã®ãã€ãã£ãéšåããåºç瀟ããæ¯æã远跡ãåŒãèµ·ããã³ãŒããåŒã³åºããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ã䜿çšãããã®ã¯ããããªãã·ã£ãŒããã€ãã£ããã©ã°ã€ã³ã«åºã¥ããŠUnityãã©ã°ã€ã³ãäœæããæéãäžãããçµ±åèªäœã«30åããã£ãããã§ãã
- iOSãããžã§ã¯ãã«å®è£ ãããŠãããã€ãã£ãUnity3dæ©èœã䜿çšããŸãã æ¬ ç¹ã¯ããã®æ©èœãææžåãããŠããªãããšã§ãã ãã ããUnityã®Google Analyticsããã³Fb SKDãã©ã°ã€ã³ã§äœ¿çšãããŸãã
çŸåšã®ãããžã§ã¯ãã§FB SDKã䜿çšãããååãªæéããã£ããããUnityãçæããXcodeãããžã§ã¯ãã®å éšã§äœãèµ·ãã£ãŠããã®ããææ¡ããããšã決å®ãããŸããã
Unityã®FBãã©ã°ã€ã³ã«ã¯ãiOSã®ãã€ãã£ãã³ãŒããå«ãFbUnityInterface.mmããã³.hã«ãšã£ãŠæãéèŠãª2ã€ã®ãã¡ã€ã«ãå«ãŸããŠããŸãã
ã³ãŒãã®æ¬¡ã®ã»ã¯ã·ã§ã³ã¯ã.mmãã¡ã€ã«ã§é¡èã§ãã
-(void)didBecomeActive: (NSNotification *)notification { [FBAppCall handleDidBecomeActiveWithSession:self.session]; } -(void)willTerminate:(NSNotification *)notification { [self.session close]; } -(void)didFinishLaunching:(NSNotification *)notification {
FBã¯ãæšæºã®ã¢ããªã±ãŒã·ã§ã³ããªã²ãŒãã¡ãœãããžã®åŒã³åºããã€ã³ã¿ãŒã»ããããããã§ãã ããããŒãã¡ã€ã«ã«ã¯ã次ã®ã·ã³ã¯ããããŸãã
#if UNITY_VERSION >= 430 #import "AppDelegateListener.h" @interface FbUnityInterface : NSObject <AppDelegateListener>
AppDelegateListener.hã¯ããããžã§ã¯ãã®Classes / PluginBase / Xcodeãã£ã¬ã¯ããªã«ãããŸãã ããªã²ãŒãã€ãã³ããã€ã³ã¿ãŒã»ããããããã«ãUnityã¯4ã€ã®ãããã³ã«ãèšè¿°ããŸãã Objective-Cãããã³ã«ã®æŠå¿µãããã¥ã¡ã³ãã® è±èªçãšãã·ã¢èªçã«ç²ŸéããŠããªã人åãã
äž»ãªãããã³ã«ã¯LifeCycleListenerã§ãã æ®ãã®3ã€ã®ãããã³ã«ã®ãã¡2ã€ã«ãã£ãŠæ¡åŒµãããã®ã¯åœŒã§ãã ã€ãã³ããèãããšãã§ããŸãïŒ
- (void)didFinishLaunching:(NSNotification*)notification; - (void)didBecomeActive:(NSNotification*)notification; - (void)willResignActive:(NSNotification*)notification; - (void)didEnterBackground:(NSNotification*)notification; - (void)willEnterForeground:(NSNotification*)notification; - (void)willTerminate:(NSNotification*)notification;
ãŸãã2ã€ã®ã¡ãœããã宣èšããŸãã
void UnityRegisterLifeCycleListener(id<LifeCycleListener> obj); void UnityUnregisterLifeCycleListener(id<LifeCycleListener> obj);
æåã®ã¡ãœããã¯ãªããžã§ã¯ãã«çœ²åããŠãªã¹ããããã€ãã³ããåãåãã2çªç®ã®ã¡ãœããã¯ãµãã¹ã¯ã©ã€ãã解é€ããŸãã 以äžã¯ãAppDelegateListenerãããã³ã«ã®å€èŠ³ã§ãã
@protocol AppDelegateListener<LifeCycleListener>
ããã·ã¥éç¥ãULRã¢ããªã±ãŒã·ã§ã³ã®ãªãŒãã³ãªã©ã«é¢ããã¡ãã»ãŒãžãžã®ã¢ã¯ã»ã¹ãæäŸããŸãAppDelegateListenerãå®è£ ããã¯ã©ã¹ã«ã¢ã¯ã»ã¹å¯èœãªãã¹ãŠã®ã¡ãã»ãŒãžã¯ãAppDelegateListener.mmã§è¡šç€ºã§ããŸãã
RenderPluginDelegateãããã³ã«ã¯ãUnityã¬ã³ããªã³ã°ã€ãã³ããžã®ã¢ã¯ã»ã¹ãæäŸããLifeCycleListenerãæ¡åŒµããŸãã ãœãŒã¹ã«ã¯é©åãªã³ã¡ã³ããå«ãŸããŠããããã¹ãŠã®ã¡ãœããã«é¢ããæ å ±ã¯ããããååŸã§ããŸãã
@protocol RenderPluginDelegate<LifeCycleListener, NSObject>
æåŸã®è¡ã¯UnityViewControllerLIstenerãããã³ã«ã§ãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ãã¥ãŒã®ã¡ã€ã³ã€ãã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ãããã³ã«ã¯LifeCycleListenerã«äŸåããŸããã ã€ãã³ããªã¹ãïŒ
- (void)viewDidDisappear: - (void)viewWillDisappear: - (void)viewDidAppear: - (void)viewWillAppear: - (void)interfaceWillChangeOrientation: - (void)interfaceDidChangeOrientation:
Fb SDKã®ãœãŒã¹ã³ãŒãããããããã®æ©èœãUnity 4.3dã§ã®ã¿ããŒãžã§ã³4.3以éã«ç»å ŽããããšãããããŸãã
#if HAS_UNITY_VERSION_DEF #include "UnityTrampolineConfigure.h" #endif #if UNITY_VERSION >= 430 #import "AppDelegateListener.h" @interface FbUnityInterface : NSObject <AppDelegateListener> #else
HAS_UNITY_VERSION_DEFå®æ°ã¯ããããžã§ã¯ãã®ãã«ãã«äœ¿çšãããUnity3dã®ããŒãžã§ã³ã«é¢ããæ å ±ããããžã§ã¯ãã«å«ãŸããŠãããšããæ å ±ãæ ŒçŽããRegisterMonoModules.hããããŒãã¡ã€ã«ã§å®£èšãããŠããŸãã
void RegisterMonoModules(); #define HAS_UNITY_VERSION_DEF 1
ããã¯ãRigisterMonoModules.hã®ãã¹ãŠã®ã³ã³ãã³ãã§ãã HAS_UNITY_VERSION_DEFããããžã§ã¯ãã§å®£èšãããŠããå ŽåãUnity3dããŒãžã§ã³å€ã®UNITY_VERSIONå®æ°ãåç §ã§ããŸãã ãããã£ãŠã4.3ããåã®Unity3dããŒãžã§ã³ã䜿çšããå Žåãäžèšã®4ã€ã®ãããã³ã«ã®ååšã«äŸåããã¹ãã§ã¯ãããŸããã
äžéšã®ãã€ãã£ããã©ã°ã€ã³ã§ã¯ããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®.plistãã¡ã€ã«ã«ããŒãååšããå¿ èŠããããŸãã å®éãplistã¯xmlãšåçã§ãããšæ³å®ã§ããŸãã Fb SDKã«ã¯ããœãŒã¹ã³ãŒãFbPlistParserããã³PlistDicãå«ãŸããŠããŸãããããã䜿çšããŠããã©ã°ã€ã³ã«å¿ èŠãªããŒãè¿œå ã§ããŸãã ããšãã°ãXcodeãããžã§ã¯ãã§plistãã¡ã€ã«ãæ€çŽ¢ããå€ãæã€å¿ èŠãªããŒãXcodeãããžã§ã¯ãã§è¿œå ããããã«ã PostProcessBuildAttributeãæã€ã¹ã¯ãªããããããžã§ã¯ãã«è¿œå ã§ããŸãã
ãã®æ å ±ãæçšã§ããããã€ãã£ããã©ã°ã€ã³ãšã®éãã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã