| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- //
- // UMengIOSModule.m
- // UMengIOSModule
- //
- // Created by breeze deng on 2018/1/23.
- // Copyright © 2018年 BA. All rights reserved.
- //
- #import "UMengIOSModule.h"
- #import <UMPush/UMessage.h>
- #import <UMAnalytics/MobClick.h>
- #import <UMAnalytics/MobClickGameAnalytics.h>
- #import <UMAnalytics/DplusMobClick.h>
- #import <React/RCTConvert.h>
- #import <React/RCTEventDispatcher.h>
- #import "RNUMConfigure.h"
- #import <React/RCTRootView.h>
- #define kDidReceiveRemoteNotification @"UMengPushClickListener"
- static NSString *_deviceToken = nil;
- @interface UMengIOSModule()
- @property (nonatomic, assign) BOOL isAppear;
- @property (nonatomic, strong) NSMutableArray *userInfos;
- @property (nonatomic, strong) RCTEventDispatcher *eventDispatcher;
- @end
- @implementation UMengIOSModule
- + (instancetype)sharedInstance
- {
- static UMengIOSModule *sharedInstance = nil;
- static dispatch_once_t onceToken = 0;
-
- dispatch_once(&onceToken,^{
- if (sharedInstance == nil)
- {
- sharedInstance = [[UMengIOSModule alloc] init];
- }
- });
-
- return sharedInstance;
- }
- RCT_EXPORT_MODULE();
- - (void)initWithAppKey:(NSString *)appKey channel:(NSString *)channel launchOptions:(NSDictionary *)launchOptions {
- self.userInfos = [NSMutableArray array];
-
- [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(contentViewDidAppear) name:RCTContentDidAppearNotification object: nil];
- #ifdef DEBUG
- [UMConfigure setLogEnabled:YES];
- #endif
- [RNUMConfigure initWithAppkey: appKey channel: channel];
- [MobClick setScenarioType:E_UM_NORMAL];
- // Push组件基本功能配置
- UMessageRegisterEntity *entity = [[UMessageRegisterEntity alloc] init];
- //type是对推送的几个参数的选择,可以选择一个或者多个。默认是三个全部打开,即:声音,弹窗,角标等
- entity.types = UMessageAuthorizationOptionBadge|UMessageAuthorizationOptionAlert|UMessageAuthorizationOptionSound;
- [UMessage registerForRemoteNotificationsWithLaunchOptions:launchOptions Entity:entity completionHandler:^(BOOL granted, NSError * _Nullable error) {}];
- }
- - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo eventDispatcher:(RCTEventDispatcher *)eventDispatcher {
- UIApplicationState state = [application applicationState];
- self.eventDispatcher = eventDispatcher;
- // 小于iOS 10前台收到通知时,不进行处理
- if(!(state == UIApplicationStateActive && [[[UIDevice currentDevice] systemVersion] floatValue] < 10)) {
- //关闭友盟自带的弹出框
- [UMessage setAutoAlert:NO];
- [UMessage didReceiveRemoteNotification:userInfo];
-
- if (self.isAppear) {
- [self eventDispatcher: eventDispatcher sendBridgeWithName:kDidReceiveRemoteNotification userInfo:userInfo];
- } else {
- [self.userInfos addObject: userInfo];
- }
- }
- }
- - (void)contentViewDidAppear {
- self.isAppear = YES;
- for (NSDictionary *userInfo in self.userInfos) {
- [self eventDispatcher: self.eventDispatcher sendBridgeWithName: kDidReceiveRemoteNotification userInfo: userInfo];
- }
- [self.userInfos removeAllObjects];
- }
- - (void)eventDispatcher:(RCTEventDispatcher *)eventDispatcher sendBridgeWithName:(NSString *)name userInfo:(NSDictionary *)userInfo {
- [eventDispatcher sendDeviceEventWithName:name body:userInfo];
- }
- // /**未知错误*/
- // kUMessageErrorUnknown = 0,
- // /**响应出错*/
- // kUMessageErrorResponseErr = 1,
- // /**操作失败*/
- // kUMessageErrorOperateErr = 2,
- // /**参数非法*/
- // kUMessageErrorParamErr = 3,
- // /**条件不足(如:还未获取device_token,添加tag是不成功的)*/
- // kUMessageErrorDependsErr = 4,
- // /**服务器限定操作*/
- // kUMessageErrorServerSetErr = 5,
- - (NSString *)checkErrorMessage:(NSInteger)code
- {
- switch (code) {
- case 1:
- return @"响应出错";
- break;
- case 2:
- return @"操作失败";
- break;
- case 3:
- return @"参数非法";
- break;
- case 4:
- return @"条件不足(如:还未获取device_token,添加tag是不成功的)";
- break;
- case 5:
- return @"服务器限定操作";
- break;
- default:
- break;
- }
- return nil;
- }
- - (void)handleResponse:(id _Nonnull)responseObject remain:(NSInteger)remain error:(NSError * _Nonnull)error completion:(RCTResponseSenderBlock)completion
- {
- if (completion) {
- if (error) {
- NSString *msg = [self checkErrorMessage:error.code];
- if (msg.length == 0) {
- msg = error.localizedDescription;
- }
- completion(@[@(error.code), @(remain)]);
- } else {
- if ([responseObject isKindOfClass:[NSDictionary class]]) {
- NSDictionary *retDict = responseObject;
- if ([retDict[@"success"] isEqualToString:@"ok"]) {
- completion(@[@200, @(remain)]);
- } else {
- completion(@[@(-1), @(remain)]);
- }
- } else {
- completion(@[@(-1), @(remain)]);
- }
-
- }
- }
- }
- - (void)handleGetTagResponse:(NSSet * _Nonnull)responseTags remain:(NSInteger)remain error:(NSError * _Nonnull)error completion:(RCTResponseSenderBlock)completion
- {
- if (completion) {
- if (error) {
- NSString *msg = [self checkErrorMessage:error.code];
- if (msg.length == 0) {
- msg = error.localizedDescription;
- }
- completion(@[@(error.code), @(remain), @[]]);
- } else {
- if ([responseTags isKindOfClass:[NSSet class]]) {
- NSArray *retList = responseTags.allObjects;
- completion(@[@200, @(remain), retList]);
- } else {
- completion(@[@(-1), @(remain), @[]]);
- }
- }
- }
- }
- - (void)handleAliasResponse:(id _Nonnull)responseObject error:(NSError * _Nonnull)error completion:(RCTResponseSenderBlock)completion
- {
- if (completion) {
- if (error) {
- NSString *msg = [self checkErrorMessage:error.code];
- if (msg.length == 0) {
- msg = error.localizedDescription;
- }
- completion(@[@(error.code)]);
- } else {
- if ([responseObject isKindOfClass:[NSDictionary class]]) {
- NSDictionary *retDict = responseObject;
- if ([retDict[@"success"] isEqualToString:@"ok"]) {
- completion(@[@200]);
- } else {
- completion(@[@(-1)]);
- }
- } else {
- completion(@[@(-1)]);
- }
-
- }
- }
- }
- + (void)setDeviceToken:(NSString *)deviceToken {
- _deviceToken = deviceToken;
- }
- // push
- RCT_EXPORT_METHOD(deviceToken:(RCTResponseSenderBlock)callback)
- {
- NSString *result = @"";
- if (_deviceToken.length != 0) {
- result = _deviceToken;
- }
- callback(@[result]);
- }
- RCT_EXPORT_METHOD(addTag:(NSString *)tag response:(RCTResponseSenderBlock)completion)
- {
- [UMessage addTags:tag response:^(id _Nonnull responseObject, NSInteger remain, NSError * _Nonnull error) {
- [self handleResponse:responseObject remain:remain error:error completion:completion];
- }];
- }
- RCT_EXPORT_METHOD(deleteTag:(NSString *)tag response:(RCTResponseSenderBlock)completion)
- {
- [UMessage deleteTags:tag response:^(id _Nonnull responseObject, NSInteger remain, NSError * _Nonnull error) {
- [self handleResponse:responseObject remain:remain error:error completion:completion];
- }];
- }
- RCT_EXPORT_METHOD(listTag:(RCTResponseSenderBlock)completion)
- {
- [UMessage getTags:^(NSSet * _Nonnull responseTags, NSInteger remain, NSError * _Nonnull error) {
- [self handleGetTagResponse:responseTags remain:remain error:error completion:completion];
- }];
- }
- RCT_EXPORT_METHOD(addAlias:(NSString *)name type:(NSString *)type response:(RCTResponseSenderBlock)completion)
- {
- [UMessage addAlias:name type:type response:^(id _Nonnull responseObject, NSError * _Nonnull error) {
- [self handleAliasResponse:responseObject error:error completion:completion];
- }];
- }
- RCT_EXPORT_METHOD(addExclusiveAlias:(NSString *)name type:(NSString *)type response:(RCTResponseSenderBlock)completion)
- {
- [UMessage setAlias:name type:type response:^(id _Nonnull responseObject, NSError * _Nonnull error) {
- [self handleAliasResponse:responseObject error:error completion:completion];
- }];
- }
- RCT_EXPORT_METHOD(deleteAlias:(NSString *)name type:(NSString *)type response:(RCTResponseSenderBlock)completion)
- {
- [UMessage removeAlias:name type:type response:^(id _Nonnull responseObject, NSError * _Nonnull error) {
- [self handleAliasResponse:responseObject error:error completion:completion];
- }];
- }
- // Event
- RCT_EXPORT_METHOD(onEvent:(NSString *)eventId)
- {
- if (eventId == nil || [eventId isKindOfClass:[NSNull class]]) {
- return;
- }
- [MobClick event:eventId];
- }
- RCT_EXPORT_METHOD(onEventWithLabel:(NSString *)eventId eventLabel:(NSString *)eventLabel)
- {
- if (eventId == nil || [eventId isKindOfClass:[NSNull class]]) {
- return;
- }
- if ([eventLabel isKindOfClass:[NSNull class]]) {
- eventLabel = nil;
- }
- [MobClick event:eventId label:eventLabel];
-
- }
- RCT_EXPORT_METHOD(onEventWithMap:(NSString *)eventId parameters:(NSDictionary *)parameters)
- {
- if (eventId == nil || [eventId isKindOfClass:[NSNull class]]) {
- return;
- }
- if (parameters == nil && [parameters isKindOfClass:[NSNull class]]) {
- parameters = nil;
- }
- [MobClick event:eventId attributes:parameters];
- }
- RCT_EXPORT_METHOD(onEventWithMapAndCount:(NSString *)eventId parameters:(NSDictionary *)parameters eventNum:(int)eventNum)
- {
- if (eventId == nil || [eventId isKindOfClass:[NSNull class]]) {
- return;
- }
- if (parameters == nil && [parameters isKindOfClass:[NSNull class]]) {
- parameters = nil;
- }
-
- [MobClick event:eventId attributes:parameters counter:eventNum];
- }
- RCT_EXPORT_METHOD(onPageBegin:(NSString *)pageName)
- {
- if (pageName == nil || [pageName isKindOfClass:[NSNull class]]) {
- return;
- }
- [MobClick beginLogPageView:pageName];
- }
- RCT_EXPORT_METHOD(onPageEnd:(NSString *)pageName)
- {
- if (pageName == nil || [pageName isKindOfClass:[NSNull class]]) {
- return;
- }
- [MobClick endLogPageView:pageName];
- }
- RCT_EXPORT_METHOD(profileSignInWithPUID:(NSString *)puid)
- {
- if (puid == nil || [puid isKindOfClass:[NSNull class]]) {
- return;
- }
- [MobClick profileSignInWithPUID:puid];
- }
- RCT_EXPORT_METHOD(profileSignInWithPUIDWithProvider:(NSString *)provider puid:(NSString *)puid)
- {
- if (provider == nil && [provider isKindOfClass:[NSNull class]]) {
- provider = nil;
- }
- if (puid == nil || [puid isKindOfClass:[NSNull class]]) {
- return;
- }
-
- [MobClick profileSignInWithPUID:puid provider:provider];
- }
- RCT_EXPORT_METHOD(profileSignOff)
- {
- [MobClick profileSignOff];
- }
- // Dplus
- RCT_EXPORT_METHOD(track:(NSString *)eventName)
- {
-
- if (eventName == nil && [eventName isKindOfClass:[NSNull class]]) {
- eventName = nil;
- }
- [DplusMobClick track:eventName];
- }
- RCT_EXPORT_METHOD(trackWithMap:(NSString *)eventName property:(NSDictionary *) property)
- {
-
- if (eventName == nil && [eventName isKindOfClass:[NSNull class]]) {
- eventName = nil;
- }
-
- if (property == nil && [property isKindOfClass:[NSNull class]]) {
- property = nil;
- }
- [DplusMobClick track:eventName property:property];
- }
- RCT_EXPORT_METHOD(registerSuperProperty:(NSDictionary *)property)
- {
-
- if (property == nil && [property isKindOfClass:[NSNull class]]) {
- property = nil;
- }
- [DplusMobClick registerSuperProperty:property];
- }
- RCT_EXPORT_METHOD(unregisterSuperProperty:(NSString *)propertyName)
- {
-
- if (propertyName == nil && [propertyName isKindOfClass:[NSNull class]]) {
- propertyName = nil;
- }
- [DplusMobClick unregisterSuperProperty:propertyName];
-
- }
- RCT_EXPORT_METHOD(getSuperProperty:(NSString *)propertyName callback:(RCTResponseSenderBlock)callback)
- {
-
- if (propertyName == nil && [propertyName isKindOfClass:[NSNull class]]) {
- propertyName = nil;
- }
- callback(@[[DplusMobClick getSuperProperty:propertyName]]);
-
- }
- RCT_EXPORT_METHOD(getSuperProperties:(RCTResponseSenderBlock)callback)
- {
- NSString *jsonString = nil;
- NSError *error = nil;
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[DplusMobClick getSuperProperties]
- options:kNilOptions //TODO: NSJSONWritingPrettyPrinted // kNilOptions
- error:&error];
- if ([jsonData length] && (error == nil))
- {
- jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] ;
- }else{
- jsonString=@"";
- }
-
- callback(@[jsonString]);
-
- }
- RCT_EXPORT_METHOD(clearSuperProperties)
- {
- [DplusMobClick clearSuperProperties];
-
- }
- RCT_EXPORT_METHOD(setFirstLaunchEvent:(NSArray *)eventList)
- {
- if (eventList == nil && [eventList isKindOfClass:[NSNull class]]) {
- eventList = nil;
- }
- [DplusMobClick setFirstLaunchEvent:eventList];
- }
- @end
|