|
@@ -1,365 +1,575 @@
|
|
-
|
|
|
|
-//
|
|
|
|
-// PushTalkPlugin.m
|
|
|
|
-// PushTalk
|
|
|
|
-//
|
|
|
|
-// Created by zhangqinghe on 13-12-13.
|
|
|
|
-//
|
|
|
|
-//
|
|
|
|
-
|
|
|
|
-#import "JPushPlugin.h"
|
|
|
|
-#import "JPUSHService.h"
|
|
|
|
-#import <UIKit/UIKit.h>
|
|
|
|
-#import <AdSupport/AdSupport.h>
|
|
|
|
-#import <UserNotifications/UserNotifications.h>
|
|
|
|
-#import "AppDelegate+JPush.h"
|
|
|
|
-#import "JPushDefine.h"
|
|
|
|
-
|
|
|
|
-@implementation NSDictionary (JPush)
|
|
|
|
--(NSString*)toJsonString{
|
|
|
|
- NSError *error;
|
|
|
|
- NSData *data = [NSJSONSerialization dataWithJSONObject:self options:0 error:&error];
|
|
|
|
- NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
|
|
|
|
- return jsonString;
|
|
|
|
-}
|
|
|
|
-@end
|
|
|
|
-
|
|
|
|
-@implementation NSString (JPush)
|
|
|
|
--(NSDictionary*)toDictionary{
|
|
|
|
- NSError *error;
|
|
|
|
- NSData *jsonData = [self dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
|
|
|
- return dict;
|
|
|
|
-}
|
|
|
|
-@end
|
|
|
|
-
|
|
|
|
-@interface JPushPlugin()
|
|
|
|
-
|
|
|
|
-@end
|
|
|
|
-
|
|
|
|
-@implementation JPushPlugin
|
|
|
|
-
|
|
|
|
--(void)startJPushSDK:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [(AppDelegate*)[UIApplication sharedApplication].delegate startJPushSDK];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#pragma mark- 外部接口
|
|
|
|
--(void)stopPush:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [[UIApplication sharedApplication]unregisterForRemoteNotifications];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)resumePush:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [(AppDelegate*)[UIApplication sharedApplication].delegate registerForRemoteNotification];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)isPushStopped:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSNumber *result = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ? @(0) : @(1);
|
|
|
|
- [self handleResultWithValue:result command:command];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)initial:(CDVInvokedUrlCommand*)command{
|
|
|
|
- //do nithng,because Cordova plugin use lazy load mode.
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#ifdef __CORDOVA_4_0_0
|
|
|
|
-
|
|
|
|
-- (void)pluginInitialize {
|
|
|
|
- NSLog(@"### pluginInitialize ");
|
|
|
|
- [self initPlugin];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#else
|
|
|
|
-
|
|
|
|
-- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
|
|
|
|
- NSLog(@"### initWithWebView ");
|
|
|
|
- if (self=[super initWithWebView:theWebView]) {
|
|
|
|
- }
|
|
|
|
- [self initPlugin];
|
|
|
|
- return self;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
--(void)initPlugin{
|
|
|
|
- if (!SharedJPushPlugin) {
|
|
|
|
- SharedJPushPlugin = self;
|
|
|
|
- }
|
|
|
|
- [[NSNotificationCenter defaultCenter] addObserver:self
|
|
|
|
- selector:@selector(networkDidReceiveMessage:)
|
|
|
|
- name:kJPFNetworkDidReceiveMessageNotification
|
|
|
|
- object:nil];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-+(void)fireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString{
|
|
|
|
- dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
|
- [SharedJPushPlugin.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.%@',%@)", eventName, jsString]];
|
|
|
|
- });
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString *alias = [command argumentAtIndex:0];
|
|
|
|
- NSArray *tags = [command argumentAtIndex:1];
|
|
|
|
-
|
|
|
|
- [JPUSHService setTags:[NSSet setWithArray:tags]
|
|
|
|
- alias:alias
|
|
|
|
- fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
|
|
|
|
- CDVPluginResult *result;
|
|
|
|
- if (iResCode == 0) {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil];
|
|
|
|
- } else {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
|
|
|
|
- }
|
|
|
|
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
- }];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setTags:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSArray *tags = command.arguments;
|
|
|
|
- [JPUSHService setTags:[NSSet setWithArray:tags]
|
|
|
|
- alias:nil
|
|
|
|
- fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
|
|
|
|
- CDVPluginResult *result;
|
|
|
|
- if (iResCode == 0) {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil];
|
|
|
|
- } else {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
|
|
|
|
- }
|
|
|
|
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
- }];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setAlias:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString *alias = [command argumentAtIndex:0];
|
|
|
|
- [JPUSHService setTags:nil
|
|
|
|
- alias:alias
|
|
|
|
- fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
|
|
|
|
- CDVPluginResult *result;
|
|
|
|
- if (iResCode == 0) {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nil];
|
|
|
|
- } else {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:nil];
|
|
|
|
- }
|
|
|
|
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
- }];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString* registrationID = [JPUSHService registrationID];
|
|
|
|
- [self handleResultWithValue:registrationID command:command];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)startLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString * pageName = [command argumentAtIndex:0];
|
|
|
|
- [JPUSHService startLogPageView:pageName];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)stopLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString * pageName = [command argumentAtIndex:0];
|
|
|
|
- [JPUSHService stopLogPageView:pageName];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)beginLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString *pageName = [command argumentAtIndex:0];
|
|
|
|
- NSNumber *duration = [command argumentAtIndex:1];
|
|
|
|
- [JPUSHService beginLogPageView:pageName duration:duration.intValue];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setBadge:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSNumber *badge = [command argumentAtIndex:0];
|
|
|
|
- [JPUSHService setBadge:badge.intValue];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)resetBadge:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [JPUSHService resetBadge];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSNumber *badge = [command argumentAtIndex:0];
|
|
|
|
- [UIApplication sharedApplication].applicationIconBadgeNumber = badge.intValue;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command {
|
|
|
|
- NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
|
|
|
|
- NSNumber *number = [NSNumber numberWithInteger:num];
|
|
|
|
- [self handleResultWithValue:number command:command];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [JPUSHService setDebugMode];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setLogOFF:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [JPUSHService setLogOFF];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)crashLogON:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [JPUSHService crashLogON];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setLocalNotification:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSLog(@"ios 10 after please use UNNotificationRequest to set local notification, see apple doc to learn more");
|
|
|
|
-
|
|
|
|
- NSDate *date = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] intValue]];
|
|
|
|
- NSString *alert = [command argumentAtIndex:1];
|
|
|
|
- NSNumber *badge = [command argumentAtIndex:2];
|
|
|
|
- NSString *idKey = [command argumentAtIndex:3];
|
|
|
|
- NSDictionary *dict = [command argumentAtIndex:4];
|
|
|
|
- [JPUSHService setLocalNotification:date alertBody:alert badge:badge.intValue alertAction:nil identifierKey:idKey userInfo:dict soundName:nil];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSString *identifier = [command argumentAtIndex:0];
|
|
|
|
- JPushNotificationIdentifier *jpid = [JPushNotificationIdentifier new];
|
|
|
|
- jpid.identifiers = @[identifier];
|
|
|
|
- [JPUSHService removeNotification:jpid];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [JPUSHService removeNotification:nil];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)setLocation:(CDVInvokedUrlCommand*)command{
|
|
|
|
- NSNumber *latitude = [command argumentAtIndex:0];
|
|
|
|
- NSNumber *longitude = [command argumentAtIndex:1];
|
|
|
|
- [JPUSHService setLatitude:latitude.doubleValue longitude:longitude.doubleValue];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)getUserNotificationSettings:(CDVInvokedUrlCommand*)command{
|
|
|
|
- if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
|
|
|
|
- UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
|
|
|
- WEAK_SELF(weakSelf);
|
|
|
|
- [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
|
|
|
|
- NSMutableDictionary *dict = [NSMutableDictionary dictionary];
|
|
|
|
- dict[@"authorizationStatus"] = @(settings.authorizationStatus);
|
|
|
|
- dict[@"soundSetting"] = @(settings.soundSetting);
|
|
|
|
- dict[@"badgeSetting"] = @(settings.badgeSetting);
|
|
|
|
- dict[@"alertSetting"] = @(settings.alertSetting);
|
|
|
|
- dict[@"notificationCenterSetting"] = @(settings.notificationCenterSetting);
|
|
|
|
- dict[@"lockScreenSetting"] = @(settings.lockScreenSetting);
|
|
|
|
- dict[@"carPlaySetting"] = @(settings.carPlaySetting);
|
|
|
|
- dict[@"alertStyle"] = @(settings.alertStyle);
|
|
|
|
- [weakSelf handleResultWithValue:dict command:command];
|
|
|
|
- }];
|
|
|
|
- }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
|
|
|
|
- UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
|
|
|
|
- UIUserNotificationType type = settings.types;
|
|
|
|
- NSNumber *number = [NSNumber numberWithInteger:type];
|
|
|
|
- [self handleResultWithValue:number command:command];
|
|
|
|
- }else{
|
|
|
|
- UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
|
|
|
|
- NSNumber *number = [NSNumber numberWithInteger:type];
|
|
|
|
- [self handleResultWithValue:number command:command];
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#pragma mark - ios 10 APIs
|
|
|
|
-
|
|
|
|
--(void)addDismissActions:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [self addActions:command dismiss:YES];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)addNotificationActions:(CDVInvokedUrlCommand*)command{
|
|
|
|
- [self addActions:command dismiss:NO];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
--(void)addActions:(CDVInvokedUrlCommand*)command dismiss:(BOOL)dimiss{
|
|
|
|
- NSArray *actionsData = [command argumentAtIndex:0];
|
|
|
|
- NSString *categoryId = [command argumentAtIndex:1];
|
|
|
|
- NSMutableArray *actions = [NSMutableArray array];
|
|
|
|
- for (NSDictionary *dict in actionsData) {
|
|
|
|
- NSString *title = dict[@"title"];
|
|
|
|
- NSString *identifier = dict[@"identifier"];
|
|
|
|
- NSString *option = dict[@"option"];
|
|
|
|
- NSString *type = dict[@"type"];
|
|
|
|
- if ([type isEqualToString:@"textInput"]) {
|
|
|
|
- NSString *textInputButtonTitle = dict[@"textInputButtonTitle"];
|
|
|
|
- NSString *textInputPlaceholder = dict[@"textInputPlaceholder"];
|
|
|
|
- UNTextInputNotificationAction *inputAction = [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:option.integerValue textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder];
|
|
|
|
- [actions addObject:inputAction];
|
|
|
|
- } else {
|
|
|
|
- UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:title title:title options:option.integerValue];
|
|
|
|
- [actions addObject:action];
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- UNNotificationCategory *category;
|
|
|
|
- if (dimiss) {
|
|
|
|
- category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
|
|
|
- actions:actions
|
|
|
|
- intentIdentifiers:@[]
|
|
|
|
- options:UNNotificationCategoryOptionCustomDismissAction];
|
|
|
|
- } else {
|
|
|
|
- category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
|
|
|
- actions:actions
|
|
|
|
- intentIdentifiers:@[]
|
|
|
|
- options:UNNotificationCategoryOptionNone];
|
|
|
|
- }
|
|
|
|
- [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#pragma mark - 内部方法
|
|
|
|
-
|
|
|
|
-+(void)setupJPushSDK:(NSDictionary*)userInfo{
|
|
|
|
- NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
|
|
|
|
- if (plistPath == nil) {
|
|
|
|
- NSLog(@"error: PushConfig.plist not found");
|
|
|
|
- assert(0);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
|
|
|
|
- NSString *appkey = [plistData valueForKey:JPushConfig_Appkey];
|
|
|
|
- NSString *channel = [plistData valueForKey:JPushConfig_Channel];
|
|
|
|
- NSNumber *isProduction = [plistData valueForKey:JPushConfig_IsProduction];
|
|
|
|
- NSNumber *isIDFA = [plistData valueForKey:JPushConfig_IsIDFA];
|
|
|
|
-
|
|
|
|
- NSString *advertisingId = nil;
|
|
|
|
- if(isIDFA.boolValue) {
|
|
|
|
- advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
|
|
|
- }
|
|
|
|
- [JPUSHService setupWithOption:userInfo
|
|
|
|
- appKey:appkey
|
|
|
|
- channel:channel
|
|
|
|
- apsForProduction:[isProduction boolValue]
|
|
|
|
- advertisingIdentifier:advertisingId];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#pragma mark 将参数返回给js
|
|
|
|
--(void)handleResultWithValue:(id)value command:(CDVInvokedUrlCommand*)command {
|
|
|
|
- CDVPluginResult *result = nil;
|
|
|
|
- CDVCommandStatus status = CDVCommandStatus_OK;
|
|
|
|
-
|
|
|
|
- if ([value isKindOfClass:[NSString class]]) {
|
|
|
|
- value = [value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
- } else if ([value isKindOfClass:[NSNull class]]) {
|
|
|
|
- value = nil;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ([value isKindOfClass:[NSObject class]]) {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:status messageAsString:value];//NSObject 类型都可以
|
|
|
|
- } else {
|
|
|
|
- NSLog(@"Cordova callback block returned unrecognized type: %@", NSStringFromClass([value class]));
|
|
|
|
- result = nil;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!result) {
|
|
|
|
- result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
|
|
|
|
- }
|
|
|
|
- [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#pragma mark 设置标签及别名回调
|
|
|
|
--(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias {
|
|
|
|
- if (resultCode == 0) { // Success
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-- (void)networkDidReceiveMessage:(NSNotification *)notification {
|
|
|
|
- if (notification && notification.userInfo) {
|
|
|
|
- [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage
|
|
|
|
- jsString:[notification.userInfo toJsonString]];
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@end
|
|
|
|
|
|
+#import "JPushPlugin.h"
|
|
|
|
+#import "JPUSHService.h"
|
|
|
|
+#import <UIKit/UIKit.h>
|
|
|
|
+#import <AdSupport/AdSupport.h>
|
|
|
|
+#import <UserNotifications/UserNotifications.h>
|
|
|
|
+#import "AppDelegate+JPush.h"
|
|
|
|
+#import "JPushDefine.h"
|
|
|
|
+
|
|
|
|
+@implementation NSDictionary (JPush)
|
|
|
|
+-(NSString*)toJsonString{
|
|
|
|
+ NSError *error;
|
|
|
|
+ NSData *data = [NSJSONSerialization dataWithJSONObject:self options:0 error:&error];
|
|
|
|
+ NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
|
|
|
|
+ return jsonString;
|
|
|
|
+}
|
|
|
|
+@end
|
|
|
|
+
|
|
|
|
+@implementation NSString (JPush)
|
|
|
|
+-(NSDictionary*)toDictionary{
|
|
|
|
+ NSError *error;
|
|
|
|
+ NSData *jsonData = [self dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
+ NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
|
|
|
+ return dict;
|
|
|
|
+}
|
|
|
|
+@end
|
|
|
|
+
|
|
|
|
+@interface JPushPlugin()
|
|
|
|
+
|
|
|
|
+@end
|
|
|
|
+
|
|
|
|
+@implementation JPushPlugin
|
|
|
|
+
|
|
|
|
+-(void)startJPushSDK:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [(AppDelegate*)[UIApplication sharedApplication].delegate startJPushSDK];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#pragma mark- 外部接口
|
|
|
|
+-(void)stopPush:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [[UIApplication sharedApplication]unregisterForRemoteNotifications];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)resumePush:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [(AppDelegate*)[UIApplication sharedApplication].delegate registerForRemoteNotification];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)isPushStopped:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSNumber *result = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications] ? @(0) : @(1);
|
|
|
|
+ [self handleResultWithValue:result command:command];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)initial:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ //do nithng,because Cordova plugin use lazy load mode.
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#ifdef __CORDOVA_4_0_0
|
|
|
|
+
|
|
|
|
+- (void)pluginInitialize {
|
|
|
|
+ NSLog(@"### pluginInitialize ");
|
|
|
|
+ [self initPlugin];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#else
|
|
|
|
+
|
|
|
|
+- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
|
|
|
|
+ NSLog(@"### initWithWebView ");
|
|
|
|
+ if (self=[super initWithWebView:theWebView]) {
|
|
|
|
+ }
|
|
|
|
+ [self initPlugin];
|
|
|
|
+ return self;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+-(void)initPlugin{
|
|
|
|
+ if (!SharedJPushPlugin) {
|
|
|
|
+ SharedJPushPlugin = self;
|
|
|
|
+ }
|
|
|
|
+ [[NSNotificationCenter defaultCenter] addObserver:self
|
|
|
|
+ selector:@selector(networkDidReceiveMessage:)
|
|
|
|
+ name:kJPFNetworkDidReceiveMessageNotification
|
|
|
|
+ object:nil];
|
|
|
|
+ [[NSNotificationCenter defaultCenter] addObserver:self
|
|
|
|
+ selector:@selector(receiveLocalNotification:)
|
|
|
|
+ name:JPushDocumentEvent_ReceiveLocalNotification
|
|
|
|
+ object:nil];
|
|
|
|
+ [self dispatchJPushCacheEvent];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+- (void)dispatchJPushCacheEvent {
|
|
|
|
+ for (NSString* key in _jpushEventCache) {
|
|
|
|
+ NSArray *evenList = _jpushEventCache[key];
|
|
|
|
+ for (NSString *event in evenList) {
|
|
|
|
+ [JPushPlugin fireDocumentEvent:key jsString:event];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
++(void)fireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString{
|
|
|
|
+ if (SharedJPushPlugin) {
|
|
|
|
+ dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
|
+ [SharedJPushPlugin.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.%@',%@)", eventName, jsString]];
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!_jpushEventCache) {
|
|
|
|
+ _jpushEventCache = @{}.mutableCopy;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!_jpushEventCache[eventName]) {
|
|
|
|
+ _jpushEventCache[eventName] = @[].mutableCopy;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [_jpushEventCache[eventName] addObject: jsString];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setTags:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+ NSArray* tags = params[@"tags"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService setTags:[NSSet setWithArray:tags]
|
|
|
|
+ completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:[iTags allObjects] forKey:@"tags"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)addTags:(CDVInvokedUrlCommand *)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+ NSArray* tags = params[@"tags"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService addTags:[NSSet setWithArray:tags]
|
|
|
|
+ completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:[iTags allObjects] forKey:@"tags"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)deleteTags:(CDVInvokedUrlCommand *)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+ NSArray* tags = params[@"tags"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService deleteTags:[NSSet setWithArray:tags]
|
|
|
|
+ completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:[iTags allObjects] forKey:@"tags"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)cleanTags:(CDVInvokedUrlCommand *)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService cleanTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)getAllTags:(CDVInvokedUrlCommand *)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService getAllTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:[iTags allObjects] forKey:@"tags"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)checkTagBindState:(CDVInvokedUrlCommand *)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+ NSString* tag = params[@"tag"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService validTag:tag completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ dic[@"tag"] = tag;
|
|
|
|
+ [dic setObject:[NSNumber numberWithBool:isBind] forKey:@"isBind"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setAlias:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+ NSString* alias = params[@"alias"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:iAlias forKey:@"alias"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)deleteAlias:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)getAlias:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ NSDictionary* params = [command.arguments objectAtIndex:0];
|
|
|
|
+ NSNumber* sequence = params[@"sequence"];
|
|
|
|
+
|
|
|
|
+ [JPUSHService getAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
|
|
|
|
+ NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
|
|
|
|
+ [dic setObject:sequence forKey:@"sequence"];
|
|
|
|
+
|
|
|
|
+ CDVPluginResult* result;
|
|
|
|
+
|
|
|
|
+ if (iResCode == 0) {
|
|
|
|
+ [dic setObject:iAlias forKey:@"alias"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dic];
|
|
|
|
+ } else {
|
|
|
|
+ [dic setValue:[NSNumber numberWithUnsignedInteger:iResCode] forKey:@"code"];
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:dic];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+ } seq:[sequence integerValue]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSString* registrationID = [JPUSHService registrationID];
|
|
|
|
+ [self handleResultWithValue:registrationID command:command];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)startLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSString * pageName = [command argumentAtIndex:0];
|
|
|
|
+ [JPUSHService startLogPageView:pageName];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)stopLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSString * pageName = [command argumentAtIndex:0];
|
|
|
|
+ [JPUSHService stopLogPageView:pageName];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)beginLogPageView:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSString *pageName = [command argumentAtIndex:0];
|
|
|
|
+ NSNumber *duration = [command argumentAtIndex:1];
|
|
|
|
+ [JPUSHService beginLogPageView:pageName duration:duration.intValue];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setBadge:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSNumber *badge = [command argumentAtIndex:0];
|
|
|
|
+ [JPUSHService setBadge:badge.intValue];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)resetBadge:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [JPUSHService resetBadge];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSNumber *badge = [command argumentAtIndex:0];
|
|
|
|
+ [UIApplication sharedApplication].applicationIconBadgeNumber = badge.intValue;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
|
|
|
|
+ NSNumber *number = [NSNumber numberWithInteger:num];
|
|
|
|
+ [self handleResultWithValue:number command:command];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [JPUSHService setDebugMode];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setLogOFF:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [JPUSHService setLogOFF];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)crashLogON:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [JPUSHService crashLogON];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setLocalNotification:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSNumber *delay = [command argumentAtIndex:0];
|
|
|
|
+ NSString *alert = [command argumentAtIndex:1];
|
|
|
|
+ NSNumber *badge = [command argumentAtIndex:2];
|
|
|
|
+ NSString *idKey = [command argumentAtIndex:3];
|
|
|
|
+ NSDictionary *userInfo = [command argumentAtIndex:4];
|
|
|
|
+
|
|
|
|
+ JPushNotificationContent *content = [[JPushNotificationContent alloc] init];
|
|
|
|
+
|
|
|
|
+ if (alert) {
|
|
|
|
+ content.body = alert;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (badge) {
|
|
|
|
+ content.badge = badge;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (userInfo) {
|
|
|
|
+ content.userInfo = userInfo;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
|
|
|
|
+ if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
|
|
|
|
+ if (delay) {
|
|
|
|
+ trigger.timeInterval = [delay doubleValue];
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (delay) {
|
|
|
|
+ trigger.fireDate = [NSDate dateWithTimeIntervalSinceNow:[[command argumentAtIndex:0] intValue]];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
|
|
|
|
+ request.content = content;
|
|
|
|
+ request.trigger = trigger;
|
|
|
|
+
|
|
|
|
+ if (idKey) {
|
|
|
|
+ request.requestIdentifier = idKey;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ request.completionHandler = ^(id result) {
|
|
|
|
+ NSLog(@"result");
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ [JPUSHService addNotification:request];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSString *identifier = [command argumentAtIndex:0];
|
|
|
|
+ JPushNotificationIdentifier *jpid = [JPushNotificationIdentifier new];
|
|
|
|
+ jpid.identifiers = @[identifier];
|
|
|
|
+ [JPUSHService removeNotification:jpid];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [JPUSHService removeNotification:nil];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)setLocation:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ NSNumber *latitude = [command argumentAtIndex:0];
|
|
|
|
+ NSNumber *longitude = [command argumentAtIndex:1];
|
|
|
|
+ [JPUSHService setLatitude:latitude.doubleValue longitude:longitude.doubleValue];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)getUserNotificationSettings:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
|
|
|
|
+ UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
|
|
|
+ WEAK_SELF(weakSelf);
|
|
|
|
+ [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
|
|
|
|
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
|
|
|
|
+ dict[@"authorizationStatus"] = @(settings.authorizationStatus);
|
|
|
|
+ dict[@"soundSetting"] = @(settings.soundSetting);
|
|
|
|
+ dict[@"badgeSetting"] = @(settings.badgeSetting);
|
|
|
|
+ dict[@"alertSetting"] = @(settings.alertSetting);
|
|
|
|
+ dict[@"notificationCenterSetting"] = @(settings.notificationCenterSetting);
|
|
|
|
+ dict[@"lockScreenSetting"] = @(settings.lockScreenSetting);
|
|
|
|
+ dict[@"carPlaySetting"] = @(settings.carPlaySetting);
|
|
|
|
+ dict[@"alertStyle"] = @(settings.alertStyle);
|
|
|
|
+ [weakSelf handleResultWithValue:dict command:command];
|
|
|
|
+ }];
|
|
|
|
+ }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
|
|
|
|
+ UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
|
|
|
|
+ UIUserNotificationType type = settings.types;
|
|
|
|
+ NSNumber *number = [NSNumber numberWithInteger:type];
|
|
|
|
+ [self handleResultWithValue:number command:command];
|
|
|
|
+ }else{
|
|
|
|
+ UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
|
|
|
|
+ NSNumber *number = [NSNumber numberWithInteger:type];
|
|
|
|
+ [self handleResultWithValue:number command:command];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#pragma mark - ios 10 APIs
|
|
|
|
+
|
|
|
|
+-(void)addDismissActions:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [self addActions:command dismiss:YES];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)addNotificationActions:(CDVInvokedUrlCommand*)command{
|
|
|
|
+ [self addActions:command dismiss:NO];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)addActions:(CDVInvokedUrlCommand*)command dismiss:(BOOL)dimiss{
|
|
|
|
+ NSArray *actionsData = [command argumentAtIndex:0];
|
|
|
|
+ NSString *categoryId = [command argumentAtIndex:1];
|
|
|
|
+ NSMutableArray *actions = [NSMutableArray array];
|
|
|
|
+ for (NSDictionary *dict in actionsData) {
|
|
|
|
+ NSString *title = dict[@"title"];
|
|
|
|
+ NSString *identifier = dict[@"identifier"];
|
|
|
|
+ NSString *option = dict[@"option"];
|
|
|
|
+ NSString *type = dict[@"type"];
|
|
|
|
+ if ([type isEqualToString:@"textInput"]) {
|
|
|
|
+ NSString *textInputButtonTitle = dict[@"textInputButtonTitle"];
|
|
|
|
+ NSString *textInputPlaceholder = dict[@"textInputPlaceholder"];
|
|
|
|
+ UNTextInputNotificationAction *inputAction = [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:option.integerValue textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder];
|
|
|
|
+ [actions addObject:inputAction];
|
|
|
|
+ } else {
|
|
|
|
+ UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:title title:title options:option.integerValue];
|
|
|
|
+ [actions addObject:action];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ UNNotificationCategory *category;
|
|
|
|
+ if (dimiss) {
|
|
|
|
+ category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
|
|
|
+ actions:actions
|
|
|
|
+ intentIdentifiers:@[]
|
|
|
|
+ options:UNNotificationCategoryOptionCustomDismissAction];
|
|
|
|
+ } else {
|
|
|
|
+ category = [UNNotificationCategory categoryWithIdentifier:categoryId
|
|
|
|
+ actions:actions
|
|
|
|
+ intentIdentifiers:@[]
|
|
|
|
+ options:UNNotificationCategoryOptionNone];
|
|
|
|
+ }
|
|
|
|
+ [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObject:category]];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#pragma mark - 内部方法
|
|
|
|
+
|
|
|
|
++(void)setupJPushSDK:(NSDictionary*)userInfo{
|
|
|
|
+ NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
|
|
|
|
+ if (plistPath == nil) {
|
|
|
|
+ NSLog(@"error: PushConfig.plist not found");
|
|
|
|
+ assert(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
|
|
|
|
+ NSString *appkey = [plistData valueForKey:JPushConfig_Appkey];
|
|
|
|
+ NSString *channel = [plistData valueForKey:JPushConfig_Channel];
|
|
|
|
+ NSNumber *isProduction = [plistData valueForKey:JPushConfig_IsProduction];
|
|
|
|
+ NSNumber *isIDFA = [plistData valueForKey:JPushConfig_IsIDFA];
|
|
|
|
+
|
|
|
|
+ NSString *advertisingId = nil;
|
|
|
|
+ if(isIDFA.boolValue) {
|
|
|
|
+ advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
|
|
|
|
+ }
|
|
|
|
+ [JPUSHService setupWithOption:userInfo
|
|
|
|
+ appKey:appkey
|
|
|
|
+ channel:channel
|
|
|
|
+ apsForProduction:[isProduction boolValue]
|
|
|
|
+ advertisingIdentifier:advertisingId];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#pragma mark 将参数返回给js
|
|
|
|
+-(void)handleResultWithValue:(id)value command:(CDVInvokedUrlCommand*)command {
|
|
|
|
+ CDVPluginResult *result = nil;
|
|
|
|
+ CDVCommandStatus status = CDVCommandStatus_OK;
|
|
|
|
+
|
|
|
|
+ if ([value isKindOfClass:[NSString class]]) {
|
|
|
|
+ value = [value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
+ } else if ([value isKindOfClass:[NSNull class]]) {
|
|
|
|
+ value = nil;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ([value isKindOfClass:[NSObject class]]) {
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:status messageAsString:value];//NSObject 类型都可以
|
|
|
|
+ } else {
|
|
|
|
+ NSLog(@"Cordova callback block returned unrecognized type: %@", NSStringFromClass([value class]));
|
|
|
|
+ result = nil;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!result) {
|
|
|
|
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
|
|
|
|
+ }
|
|
|
|
+ [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)networkDidReceiveMessage:(NSNotification *)notification {
|
|
|
|
+ if (notification && notification.userInfo) {
|
|
|
|
+ [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveMessage
|
|
|
|
+ jsString:[notification.userInfo toJsonString]];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+-(void)receiveLocalNotification:(NSNotification *)notification {
|
|
|
|
+ if (notification && notification.object) {
|
|
|
|
+ [JPushPlugin fireDocumentEvent:JPushDocumentEvent_ReceiveLocalNotification
|
|
|
|
+ jsString:[notification.object toJsonString]];
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+@end
|