Merge branch 'dev'

This commit is contained in:
pikacode 2016-12-15 16:02:27 +08:00
commit 423304c5dc
9 changed files with 83 additions and 12 deletions

View File

@ -1,5 +1,6 @@
# iOS API # iOS API
- [延迟注册和启动推送通知服务](#延迟注册和启动推送通知服务)
- [开始与停止推送服务](#开始与停止推送服务) - [开始与停止推送服务](#开始与停止推送服务)
- [获取 RegistrationID](#获取-registrationid) - [获取 RegistrationID](#获取-registrationid)
- [别名与标签](#别名与标签) - [别名与标签](#别名与标签)
@ -19,6 +20,32 @@
- [获取用户推送设置](#获取用户推送设置) - [获取用户推送设置](#获取用户推送设置)
- [监听事件统一说明](#监听事件统一说明) - [监听事件统一说明](#监听事件统一说明)
## 延迟注册和启动推送通知服务
本插件默认在 App 启动完成之后,立即「注册苹果通知服务」+「启动 JPush SDK」其中
- 「注册苹果通知服务」会弹出提示窗口向用户请求权限。
- 「启动 JPush SDK」是使用 JPush 各项 API 的必要条件。
开发者可以根据自己的需求,延迟注册和启动,需做以下操作:
1. 查找并配置 `PushConfig.plist` 文件中的 `Delay` 字段为 `YES`,表明会延迟使用,此时插件不再自动注册、启动通知。
2. 在需要注册并启动通知的地方调用 API - startJPushSDK。
### API - startJPushSDK
注册苹果通知服务,并启动 JPush SDK。
#### 接口定义
```
window.plugins.jPushPlugin.startJPushSDK()
```
## 开始与停止推送服务 ## 开始与停止推送服务
### API - init ### API - init

View File

@ -1,6 +1,6 @@
{ {
"name": "jpush-phonegap-plugin", "name": "jpush-phonegap-plugin",
"version": "3.0.1", "version": "3.0.2",
"description": "JPush for cordova plugin", "description": "JPush for cordova plugin",
"cordova": { "cordova": {
"id": "jpush-phonegap-plugin", "id": "jpush-phonegap-plugin",

View File

@ -12,4 +12,5 @@
@interface AppDelegate (JPush) <JPUSHRegisterDelegate> @interface AppDelegate (JPush) <JPUSHRegisterDelegate>
-(void)registerForRemoteNotification; -(void)registerForRemoteNotification;
-(void)startJPushSDK;
@end @end

View File

@ -28,6 +28,8 @@
return [self init_plus]; return [self init_plus];
} }
NSDictionary *_launchOptions;
-(void)applicationDidLaunch:(NSNotification *)notification{ -(void)applicationDidLaunch:(NSNotification *)notification{
if (notification) { if (notification) {
if (notification.userInfo) { if (notification.userInfo) {
@ -41,11 +43,25 @@
} }
} }
[JPUSHService setDebugMode]; [JPUSHService setDebugMode];
[self registerForRemoteNotification];
[JPushPlugin setupJPushSDK:notification.userInfo]; NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfig_FileName ofType:@"plist"];
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSNumber *delay = [plistData valueForKey:JPushConfig_Delay];
_launchOptions = notification.userInfo;
if (![delay boolValue]) {
[self startJPushSDK];
}
} }
} }
-(void)startJPushSDK{
[self registerForRemoteNotification];
[JPushPlugin setupJPushSDK:_launchOptions];
}
-(void)registerForRemoteNotification{ -(void)registerForRemoteNotification{
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) { if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max #ifdef NSFoundationVersionNumber_iOS_9_x_Max
@ -100,11 +116,18 @@
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{ -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler{
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:notification.request.content.userInfo]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:notification.request.content.userInfo];
if ([SharedJPushPlugin respondsToSelector:@selector(jpushFireDocumentEvent:jsString:)]) {
}
[SharedJPushPlugin jpushFireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]]; [SharedJPushPlugin jpushFireDocumentEvent:JPushDocumentEvent_ReceiveNotification jsString:[userInfo toJsonString]];
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
} }
-(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{ -(void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
if ([SharedJPushPlugin respondsToSelector:@selector(jpushFireDocumentEvent:jsString:)]) {
}
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:response.notification.request.content.userInfo]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithDictionary:response.notification.request.content.userInfo];
@try { @try {
[userInfo setValue:[response valueForKey:@"userText"] forKey:@"userText"]; [userInfo setValue:[response valueForKey:@"userText"] forKey:@"userText"];

View File

@ -15,11 +15,12 @@
#define WEAK_SELF(weakSelf) __weak __typeof(&*self)weakSelf = self; #define WEAK_SELF(weakSelf) __weak __typeof(&*self)weakSelf = self;
static NSString *const JPushConfig_FileName = @"PushConfig";
static NSString *const JPushConfig_Appkey = @"Appkey"; static NSString *const JPushConfig_Appkey = @"Appkey";
static NSString *const JPushConfig_Channel = @"Channel"; static NSString *const JPushConfig_Channel = @"Channel";
static NSString *const JPushConfig_IsProduction = @"IsProduction"; static NSString *const JPushConfig_IsProduction = @"IsProduction";
static NSString *const JPushConfig_IsIDFA = @"IsIDFA"; static NSString *const JPushConfig_IsIDFA = @"IsIDFA";
static NSString *const JPushConfig_FileName = @"PushConfig"; static NSString *const JPushConfig_Delay = @"Delay";
static NSString *const JPushDocumentEvent_ReceiveNotification = @"receiveNotification"; static NSString *const JPushDocumentEvent_ReceiveNotification = @"receiveNotification";
static NSString *const JPushDocumentEvent_OpenNotification = @"openNotification"; static NSString *const JPushDocumentEvent_OpenNotification = @"openNotification";

View File

@ -12,6 +12,9 @@
} }
//注册通知服务并启动 SDK
-(void)startJPushSDK:(CDVInvokedUrlCommand*)command;
//以下为js中可调用接口 //以下为js中可调用接口
//设置标签、别名 //设置标签、别名
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command; -(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command;

View File

@ -39,6 +39,10 @@
@implementation JPushPlugin @implementation JPushPlugin
-(void)startJPushSDK:(CDVInvokedUrlCommand*)command{
[(AppDelegate*)[UIApplication sharedApplication].delegate startJPushSDK];
}
#pragma mark- #pragma mark-
-(void)stopPush:(CDVInvokedUrlCommand*)command{ -(void)stopPush:(CDVInvokedUrlCommand*)command{
[[UIApplication sharedApplication]unregisterForRemoteNotifications]; [[UIApplication sharedApplication]unregisterForRemoteNotifications];
@ -55,18 +59,13 @@
-(void)initial:(CDVInvokedUrlCommand*)command{ -(void)initial:(CDVInvokedUrlCommand*)command{
//do nithng,because Cordova plugin use lazy load mode. //do nithng,because Cordova plugin use lazy load mode.
SharedJPushPlugin = self;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
} }
#ifdef __CORDOVA_4_0_0 #ifdef __CORDOVA_4_0_0
- (void)pluginInitialize { - (void)pluginInitialize {
NSLog(@"### pluginInitialize "); NSLog(@"### pluginInitialize ");
SharedJPushPlugin = self; [self initPlugin];
} }
#else #else
@ -75,12 +74,22 @@
NSLog(@"### initWithWebView "); NSLog(@"### initWithWebView ");
if (self=[super initWithWebView:theWebView]) { if (self=[super initWithWebView:theWebView]) {
} }
SharedJPushPlugin = self; [self initPlugin];
return self; return self;
} }
#endif #endif
-(void)initPlugin{
if (!SharedJPushPlugin) {
SharedJPushPlugin = self;
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
}
-(void)jpushFireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString{ -(void)jpushFireDocumentEvent:(NSString*)eventName jsString:(NSString*)jsString{
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.%@',%@)", eventName, jsString]]; [self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.%@',%@)", eventName, jsString]];

View File

@ -3,12 +3,14 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>Appkey</key> <key>Appkey</key>
<string></string> <string>1c29cb5814072b5b1f8ef829</string>
<key>Channel</key> <key>Channel</key>
<string>Subscription</string> <string>Subscription</string>
<key>IsProduction</key> <key>IsProduction</key>
<false/> <false/>
<key>IsIDFA</key> <key>IsIDFA</key>
<false/> <false/>
<key>Delay</key>
<false/>
</dict> </dict>
</plist> </plist>

View File

@ -49,6 +49,11 @@ JPushPlugin.prototype.isPushStopped = function (callback) {
} }
// iOS methods // iOS methods
JPushPlugin.prototype.startJPushSDK = function () {
this.call_native('startJPushSDK', [] , null)
}
JPushPlugin.prototype.setTagsWithAlias = function (tags, alias) { JPushPlugin.prototype.setTagsWithAlias = function (tags, alias) {
if (tags == null) { if (tags == null) {
this.setAlias(alias) this.setAlias(alias)