当前位置: 移动技术网 > 移动技术>移动开发>IOS > Unity iOS接SDK,定制UnityAppController

Unity iOS接SDK,定制UnityAppController

2020年07月17日  | 移动技术网移动技术  | 我要评论

Unity3d项目开发,在iOS平台接SDK的时候,就需要实现自己的 AppController来维护 SDK的生命周期。Unity3d提供了一套插件机制,可以很方便地在项目中使用自己的CustomAppController继承并重写默认的UnityAppController的方法。
在 Unity 插件目录下创建以下文件:

Assets/Plugins/iOS/CustomAppController.mm​

文件名必须是 xxxxAppController.mmxxxx前缀可自选,但不能省略,如CustomAppController.mm​
否则在 Build项目的时候,会被移动到错误的目录中去。

// CustomAppController.mm

#import  "UnityAppController.h"
@interface CustomAppController : UnityAppController
@end

IMPL_APP_CONTROLLER_SUBCLASS (CustomAppController)

@implementation CustomAppController

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    [super application:application didFinishLaunchingWithOptions:launchOptions];

    return YES;
}

@end

注意,上面的CustomAppController.mm中有一个宏IMPL_APP_CONTROLLER_SUBCLASS,Unity 就是通过 IMPL_APP_CONTROLLER_SUBCLASS知道要使用我们定制的 CustomAppController而不是使用默认的UnityAppController

极光推送SDK为例(SDK官方文档:https://docs.jiguang.cn//jpush/guideline/intro/),定制CustomAppController

// CustomAppController.mm

#import "JPUSHService.h"
#import "JPushEventCache.h"
#import <UserNotifications/UserNotifications.h>

// 如需使用广告标识符 IDFA 则添加该头文件,否则不添加。
#import <AdSupport/AdSupport.h>

#import "UnityAppController.h"

@interface CustomAppController : UnityAppController
@end

IMPL_APP_CONTROLLER_SUBCLASS (CustomAppController)

@implementation CustomAppController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
	[[JPushEventCache sharedInstance] handFinishLaunchOption:launchOptions];
	/*
	  不使用 IDFA 启动 SDK。
	  参数说明:
	  appKey: 极光官网控制台应用标识。
	  channel: 频道,暂无可填任意。
	  apsForProduction: YES: 发布环境;NO: 开发环境。
	*/
	[JPUSHService setupWithOption:launchOptions appKey:@"b8213ec93d03ff11a560f516" channel:@"" apsForProduction:NO];
	return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
	// Required.
	[JPUSHService registerDeviceToken:deviceToken];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{
 	// Required.
  	[[JPushEventCache sharedInstance] sendEvent:userInfo withKey:@"JPushPluginReceiveNotification"];
	[JPUSHService handleRemoteNotification:userInfo];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo     fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler 
{
  [[JPushEventCache sharedInstance] sendEvent:userInfo withKey:@"JPushPluginReceiveNotification"];
}

@end

本文地址:https://blog.csdn.net/linxinfa/article/details/107351914

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网