Unity3d
项目开发,在iOS
平台接SDK
的时候,就需要实现自己的 AppController
来维护 SDK
的生命周期。Unity3d
提供了一套插件机制,可以很方便地在项目中使用自己的CustomAppController
继承并重写默认的UnityAppController
的方法。
在 Unity 插件目录下创建以下文件:
Assets/Plugins/iOS/CustomAppController.mm
文件名必须是 xxxxAppController.mm
,xxxx
前缀可自选,但不能省略,如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
如对本文有疑问, 点击进行留言回复!!
牛客编程巅峰赛S1第6场 - 黄金&钻石&王者题解
纵横字谜的答案 Crossword Answers, ACM/ICPC World Finals 1994, UVa232
HDU - 5880 Family View (AC自动机修改母串)
iOS14Beta3续航怎么样 iOS14Beta3续航能力介绍
iOS14Beta3稳定性怎么样 iOS14Beta3升级建议介绍
网友评论