4
0
mirror of https://github.com/jpush/jpush-phonegap-plugin.git synced 2025-04-23 17:30:43 +08:00

Merge branch 'dev'

This commit is contained in:
E.B 2016-03-11 13:21:32 +08:00
commit 381395acaf
12 changed files with 1255 additions and 1227 deletions

@ -17,16 +17,16 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
1. cordova create 文件夹名字 包名 应用名字
cordova create Myproj com.myproj.jpush MyTestProj
2. 添加平台
cd Myproj
cd Myproj
cordova platform add android
cordova platform add ios
ps:这里请注意iOS平台必须先执行 `cordova platform add ios`,
然后再执行`cordova plugin add xxxxx`命令,不然有一些必须要的链接库需要手动添加
###Cordova CLI/Phonegap 安装 Android & iOS
@ -53,14 +53,14 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
3). 在js中调用函数,初始化jpush sdk
window.plugins.jPushPlugin.init();
window.plugins.jPushPlugin.init();
//由于phonegap插件采用了Lazy load的特性 所以这里建议在js文件能执行的最开始就加
### Android 手工安装
[Android 手工安装文档地址](document/Android_handle_install.md)
### IOS手工安装
@ -88,10 +88,10 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
具体的API请参考这里
#### iOS和adnroid通用API简介
#### iOS和android通用API简介
+ 停止与恢复推送服务 API
window.plugins.jPushPlugin.init()
window.plugins.jPushPlugin.stopPush()
window.plugins.jPushPlugin.resumePush()
@ -101,17 +101,17 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
+ 获取 RegistrationID API
window.plugins.jPushPlugin.getRegistrationID(callback)
+ 别名与标签 API
window.plugins.jPushPlugin.setTagsWithAlias(tags,alias)
window.plugins.jPushPlugin.setTags(tags)
window.plugins.jPushPlugin.setAlias(alias)
+ 获取点击通知内容
event - jpush.openNotification
+ 获取通知内容
event - jpush.receiveNotification
+ 获取自定义消息推送内容
@ -128,9 +128,9 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
event - jpush.receiveMessage
//推荐使用事件的方式传递但同时保留了receiveMessageIniOSCallback的回调函数兼容以前的代码
window.plugins.jPushPlugin.receiveMessageIniOSCallback(data)
+ 页面的统计
window.plugins.jPushPlugin.startLogPageView (pageName)
window.plugins.jPushPlugin.stopLogPageView (pageName)
window.plugins.jPushPlugin.beginLogPageView (pageName,duration)
@ -142,31 +142,36 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
+ 本地通知
+ 后续版本加入
+ 日志等级设置
window.plugins.jPushPlugin.setDebugModeFromIos ()
window.plugins.jPushPlugin.setLogOFF()
[iOS API详细说明](document/iOS_detail_api.md)
#### adnroid API简介
#### android API简介
+ 获取集成日志
window.plugins.jPushPlugin.setDebugMode(mode)
+ 接收推送消息和点击通知
//下面这两个api 是兼容旧有的代码
window.plugins.jPushPlugin.receiveMessageInAndroidCallback(data)
window.plugins.jPushPlugin.openNotificationInAndroidCallback(data)
+ 统计分析 API
onResume / onPause(java api)
window.plugins.jPushPlugin.setStatisticsOpen(boolean)
或在 MainActivity 中的 onPause() 和 onResume() 方法中分别调用
JPushInterface.onResume(this) 和 JPushInterface.onPause(this) 来启用统计分析功能,
如果使用这种方式启用统计分析功能则window.plugins.jPushPlugin.setStatisticsOpen(boolean)
方法不再有效,建议不要同时使用。
+ 清除通知 API
window.plugins.jPushPlugin.clearAllNotification()
@ -177,11 +182,11 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
window.plugins.jPushPlugin.setCustomPushNotificationBuilder = function()
+ 设置保留最近通知条数 API
window.plugins.jPushPlugin.setLatestNotificationNum(num)
+ 本地通知API
window.plugins.jPushPlugin.addLocalNotification(builderId,
content,
title,
@ -195,18 +200,18 @@ jpush-phonegap-plugin 支持 iOS,Android 的推送插件。
###常见问题
####1. androd
####1. android
eclipse中phonegap工程import之后出现:`Type CallbackContext cannot be resolved to a type`
解决方案eclipse中右键单击工程名Build Path->Config Build Path->Projects->选中 工程名称CordovaLib->点击 add
####2. iOS 设置/修改 APP_KEY
在PushConfig.plist 中修改。PushConfig.plist 其他值说明:
在PushConfig.plist 中修改。PushConfig.plist 其他值说明:
CHANNEL 渠道标识
IsProduction 是否生产环境(暂未启用)
###更多
[JPush官网文档](http://docs.jpush.io/)
[JPush官网文档](http://docs.jpush.io/)

@ -28,7 +28,7 @@
##### 接口定义
window.plugins.jPushPlugin.receiveMessageInAndroidCallback = function(data)
##### 参数说明
- data 接收到的js字符串包含的key:value请进入该函数体查看
@ -42,7 +42,7 @@
##### 接口定义
window.plugins.jPushPlugin.openNotificationInAndroidCallback = function(data)
##### 参数说明
- data js字符串
@ -80,6 +80,19 @@
JPushInterface.onPause(this);
}
#### API - setStatisticsOpen(boolean)
用于在 js 中控制是否打开应用的统计分析功能,但如果已经添加了上面的 onResume/onPause 方法,
就不能再通过这个方法来控制统计分析功能了。
#### 接口定义
window.plugins.jPushPlugin.setStatisticsOpen(boolean)
#### 参数说明
- boolean
-true : 打开统计分析功能
-false: 关闭统计分析功能
#### API - reportNotificationOpened
@ -89,7 +102,7 @@
##### 接口定义
window.plugins.jPushPlugin.reportNotificationOpened(msgID)
##### 参数说明
- msgID
-收到的通知或者自定义消息的id
@ -117,14 +130,14 @@
当用户需要定制默认的通知栏样式时,则可调用此方法。
极光 Push SDK 提供了 2 个用于定制通知栏样式的构建类:
- setBasicPushNotificationBuilder
- setBasicPushNotificationBuilder
- Basic 用于定制 Android Notification 里的 defaults / flags / icon 等基础样式(行为)
- setCustomPushNotificationBuilder
- 继承 Basic 进一步让开发者定制 Notification Layout
如果不调用此方法定制则极光Push SDK 默认的通知栏样式是Android标准的通知栏提示。
##### 接口定义
##### 接口定义
window.plugins.jPushPlugin.setBasicPushNotificationBuilder = function()
window.plugins.jPushPlugin.setCustomPushNotificationBuilder = function()
@ -143,7 +156,7 @@
##### 接口定义
window.plugins.jPushPlugin.setLatestNotificationNum(num)
##### 参数说明
- num 保存的条数
@ -181,5 +194,3 @@
- notificaitonID 设置本地通知的ID
- broadcastTime 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒
- extras 设置额外的数据信息extras为json字符串

@ -4,9 +4,9 @@
1. 复制:`$JPUSH_PLUGIN_DIR`/src/android/*.java 到cn/jpush/phonega/目录下(即cn.jpush.phonegap的包下)
2. 复制:`$JPUSH_PLUGIN_DIR`/src/android/armeabi/libjpush.so 到lib/armeabi/
3. 复制:`$JPUSH_PLUGIN_DIR`/src/android/jpush-sdk-release1.5.0.jar 到lib/
3. 复制:`$JPUSH_PLUGIN_DIR`/src/android/jpush-sdk-release2.0.6.jar 到lib/
4. 复制:`$JPUSH_PLUGIN_DIR`/src/android/test_notification_layout.xml到res/layout/
5. 复制:`$JPUSH_PLUGIN_DIR`/src/android/jpush_notification_icon.png 到res/drawable/
5. 复制:`$JPUSH_PLUGIN_DIR`/src/android/jpush_notification_icon.png到res/drawable/
6. 修改 AndroidManifest.xml 在 manifest 节点下添加以下权限
<!-- Required 一些系统要求的权限,如访问网络等-->
@ -53,7 +53,7 @@
<action android:name="cn.jpush.android.intent.REPORT"/>
<action android:name="cn.jpush.android.intent.PushService"/>
<action android:name="cn.jpush.android.intent.PUSH_TIME"/>
</intent-filter>
</service>
<!-- Required SDK核心功能-->
@ -76,7 +76,7 @@
<data android:scheme="package"/>
</intent-filter>
</receiver>
<!-- User defined. For test only 用户自定义的广播接收器 -->
<receiver
android:name="cn.jpush.phonegap.MyReceiver"

@ -16,7 +16,7 @@
- data 是一个js字符串使用如下代码解析js具体key根据应用内消息来确定
var bToObj = JSON.parse(data);
var bToObj = JSON.parse(data)
#####返回值
@ -30,9 +30,9 @@
本 API 用于“用户指定页面使用时长”的统计,并上报到服务器,在 Portal 上展示给开发者。页面统计集成正确才能够获取正确的页面访问路径、访问深度PV的数据。
##### 接口定义
window.plugins.jPushPlugin.startLogPageView = function(pageName)
window.plugins.jPushPlugin.stopLogPageView = function(pageName)
window.plugins.jPushPlugin.beginLogPageView = function(pageName,duration)
window.plugins.jPushPlugin.prototype.startLogPageView = function(pageName)
window.plugins.jPushPlugin.prototype.stopLogPageView = function(pageName)
window.plugins.jPushPlugin.prototype.beginLogPageView = function(pageName,duration)
#####参数说明
pageName 需要统计页面自定义名称
duration 自定义的页面时间
@ -44,11 +44,10 @@ duration 自定义的页面时间
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
window.plugins.jPushPlugin.beginLogPageView("newPage",5);
window.plugins.jPushPlugin.startLogPageView("onePage");
window.plugins.jPushPlugin.stopLogPageView("onePage");
}
window.plugins.jPushPlugin.beginLogPageView("newPage",5);
window.plugins.jPushPlugin.startLogPageView("onePage");
window.plugins.jPushPlugin.stopLogPageView("onePage");
### 设置Badge
#### API - setBadge,resetBadge
@ -58,8 +57,8 @@ duration 自定义的页面时间
实际应用中开发者可以直接对badge值做增减操作无需自己维护用户与badge值之间的对应关系。
##### 接口定义
window.plugins.jPushPlugin.setBadge(value)
window.plugins.jPushPlugin.reSetBadge()
window.plugins.jPushPlugin.prototype.setBadge(value)
window.plugins.jPushPlugin.prototype.reSetBadge()
`resetBadge相当于setBadge(0)`
##### 参数说明
@ -68,10 +67,8 @@ value 取值范围:[0,99999]
控制台会有log打印设置结果
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
window.plugins.jPushPlugin.setBadge(5);
window.plugins.jPushPlugin.reSetBadge();
}
window.plugins.jPushPlugin.setBadge(5);
window.plugins.jPushPlugin.reSetBadge();
#### API - setApplicationIconBadgeNumber
@ -80,7 +77,7 @@ value 取值范围:[0,99999]
##### 接口定义
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(badge)
window.plugins.jPushPlugin.prototype.setApplicationIconBadgeNumber(badge)
##### 参数说明
@ -89,9 +86,7 @@ value 取值范围:[0,99999]
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0);
}
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0);
#### API - getApplicationIconBadgeNumber
@ -100,7 +95,7 @@ value 取值范围:[0,99999]
##### 接口定义
window.plugins.jPushPlugin.getApplicationIconBadgeNumber(callback)
window.plugins.jPushPlugin.prototype.getApplicationIconBadgeNumber(callback)
##### 参数说明
@ -116,7 +111,56 @@ window.plugins.jPushPlugin.getApplicationIconBadgeNumber(function(data){
```
### 本地通知
#### API - addLocalNotificationForIOS
API用于注册本地通知
最多支持64个
##### 接口定义
window.plugins.jPushPlugin.prototype.addLocalNotificationForIOS(delayTime,content,badge,notificationID,extras)
##### 参数说明
- delayTime 本地推送延迟多长时间后显示,数值类型或纯数字的字符型均可
- content 本地推送需要显示的内容
- badge 角标的数字。如果不需要改变角标传-1。数值类型或纯数字的字符型均可
- notificationID 本地推送标识符,字符串。
- extras 自定义参数,可以用来标识推送和增加附加信息。字典类型。
#####代码示例
window.plugins.jPushPlugin.addLocalNotificationForIOS(6*60*60,"本地推送内容",1,"notiId",{"key":"value"});
#### API - deleteLocalNotificationWithIdentifierKeyInIOS
API删除本地推送定义
##### 接口定义
window.plugins.jPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS(identifierKey)
##### 参数说明
- identifierKey 本地推送标识符
#####代码示例
window.plugins.jPushPlugin.deleteLocalNotificationWithIdentifierKeyInIOS("identifier");
#### API - clearAllLocalNotifications
API清除所有本地推送对象
##### 接口定义
window.plugins.jPushPlugin.prototype.clearAllLocalNotifications()
#####代码示例
window.plugins.jPushPlugin.clearAllLocalNotifications();
### 日志等级设置
#### API - setDebugModeFromIos
API 用于开启Debug模式显示更多的日志信息
@ -124,13 +168,11 @@ API 用于开启Debug模式显示更多的日志信息
建议调试时开启这个选项不调试的时候注释这句代码这个函数setLogOFF是相反的一对
##### 接口定义
window.plugins.jPushPlugin.reSetBadge.setDebugModeFromIos()
window.plugins.jPushPlugin.prototype.setDebugModeFromIos()
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
window.plugins.jPushPlugin.setDebugModeFromIos();
}
window.plugins.jPushPlugin.setDebugModeFromIos();
#### API - setLogOFF
@ -140,11 +182,56 @@ API用来关闭日志信息除了必要的错误信息
##### 接口定义
window.plugins.jPushPlugin.reSetBadge.setLogOFF ()
window.plugins.jPushPlugin.prototype.setLogOFF()
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
window.plugins.jPushPlugin.setLogOFF();
}
window.plugins.jPushPlugin.setLogOFF();
#### API - setCrashLogON
API用于统计用户应用崩溃日志
如果需要统计Log信息调用该接口。当你需要自己收集错误信息时切记不要调用该接口。
##### 接口定义
window.plugins.jPushPlugin.prototype.setCrashLogON()
#####代码示例
window.plugins.jPushPlugin.setCrashLogON();
### 地理位置上报
#### API - setLocation
API 用于统计用户地理信息
##### 接口定义
window.plugins.jPushPlugin.prototype.setLocation(latitude,longitude)
##### 参数说明
- latitude 地理位置纬度,数值类型或纯数字的字符型均可
- longitude 地理位置精度,数值类型或纯数字的字符型均可
#####代码示例
window.plugins.jPushPlugin.setLocation(39.26,115.25);
### 设备平台判断
#### API - isPlatformIOS
API 用于区分iOS、Android平台以便不同设置
##### 接口定义
window.plugins.jPushPlugin.prototype.isPlatformIOS()
#####代码示例
if(window.plugins.jPushPlugin.isPlatformIOS()){
//iOS
}else{
//Android
}

@ -105,6 +105,7 @@
window.plugins.jPushPlugin.setApplicationIconBadgeNumber(0);
} else {
window.plugins.jPushPlugin.setDebugMode(true);
window.plugins.jPushPlugin.setStatisticsOpen(true);
}
}
catch (exception) {
@ -220,5 +221,3 @@
</div>
</body>
</html>

@ -28,395 +28,372 @@ import cn.jpush.android.data.JPushLocalNotification;
import cn.jpush.android.api.TagAliasCallback;
import android.util.Log;
public class JPushPlugin extends CordovaPlugin {
private final static List<String> methodList =
Arrays.asList(
"getRegistrationID",
"setTags",
"setTagsWithAlias",
"setAlias",
"getNotification",
"setBasicPushNotificationBuilder",
"setCustomPushNotificationBuilder",
"setPushTime",
"init",
"setDebugMode",
"stopPush",
"resumePush",
"isPushStopped",
"setLatestNotificationNum",
"setPushTime",
"clearAllNotification",
"clearNotificationById",
"addLocalNotification",
"removeLocalNotification",
"clearLocalNotifications",
"onResume",
"onPause",
"reportNotificationOpened");
private ExecutorService threadPool = Executors.newFixedThreadPool(1);
private static JPushPlugin instance;
private final static List<String> methodList =
Arrays.asList(
"getRegistrationID",
"setTags",
"setTagsWithAlias",
"setAlias",
"getNotification",
"setBasicPushNotificationBuilder",
"setCustomPushNotificationBuilder",
"setPushTime",
"init",
"setDebugMode",
"stopPush",
"resumePush",
"isPushStopped",
"setLatestNotificationNum",
"setPushTime",
"clearAllNotification",
"clearNotificationById",
"addLocalNotification",
"removeLocalNotification",
"clearLocalNotifications",
"onResume",
"onPause",
"reportNotificationOpened",
"setStatisticsOpen");
private ExecutorService threadPool = Executors.newFixedThreadPool(1);
private static JPushPlugin instance;
private static Activity cordovaActivity;
private static String TAG = "JPushPlugin";
private static boolean shouldCacheMsg = false;
private static boolean shouldCacheMsg = false;
private static boolean isStatisticsOpened = true; // 是否开启统计分析功能
public static String notificationAlert;
public static Map<String, Object> notificationExtras=new HashMap<String, Object>();
public static String openNotificationAlert;
public static Map<String, Object> openNotificationExtras=new HashMap<String, Object>();
public static String notificationAlert;
public static Map<String, Object> notificationExtras = new HashMap<String, Object>();
public static String openNotificationAlert;
public static Map<String, Object> openNotificationExtras = new HashMap<String, Object>();
public JPushPlugin() {
instance = this;
}
public JPushPlugin() {
instance = this;
}
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
Log.i(TAG, "---------------- initialize" + "-" + JPushPlugin.openNotificationAlert + "-" + JPushPlugin.notificationAlert);
Log.i(TAG, "---------------- initialize"+"-"+JPushPlugin.openNotificationAlert + "-" + JPushPlugin.notificationAlert);
cordovaActivity = this.cordova.getActivity();
shouldCacheMsg = false;
//如果同时缓存了打开事件openNotificationAlert 消息事件notificationAlert只向UI 打开事件
//这样做是为了和iOS 统一
if (JPushPlugin.openNotificationAlert != null) {
JPushPlugin.notificationAlert = null;
JPushPlugin.transmitOpen(JPushPlugin.openNotificationAlert,
JPushPlugin.openNotificationExtras);
}
if (JPushPlugin.notificationAlert != null) {
JPushPlugin.transmitReceive(JPushPlugin.notificationAlert,
JPushPlugin.notificationExtras);
}
//JPushInterface.init(cordova.getActivity().getApplicationContext());
}
//如果同时缓存了打开事件openNotificationAlert 消息事件notificationAlert只向UI 打开事件
//这样做是为了和iOS 统一
if(JPushPlugin.openNotificationAlert != null){
JPushPlugin.notificationAlert = null;
JPushPlugin.transmitOpen(JPushPlugin.openNotificationAlert, JPushPlugin.openNotificationExtras);
}
if(JPushPlugin.notificationAlert!=null){
JPushPlugin.transmitReceive(JPushPlugin.notificationAlert, JPushPlugin.notificationExtras);
}
public void onPause(boolean multitasking) {
Log.i(TAG, "---------------- onPause");
shouldCacheMsg = true;
if (isStatisticsOpened) {
JPushInterface.onPause(this.cordova.getActivity());
}
}
public void onResume(boolean multitasking) {
shouldCacheMsg = false;
Log.i(TAG, "---------------- onResume" + "-" + JPushPlugin.openNotificationAlert + "-" + JPushPlugin.notificationAlert);
if (isStatisticsOpened) {
JPushInterface.onResume(this.cordova.getActivity());
}
if (JPushPlugin.openNotificationAlert != null) {
JPushPlugin.notificationAlert = null;
JPushPlugin.transmitOpen(JPushPlugin.openNotificationAlert,
JPushPlugin.openNotificationExtras);
}
if (JPushPlugin.notificationAlert != null) {
JPushPlugin.transmitReceive(JPushPlugin.notificationAlert,
JPushPlugin.notificationExtras);
}
}
//JPushInterface.init(cordova.getActivity().getApplicationContext());
}
public void onPause(boolean multitasking) {
Log.i(TAG, "---------------- onPause");
shouldCacheMsg = true;
}
public void onResume(boolean multitasking) {
shouldCacheMsg = false;
Log.i(TAG, "---------------- onResume"+"-"+JPushPlugin.openNotificationAlert + "-" + JPushPlugin.notificationAlert);
if(JPushPlugin.openNotificationAlert != null){
JPushPlugin.notificationAlert = null;
JPushPlugin.transmitOpen(JPushPlugin.openNotificationAlert, JPushPlugin.openNotificationExtras);
}
if(JPushPlugin.notificationAlert!=null){
JPushPlugin.transmitReceive(JPushPlugin.notificationAlert, JPushPlugin.notificationExtras);
}
}
private static JSONObject notificationObject(String message,
Map<String, Object> extras) {
JSONObject data = new JSONObject();
try {
data.put("message", message);
JSONObject jExtras = new JSONObject();
for(Entry<String,Object> entry:extras.entrySet()){
if(entry.getKey().equals("cn.jpush.android.EXTRA")){
JSONObject jo = new JSONObject((String)entry.getValue());
private static JSONObject notificationObject(String message,
Map<String, Object> extras) {
JSONObject data = new JSONObject();
try {
data.put("message", message);
JSONObject jExtras = new JSONObject();
for (Entry<String, Object> entry : extras.entrySet()) {
if (entry.getKey().equals("cn.jpush.android.EXTRA")) {
JSONObject jo = new JSONObject((String) entry.getValue());
jExtras.put("cn.jpush.android.EXTRA", jo);
} else {
jExtras.put(entry.getKey(),entry.getValue());
jExtras.put(entry.getKey(), entry.getValue());
}
}
if(jExtras.length()>0)
{
data.put("extras", jExtras);
}
} catch (JSONException e) {
}
if (jExtras.length() > 0) {
data.put("extras", jExtras);
}
} catch (JSONException e) {
e.printStackTrace();
}
return data;
}
}
return data;
}
private static JSONObject openNotificationObject(String alert,
Map<String, Object> extras) {
JSONObject data = new JSONObject();
try {
data.put("alert", alert);
JSONObject jExtras = new JSONObject();
for (Entry<String, Object> entry : extras.entrySet()) {
if (entry.getKey().equals("cn.jpush.android.EXTRA")) {
JSONObject jo = new JSONObject((String) entry.getValue());
jExtras.put("cn.jpush.android.EXTRA", jo);
} else {
jExtras.put(entry.getKey(), entry.getValue());
}
}
if (jExtras.length() > 0) {
data.put("extras", jExtras);
}
} catch (JSONException e) {
e.printStackTrace();
}
return data;
}
private static JSONObject openNotificationObject(String alert,
Map<String, Object> extras){
JSONObject data = new JSONObject();
try{
data.put("alert", alert);
JSONObject jExtras = new JSONObject();
for(Entry<String,Object> entry:extras.entrySet()){
if(entry.getKey().equals("cn.jpush.android.EXTRA")){
JSONObject jo = new JSONObject((String)entry.getValue());
jExtras.put("cn.jpush.android.EXTRA", jo);
}else{
jExtras.put(entry.getKey(),entry.getValue());
}
}
if(jExtras.length()>0)
{
data.put("extras", jExtras);
}
} catch (JSONException e) {
static void transmitPush(String message, Map<String, Object> extras) {
if (instance == null) {
return;
}
JSONObject data = notificationObject(message, extras);
String format = "window.plugins.jPushPlugin.receiveMessageInAndroidCallback('%s');";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
}
}
return data;
}
static void transmitPush(String message, Map<String, Object> extras) {
if (instance == null) {
return;
}
JSONObject data = notificationObject(message, extras);
String js = String
.format("window.plugins.jPushPlugin.receiveMessageInAndroidCallback('%s');",
data.toString());
try {
instance.webView.sendJavascript(js);
// String jsEvent=String
// .format("cordova.fireDocumentEvent('jpush.receiveMessage',%s)",
// data.toString());
// instance.webView.sendJavascript(jsEvent);
} catch (NullPointerException e) {
static void transmitOpen(String alert, Map<String, Object> extras) {
if (instance == null) {
return;
}
if (JPushPlugin.shouldCacheMsg) {
return;
}
Log.i(TAG, "---------------- transmitOpen");
} catch (Exception e) {
JSONObject data = openNotificationObject(alert, extras);
String format = "window.plugins.jPushPlugin.openNotificationInAndroidCallback('%s');";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
JPushPlugin.openNotificationAlert = null;
}
}
}
static void transmitOpen(String alert, Map<String, Object> extras) {
if (instance == null) {
return;
}
static void transmitReceive(String alert, Map<String, Object> extras) {
if (instance == null) {
return;
}
if (JPushPlugin.shouldCacheMsg) {
return;
}
JSONObject data = openNotificationObject(alert, extras);
String format = "window.plugins.jPushPlugin.receiveNotificationInAndroidCallback('%s');";
final String js = String.format(format, data.toString());
cordovaActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
instance.webView.loadUrl("javascript:" + js);
}
});
JPushPlugin.notificationAlert = null;
}
if(JPushPlugin.shouldCacheMsg){
return;
}
@Override
public boolean execute(final String action, final JSONArray data,
final CallbackContext callbackContext) throws JSONException {
if (!methodList.contains(action)) {
return false;
}
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
Method method = JPushPlugin.class.getDeclaredMethod(action,
JSONArray.class, CallbackContext.class);
method.invoke(JPushPlugin.this, data, callbackContext);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
});
return true;
}
Log.i(TAG, "---------------- transmitOpen");
void init(JSONArray data, CallbackContext callbackContext) {
JPushInterface.init(this.cordova.getActivity().getApplicationContext());
//callbackContext.success();
}
JSONObject data = openNotificationObject(alert, extras);
String js = String
.format("window.plugins.jPushPlugin.openNotificationInAndroidCallback('%s');",
data.toString());
void setDebugMode(JSONArray data, CallbackContext callbackContext) {
boolean mode;
try {
mode = data.getBoolean(0);
// if (mode.equals("true")) {
// JPushInterface.setDebugMode(true);
// } else if (mode.equals("false")) {
// JPushInterface.setDebugMode(false);
// } else {
// callbackContext.error("error mode");
// }
JPushInterface.setDebugMode(mode);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
instance.webView.sendJavascript(js);
// String jsEvent=String
// .format("cordova.fireDocumentEvent('jpush.openNotification',%s)",
// data.toString());
// instance.webView.sendJavascript(jsEvent);
} catch (NullPointerException e) {
void stopPush(JSONArray data, CallbackContext callbackContext) {
JPushInterface.stopPush(this.cordova.getActivity().getApplicationContext());
callbackContext.success();
}
} catch (Exception e) {
void resumePush(JSONArray data, CallbackContext callbackContext) {
JPushInterface.resumePush(this.cordova.getActivity().getApplicationContext());
callbackContext.success();
}
}
JPushPlugin.openNotificationAlert = null;
}
static void transmitReceive(String alert, Map<String, Object> extras) {
if (instance == null) {
return;
}
void isPushStopped(JSONArray data, CallbackContext callbackContext) {
boolean isStopped = JPushInterface.isPushStopped(
this.cordova.getActivity().getApplicationContext());
if (isStopped) {
callbackContext.success(1);
} else {
callbackContext.success(0);
}
}
if(JPushPlugin.shouldCacheMsg){
return;
}
void setLatestNotificationNum(JSONArray data, CallbackContext callbackContext) {
int num = -1;
try {
num = data.getInt(0);
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading num json");
}
if (num != -1) {
JPushInterface.setLatestNotificationNumber(
this.cordova.getActivity().getApplicationContext(), num);
} else {
callbackContext.error("error num");
}
}
JSONObject data = openNotificationObject(alert, extras);
String js = String
.format("window.plugins.jPushPlugin.receiveNotificationInAndroidCallback('%s');",
data.toString());
void setPushTime(JSONArray data, CallbackContext callbackContext) {
Set<Integer> days = new HashSet<Integer>();
JSONArray dayArray;
int startHour = -1;
int endHour = -1;
try {
dayArray = data.getJSONArray(0);
for (int i = 0; i < dayArray.length(); i++) {
days.add(dayArray.getInt(i));
}
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading days json");
}
try {
startHour = data.getInt(1);
endHour = data.getInt(2);
} catch (JSONException e) {
callbackContext.error("error reading hour json");
}
Context context = this.cordova.getActivity().getApplicationContext();
JPushInterface.setPushTime(context, days, startHour, endHour);
callbackContext.success();
}
try {
instance.webView.sendJavascript(js);
void getRegistrationID(JSONArray data, CallbackContext callbackContext) {
Context context = this.cordova.getActivity().getApplicationContext();
String regID = JPushInterface.getRegistrationID(context);
callbackContext.success(regID);
}
} catch (NullPointerException e) {
void onResume(JSONArray data, CallbackContext callbackContext) {
JPushInterface.onResume(this.cordova.getActivity());
}
} catch (Exception e) {
void onPause(JSONArray data, CallbackContext callbackContext) {
JPushInterface.onPause(this.cordova.getActivity());
}
}
JPushPlugin.notificationAlert = null;
void reportNotificationOpened(JSONArray data, CallbackContext callbackContext) {
try {
String msgID;
msgID = data.getString(0);
JPushInterface.reportNotificationOpened(this.cordova.getActivity(), msgID);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
void setTags(JSONArray data, CallbackContext callbackContext) {
try {
HashSet<String> tags = new HashSet<String>();
for (int i = 0; i < data.length(); i++) {
tags.add(data.getString(i));
}
JPushInterface.setTags(this.cordova.getActivity()
.getApplicationContext(), tags, mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading tags JSON");
}
}
@Override
public boolean execute(final String action, final JSONArray data,
final CallbackContext callbackContext) throws JSONException {
if (!methodList.contains(action)) {
return false;
}
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
Method method = JPushPlugin.class.getDeclaredMethod(action,
JSONArray.class, CallbackContext.class);
method.invoke(JPushPlugin.this, data, callbackContext);
} catch (Exception e) {
Log.e(TAG,e.toString());
}
}
});
return true;
}
void init(JSONArray data,CallbackContext callbackContext){
JPushInterface.init(this.cordova.getActivity().getApplicationContext());
//callbackContext.success();
}
void setDebugMode(JSONArray data, CallbackContext callbackContext) {
boolean mode;
try {
mode = data.getBoolean(0);
// if (mode.equals("true")) {
// JPushInterface.setDebugMode(true);
// } else if (mode.equals("false")) {
// JPushInterface.setDebugMode(false);
// } else {
// callbackContext.error("error mode");
// }
JPushInterface.setDebugMode(mode);
callbackContext.success();
} catch (JSONException e) {
}
}
void stopPush(JSONArray data,
CallbackContext callbackContext){
JPushInterface.stopPush(this.cordova.getActivity().getApplicationContext());
callbackContext.success();
}
void resumePush(JSONArray data,
CallbackContext callbackContext){
JPushInterface.resumePush(this.cordova.getActivity().getApplicationContext());
callbackContext.success();
}
void isPushStopped(JSONArray data,
CallbackContext callbackContext){
boolean isStopped =JPushInterface.isPushStopped(this.cordova.getActivity().getApplicationContext());
if(isStopped){
callbackContext.success(1);
}else{
callbackContext.success(0);
}
}
void setLatestNotificationNum(JSONArray data,
CallbackContext callbackContext){
int num = -1;
try {
num = data.getInt(0);
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading num json");
}
if(num != -1){
JPushInterface.setLatestNotificationNumber(this.cordova.getActivity().getApplicationContext(), num);
}else{
callbackContext.error("error num");
}
}
void setPushTime(JSONArray data,
CallbackContext callbackContext){
Set<Integer> days = new HashSet<Integer>();
JSONArray dayArray;
int startHour = -1;
int endHour = -1;
try {
dayArray = data.getJSONArray(0);
for (int i = 0; i < dayArray.length(); i++) {
days.add(dayArray.getInt(i));
}
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading days json");
}
try{
startHour = data.getInt(1);
endHour = data.getInt(2);
}catch(JSONException e){
callbackContext.error("error reading hour json");
}
JPushInterface.setPushTime(this.cordova.getActivity().getApplicationContext(), days, startHour, endHour);
callbackContext.success();
}
void getRegistrationID(JSONArray data, CallbackContext callbackContext) {
String regID= JPushInterface.getRegistrationID(this.cordova.getActivity().getApplicationContext());
callbackContext.success(regID);
void setAlias(JSONArray data, CallbackContext callbackContext) {
try {
String alias = data.getString(0);
JPushInterface.setAlias(this.cordova.getActivity()
.getApplicationContext(), alias, mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading alias JSON");
}
}
}
void onResume(JSONArray data, CallbackContext callbackContext) {
JPushInterface.onResume(this.cordova.getActivity());
}
void onPause(JSONArray data, CallbackContext callbackContext) {
JPushInterface.onPause(this.cordova.getActivity());
}
void reportNotificationOpened(JSONArray data, CallbackContext callbackContext) {
try {
String msgID;
msgID = data.getString(0);
JPushInterface.reportNotificationOpened(this.cordova.getActivity(),msgID);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void setTags(JSONArray data, CallbackContext callbackContext) {
try {
HashSet<String> tags=new HashSet<String>();
for(int i=0;i<data.length();i++){
tags.add(data.getString(i));
}
JPushInterface.setTags(this.cordova.getActivity()
.getApplicationContext(), tags,mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading tags JSON");
}
}
void setAlias(JSONArray data, CallbackContext callbackContext) {
try {
String alias = data.getString(0);
JPushInterface.setAlias(this.cordova.getActivity()
.getApplicationContext(), alias,mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading alias JSON");
}
}
void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) {
HashSet<String> tags = new HashSet<String>();
String alias;
try {
alias = data.getString(0);
JSONArray tagsArray = data.getJSONArray(1);
for (int i = 0; i < tagsArray.length(); i++) {
tags.add(tagsArray.getString(i));
}
JPushInterface.setAliasAndTags(this.cordova.getActivity()
.getApplicationContext(), alias, tags,mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading tagAlias JSON");
}
}
void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) {
HashSet<String> tags = new HashSet<String>();
String alias;
try {
alias = data.getString(0);
JSONArray tagsArray = data.getJSONArray(1);
for (int i = 0; i < tagsArray.length(); i++) {
tags.add(tagsArray.getString(i));
}
JPushInterface.setAliasAndTags(this.cordova.getActivity()
.getApplicationContext(), alias, tags, mTagWithAliasCallback);
callbackContext.success();
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("Error reading tagAlias JSON");
}
}
// void getNotification(JSONArray data, CallbackContext callBackContext) {
// String alert = JPushPlugin.notificationAlert;
@ -436,123 +413,123 @@ public class JPushPlugin extends CordovaPlugin {
// JPushPlugin.notificationExtras = new HashMap<String, Obl>();
// }
void setBasicPushNotificationBuilder(JSONArray data,
CallbackContext callbackContext) {
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(
this.cordova.getActivity());
builder.developerArg0 = "Basic builder 1";
JPushInterface.setPushNotificationBuilder(1, builder);
JSONObject obj = new JSONObject();
try {
obj.put("id", 1);
} catch (JSONException e) {
e.printStackTrace();
}
//callbackContext.success(obj);
}
void setBasicPushNotificationBuilder(JSONArray data,
CallbackContext callbackContext) {
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(
this.cordova.getActivity());
builder.developerArg0 = "Basic builder 1";
JPushInterface.setPushNotificationBuilder(1, builder);
JSONObject obj = new JSONObject();
try {
obj.put("id", 1);
} catch (JSONException e) {
e.printStackTrace();
}
//callbackContext.success(obj);
}
void setCustomPushNotificationBuilder(JSONArray data,
CallbackContext callbackContext) {
CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(
this.cordova.getActivity(), R.layout.test_notification_layout,
R.id.icon, R.id.title, R.id.text);
builder.developerArg0 = "Custom Builder 1";
builder.layoutIconDrawable = R.drawable.jpush_notification_icon;
JPushInterface.setPushNotificationBuilder(2, builder);
JSONObject obj = new JSONObject();
try {
obj.put("id", 2);
} catch (JSONException e) {
e.printStackTrace();
}
//callbackContext.success(obj);
}
void clearAllNotification(JSONArray data,
CallbackContext callbackContext){
JPushInterface.clearAllNotifications(this.cordova.getActivity());
//callbackContext.success();
}
void clearNotificationById(JSONArray data,
CallbackContext callbackContext){
int notificationId=-1;
try {
notificationId = data.getInt(0);
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading id json");
}
if(notificationId != -1){
JPushInterface.clearNotificationById(this.cordova.getActivity(), notificationId);
}else{
callbackContext.error("error id");
}
}
void addLocalNotification(JSONArray data,
CallbackContext callbackContext) throws JSONException{
//builderId,content,title,notificaitonID,broadcastTime,extras
int builderId=data.getInt(0);
String content =data.getString(1);
String title = data.getString(2);
int notificationID= data.getInt(3);
int broadcastTime=data.getInt(4);
JSONObject extras=data.getJSONObject(5);
JPushLocalNotification ln = new JPushLocalNotification();
ln.setBuilderId(builderId);
ln.setContent(content);
ln.setTitle(title);
ln.setNotificationId(notificationID) ;
ln.setBroadcastTime(System.currentTimeMillis() + broadcastTime);
void setCustomPushNotificationBuilder(JSONArray data,
CallbackContext callbackContext) {
CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder(
this.cordova.getActivity(), R.layout.test_notification_layout,
R.id.icon, R.id.title, R.id.text);
builder.developerArg0 = "Custom Builder 1";
builder.layoutIconDrawable = R.drawable.jpush_notification_icon;
JPushInterface.setPushNotificationBuilder(2, builder);
JSONObject obj = new JSONObject();
try {
obj.put("id", 2);
} catch (JSONException e) {
e.printStackTrace();
}
//callbackContext.success(obj);
}
ln.setExtras(extras.toString()) ;
JPushInterface.addLocalNotification(this.cordova.getActivity(), ln);
}
void removeLocalNotification(JSONArray data,
CallbackContext callbackContext) throws JSONException{
int notificationID=data.getInt(0);
JPushInterface.removeLocalNotification(this.cordova.getActivity(),notificationID);
void clearAllNotification(JSONArray data, CallbackContext callbackContext) {
JPushInterface.clearAllNotifications(this.cordova.getActivity());
//callbackContext.success();
}
}
void clearLocalNotifications(JSONArray data,
CallbackContext callbackContext){
JPushInterface.clearLocalNotifications(this.cordova.getActivity());
void clearNotificationById(JSONArray data, CallbackContext callbackContext) {
int notificationId = -1;
try {
notificationId = data.getInt(0);
} catch (JSONException e) {
e.printStackTrace();
callbackContext.error("error reading id json");
}
if (notificationId != -1) {
JPushInterface.clearNotificationById(this.cordova.getActivity(),
notificationId);
} else {
callbackContext.error("error id");
}
}
}
private final TagAliasCallback mTagWithAliasCallback = new TagAliasCallback() {
void addLocalNotification(JSONArray data, CallbackContext callbackContext)
throws JSONException {
//builderId,content,title,notificaitonID,broadcastTime,extras
int builderId = data.getInt(0);
String content = data.getString(1);
String title = data.getString(2);
int notificationID = data.getInt(3);
int broadcastTime = data.getInt(4);
JSONObject extras = data.getJSONObject(5);
JPushLocalNotification ln = new JPushLocalNotification();
ln.setBuilderId(builderId);
ln.setContent(content);
ln.setTitle(title);
ln.setNotificationId(notificationID);
ln.setBroadcastTime(System.currentTimeMillis() + broadcastTime);
ln.setExtras(extras.toString());
JPushInterface.addLocalNotification(this.cordova.getActivity(), ln);
}
void removeLocalNotification(JSONArray data, CallbackContext callbackContext)
throws JSONException {
int notificationID = data.getInt(0);
JPushInterface.removeLocalNotification(this.cordova.getActivity(),
notificationID);
}
void clearLocalNotifications(JSONArray data, CallbackContext callbackContext) {
JPushInterface.clearLocalNotifications(this.cordova.getActivity());
}
/**
* 决定是否启用统计分析功能
* @param data
* @param callbackContext
*/
void setStatisticsOpen(JSONArray data, CallbackContext callbackContext) {
try {
isStatisticsOpened = data.getBoolean(0);
} catch (JSONException e) {
e.printStackTrace();
}
}
private final TagAliasCallback mTagWithAliasCallback = new TagAliasCallback() {
@Override
public void gotResult(int code, String alias, Set<String> tags) {
if (instance == null) {
return;
}
JSONObject data = new JSONObject();
try {
data.put("resultCode", code);
data.put("tags", tags);
data.put("alias", alias);
String jsEvent=String
.format("cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
data.toString());
instance.webView.sendJavascript(jsEvent);
} catch (JSONException e) {
}
if (instance == null) {
return;
}
JSONObject data = new JSONObject();
try {
data.put("resultCode", code);
data.put("tags", tags);
data.put("alias", alias);
String jsEvent = String.format(
"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)",
data.toString());
instance.webView.sendJavascript(jsEvent);
} catch (JSONException e) {
e.printStackTrace();
}
}
};
};
}

@ -12,82 +12,82 @@ import android.content.Intent;
import android.util.Log;
public class MyReceiver extends BroadcastReceiver {
private static String TAG = "JPushPlugin";
@Override
public void onReceive(Context context, Intent intent) {
private static String TAG = "JPushPlugin";
private static final List<String> IGNORED_EXTRAS_KEYS =
Arrays.asList(
"cn.jpush.android.TITLE",
"cn.jpush.android.MESSAGE",
"cn.jpush.android.APPKEY",
"cn.jpush.android.NOTIFICATION_CONTENT_TITLE"
);
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
// }else if (JPushInterface.ACTION_UNREGISTER.equals(intent.getAction())){
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
handlingReceivedMessage(intent);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
handlingNotificationReceive(context,intent);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
handlingNotificationOpen(context,intent);
} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(action)) {
handlingReceivedMessage(intent);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(action)) {
handlingNotificationReceive(context, intent);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(action)) {
handlingNotificationOpen(context, intent);
} else {
Log.d(TAG, "Unhandled intent - " + intent.getAction());
Log.d(TAG, "Unhandled intent - " + action);
}
}
private void handlingReceivedMessage(Intent intent) {
String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
Map<String,Object> extras = getNotificationExtras(intent);
JPushPlugin.transmitPush(msg, extras);
}
private void handlingNotificationOpen(Context context,Intent intent){
Log.i(TAG, "---------------- handlingNotificationOpen");
}
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
Map<String,Object> extras = getNotificationExtras(intent);
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
JPushPlugin.openNotificationAlert = alert;
JPushPlugin.openNotificationExtras = extras;
JPushPlugin.transmitOpen(alert, extras);
private void handlingReceivedMessage(Intent intent) {
String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE);
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.transmitPush(msg, extras);
}
context.startActivity(launch);
}
private void handlingNotificationReceive(Context context,Intent intent){
private void handlingNotificationOpen(Context context, Intent intent) {
Log.i(TAG, "---------------- handlingNotificationOpen");
Log.i(TAG, "---------------- handlingNotificationReceive");
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.openNotificationAlert = alert;
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.openNotificationExtras = extras;
JPushPlugin.transmitOpen(alert, extras);
Intent launch = context.getPackageManager().getLaunchIntentForPackage(
context.getPackageName());
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(launch);
}
private void handlingNotificationReceive(Context context, Intent intent) {
Log.i(TAG, "---------------- handlingNotificationReceive");
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
JPushPlugin.notificationAlert = alert;
Map<String, Object> extras = getNotificationExtras(intent);
JPushPlugin.notificationExtras = extras;
JPushPlugin.transmitReceive(alert, extras);
}
private Map<String, Object> getNotificationExtras(Intent intent) {
Map<String, Object> extrasMap = new HashMap<String, Object>();
for (String key : intent.getExtras().keySet()) {
if (!IGNORED_EXTRAS_KEYS.contains(key)) {
Log.e("key", "key:" + key);
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
extrasMap.put(key, intent.getIntExtra(key, 0));
} else {
extrasMap.put(key, intent.getStringExtra(key));
}
}
}
return extrasMap;
}
String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT);
Map<String,Object> extras = getNotificationExtras(intent);
Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
launch.addCategory(Intent.CATEGORY_LAUNCHER);
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);
JPushPlugin.notificationAlert = alert;
JPushPlugin.notificationExtras = extras;
JPushPlugin.transmitReceive(alert, extras);
}
private Map<String, Object> getNotificationExtras(Intent intent) {
Map<String, Object> extrasMap = new HashMap<String, Object>();
for (String key : intent.getExtras().keySet()) {
if (!IGNORED_EXTRAS_KEYS.contains(key)) {
Log.e("key","key:"+key);
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)){
extrasMap.put(key, intent.getIntExtra(key,0));
}else{
extrasMap.put(key, intent.getStringExtra(key));
}
}
}
return extrasMap;
}
private static final List<String> IGNORED_EXTRAS_KEYS =
Arrays.asList("cn.jpush.android.TITLE","cn.jpush.android.MESSAGE","cn.jpush.android.APPKEY","cn.jpush.android.NOTIFICATION_CONTENT_TITLE");
}

@ -10,6 +10,4 @@
@interface AppDelegate (JPush)
//@property(nonatomic,strong)NSDictionary *luanchOption;
@end

@ -7,87 +7,42 @@
//
#import "AppDelegate+JPush.h"
#import <objc/runtime.h>
#import "JPushPlugin.h"
#import "JPUSHService.h"
//static char launchNotificationKey;
@implementation AppDelegate (JPush)
+(void)load{
Method origin;
Method swizzle;
origin=class_getInstanceMethod([self class],@selector(init));
swizzle=class_getInstanceMethod([self class], @selector(init_plus));
method_exchangeImplementations(origin, swizzle);
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[JPushPlugin setLaunchOptions:launchOptions];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
-(instancetype)init_plus{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidLaunch:)
name:@"UIApplicationDidFinishLaunchingNotification"
object:nil];
return [self init_plus];
}
-(void)applicationDidLaunch:(NSNotification *)notification{
if (notification) {
[JPushPlugin setLaunchOptions:notification.userInfo];
}
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[JPUSHService registerDeviceToken:deviceToken];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
[JPUSHService handleRemoteNotification:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPushPluginReceiveNotification
object:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPushPluginReceiveNotification object:userInfo];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
[JPUSHService handleRemoteNotification:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPushPluginReceiveNotification
object:userInfo];
[[NSNotificationCenter defaultCenter] postNotificationName:kJPushPluginReceiveNotification object:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification {
[JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// [application setApplicationIconBadgeNumber:0];
// [application cancelAllLocalNotifications];
// [application setApplicationIconBadgeNumber:0];
// [application cancelAllLocalNotifications];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
// [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
//delegate
//-(NSDictionary *)luanchOption{
// return objc_getAssociatedObject(self, &launchNotificationKey);
//}
//-(void)setLuanchOption:(NSDictionary *)luanchOption{
// objc_setAssociatedObject(self, &launchNotificationKey, luanchOption, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//}
//-(void)dealloc{
// self.luanchOption=nil;
//}
@end

@ -11,28 +11,59 @@
#define kJPushPluginReceiveNotification @"JPushPluginReceiveNofication"
@interface JPushPlugin : CDVPlugin{
}
+(void)setLaunchOptions:(NSDictionary *)theLaunchOptions;
//以下为js中可调用接口
//设置标签、别名
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command;
-(void)setTags:(CDVInvokedUrlCommand*)command;
-(void)setAlias:(CDVInvokedUrlCommand*)command;
//获取 RegistrationID
-(void)getRegistrationID:(CDVInvokedUrlCommand*)command;
//页面统计
-(void)startLogPageView:(CDVInvokedUrlCommand*)command;
-(void)stopLogPageView:(CDVInvokedUrlCommand*)command;
-(void)beginLogPageView:(CDVInvokedUrlCommand*)command;
// 设置角标到服务器, 服务器下一次发消息时,会设置成这个值
//设置角标到服务器,服务器下一次发消息时,会设置成这个值
//本接口不会改变应用本地的角标值.
-(void)setBadge:(CDVInvokedUrlCommand*)command;
//相当于 [setBadge:0]
-(void)resetBadge:(CDVInvokedUrlCommand*)command;
//改变应用本地的角标值.
//应用本地的角标值设置/获取
-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command;
//获取应用本地的角标值.
-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand*)command;
//停止与恢复推送
-(void)stopPush:(CDVInvokedUrlCommand*)command;
-(void)resumePush:(CDVInvokedUrlCommand*)command;
-(void)isPushStopped:(CDVInvokedUrlCommand*)command;
//开关日志
-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command;
-(void)setLogOFF:(CDVInvokedUrlCommand*)command;
-(void)crashLogON:(CDVInvokedUrlCommand*)command;
//本地推送
-(void)setLocalNotification:(CDVInvokedUrlCommand*)command;
-(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command;
-(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command;
//地理位置上报 [latitude,longitude]
-(void)setLocation:(CDVInvokedUrlCommand*)command;
/*
* js中可监听到的事件
* jpush.openNotification app
* jpush.setTagsWithAlias
* jpush.receiveMessage
* jpush.receiveNotification
*/
@end

@ -10,452 +10,377 @@
#import "JPUSHService.h"
#import <UIKit/UIKit.h>
static NSString *const JM_APP_KEY = @"APP_KEY";
static NSString *const JM_APP_CHANNEL = @"CHANNEL";
static NSString *const JM_APP_ISPRODUCTION = @"IsProduction";
static NSString *const JMessageConfigFileName = @"PushConfig";
static NSDictionary *_luanchOptions=nil;
static NSString *const JPushConfigFileName = @"PushConfig";
static NSDictionary *_luanchOptions = nil;
@implementation JPushPlugin
+(void)setLaunchOptions:(NSDictionary *)theLaunchOptions{
_luanchOptions=theLaunchOptions;
[JPUSHService setDebugMode];
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
//categories nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}
//read appkey and channel from JMessageConfig.plist
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JMessageConfigFileName ofType:@"plist"];
if (plistPath == nil) {
NSLog(@"error: PushConfig.plist not found");
assert(0);
}
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSString * appkey = [plistData valueForKey:JM_APP_KEY];
NSString * channel = [plistData valueForKey:JM_APP_CHANNEL];
NSNumber * isProduction = [plistData valueForKey:JM_APP_ISPRODUCTION];
if (!appkey || appkey.length == 0) {
NSLog(@"error: app key not found in JMessageConfig.plist ");
assert(0);
}
[JPUSHService setupWithOption:_luanchOptions appKey:appkey
channel:channel apsForProduction:[isProduction boolValue] ];
}
#pragma mark-
-(void)stopPush:(CDVInvokedUrlCommand*)command{
[[UIApplication sharedApplication]unregisterForRemoteNotifications];
[[UIApplication sharedApplication]unregisterForRemoteNotifications];
}
-(void)resumePush:(CDVInvokedUrlCommand*)command{
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
//categories nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}
#else
//categories nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
#endif
[JPushPlugin registerForRemoteNotification];
}
+(void)registerForRemoteNotification{
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
#ifndef __IPHONE_8_0
//categories nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
#endif
}
}
-(void)isPushStopped:(CDVInvokedUrlCommand*)command{
NSNumber *result;
if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications ]) {
result=@(0);
}else{
result=@(1);
}
CDVPluginResult * pushResult=[self pluginResultForValue:result];
if (pushResult) {
[self succeedWithPluginResult:pushResult withCallbackID:command.callbackId];
} else {
[self failWithCallbackID:command.callbackId];
}
NSNumber *result;
if ([[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) {
result = @(0);
}else{
result = @(1);
}
[self hanleResultWithValue:result command:command];
}
-(void)initial:(CDVInvokedUrlCommand*)command{
//do nithng,because Cordova plugin use lazy load mode.
//do nithng,because Cordova plugin use lazy load mode.
}
#ifdef __CORDOVA_4_0_0
- (void)pluginInitialize {
NSLog(@"### pluginInitialize ");
[self initNotifications];
NSLog(@"### pluginInitialize ");
[self initNotifications];
}
#else
- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{
NSLog(@"### initWithWebView ");
if (self=[super initWithWebView:theWebView]) {
[self initNotifications];
}
return self;
NSLog(@"### initWithWebView ");
if (self=[super initWithWebView:theWebView]) {
[self initNotifications];
}
return self;
}
#endif
-(void)initNotifications {
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
[defaultCenter addObserver:self
selector:@selector(networkDidReceiveNotification:)
name:kJPushPluginReceiveNotification
object:nil];
if (_luanchOptions) {
NSDictionary *userInfo = [_luanchOptions
valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if ([userInfo count] >0) {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.openNotification',%@)",jsonString]];
});
}
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
[defaultCenter addObserver:self
selector:@selector(networkDidReceiveNotification:)
name:kJPushPluginReceiveNotification
object:nil];
if (_luanchOptions) {
NSDictionary *userInfo = [_luanchOptions
valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if ([userInfo count] >0) {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.openNotification',%@)",jsonString]];
});
}
}
}
}
}
-(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{
NSArray *arguments=command.arguments;
if (!arguments||[arguments count]<2) {
NSLog(@"#### setTagsWithAlias param is less");
return ;
}
NSString *alias=[arguments objectAtIndex:0];
NSArray *arrayTags=[arguments objectAtIndex:1];
NSLog(@"#### setTagsWithAlias alias is %@, tags is %@",alias,arrayTags);
NSSet* set=[NSSet setWithArray:arrayTags];
[JPUSHService setTags:set
alias:alias
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
NSArray *arguments = command.arguments;
NSString *alias;
NSArray *tags;
if (!arguments || [arguments count] < 2) {
NSLog(@"#### setTagsWithAlias param is less");
return ;
}else{
alias = arguments[0];
tags = arguments[1];
}
NSLog(@"#### setTagsWithAlias alias is %@, tags is %@",alias,tags);
[JPUSHService setTags:[NSSet setWithArray:tags]
alias:alias
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
}
-(void)setTags:(CDVInvokedUrlCommand *)command{
NSArray *arguments=[command arguments];
NSString *tags=[arguments objectAtIndex:0];
NSLog(@"#### setTags %@",tags);
NSArray *array=[tags componentsSeparatedByString:@","];
[JPUSHService setTags:[NSSet setWithArray:array]
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
NSArray *tags = command.arguments;
NSLog(@"#### setTags %@",tags);
[JPUSHService setTags:[NSSet setWithArray:tags]
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
}
-(void)setAlias:(CDVInvokedUrlCommand *)command{
NSArray *arguments=[command arguments];
NSLog(@"#### setAlias %@",arguments);
[JPUSHService setAlias:[arguments objectAtIndex:0]
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
NSLog(@"#### setAlias %@",command.arguments);
[JPUSHService setAlias:command.arguments[0]
callbackSelector:@selector(tagsWithAliasCallback:tags:alias:)
object:self];
}
-(void)getRegistrationID:(CDVInvokedUrlCommand*)command{
NSString* registrationID = [JPUSHService registrationID];
NSLog(@"### getRegistrationID %@",registrationID);
CDVPluginResult *result=[self pluginResultForValue:registrationID];
if (result) {
[self succeedWithPluginResult:result withCallbackID:command.callbackId];
} else {
[self failWithCallbackID:command.callbackId];
}
NSString* registrationID = [JPUSHService registrationID];
NSLog(@"### getRegistrationID %@",registrationID);
[self hanleResultWithValue:registrationID command:command];
}
-(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias{
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:resultCode],@"resultCode",
tags==nil?[NSNull null]:[tags allObjects],@"tags",
alias==nil?[NSNull null]:alias,@"alias",nil];
NSMutableDictionary *data = [NSMutableDictionary dictionary];
[data setObject:[NSNumber numberWithInt:resultCode] forKey:@"resultCode"];
[data setObject:tags==nil?[NSNull null]:[tags allObjects] forKey:@"tags"];
[data setObject:alias==nil?[NSNull null]:alias forKey:@"alias"];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%@)",jsonString]];
// [self writeJavascript:[NSString stringWithFormat:@"window.plugins.jPushPlugin.pushCallback('%@')",jsonString]];
});
}
-(void)startLogPageView:(CDVInvokedUrlCommand*)command{
NSArray *arguments=command.arguments;
if (!arguments||[arguments count]<1) {
NSLog(@"startLogPageView argument error");
return ;
}
NSString * pageName=[arguments objectAtIndex:0];
if (pageName) {
[JPUSHService startLogPageView:pageName];
}
NSArray *arguments = command.arguments;
if (!arguments || [arguments count] < 1) {
NSLog(@"startLogPageView argument error");
return ;
}
NSString * pageName = arguments[0];
if (pageName) {
[JPUSHService startLogPageView:pageName];
}
}
-(void)stopLogPageView:(CDVInvokedUrlCommand*)command{
NSArray *arguments=command.arguments;
if (!arguments||[arguments count]<1) {
NSLog(@"stopLogPageView argument error");
return ;
}
NSString * pageName=[arguments objectAtIndex:0];
if (pageName) {
[JPUSHService stopLogPageView:pageName];
}
NSArray *arguments = command.arguments;
if (!arguments || [arguments count] < 1) {
NSLog(@"stopLogPageView argument error");
return ;
}
NSString * pageName = arguments[0];
if (pageName) {
[JPUSHService stopLogPageView:pageName];
}
}
-(void)beginLogPageView:(CDVInvokedUrlCommand*)command{
NSArray *arguments=command.arguments;
if (!arguments||[arguments count]<2) {
NSLog(@"beginLogPageView argument error");
return ;
}
NSString * pageName=[arguments objectAtIndex:0];
int duration=[[arguments objectAtIndex:0]intValue];
if (pageName) {
[JPUSHService beginLogPageView:pageName duration:duration];
}
NSArray *arguments = command.arguments;
if (!arguments || [arguments count] < 2) {
NSLog(@"beginLogPageView argument error");
return ;
}
NSString * pageName = arguments[0];
int duration = [arguments[0] intValue];
if (pageName) {
[JPUSHService beginLogPageView:pageName duration:duration];
}
}
-(void)setBadge:(CDVInvokedUrlCommand*)command{
NSArray *argument=command.arguments;
if ([argument count]<1) {
NSLog(@"setBadge argument error!");
return;
}
NSNumber *badge=[argument objectAtIndex:0];
[JPUSHService setBadge:[badge intValue]];
NSArray *argument = command.arguments;
if ([argument count] < 1) {
NSLog(@"setBadge argument error!");
return;
}
NSNumber *badge = argument[0];
[JPUSHService setBadge:[badge intValue]];
}
-(void)resetBadge:(CDVInvokedUrlCommand*)command{
[JPUSHService resetBadge];
[JPUSHService resetBadge];
}
-(void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command{
//
NSArray *argument=command.arguments;
if ([argument count]<1) {
NSLog(@"setBadge argument error!");
return;
}
NSNumber *badge=[argument objectAtIndex:0];
[UIApplication sharedApplication].applicationIconBadgeNumber=[badge intValue];
//
NSArray *argument = command.arguments;
if ([argument count] < 1) {
NSLog(@"setBadge argument error!");
return;
}
NSNumber *badge = [argument objectAtIndex:0];
[UIApplication sharedApplication].applicationIconBadgeNumber = [badge intValue];
}
-(void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command {
NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:num];
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
NSInteger num = [UIApplication sharedApplication].applicationIconBadgeNumber;
NSNumber *number = [NSNumber numberWithInteger:num];
[self hanleResultWithValue:number command:command];
}
-(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command{
[JPUSHService setDebugMode];
[JPUSHService setDebugMode];
}
-(void)setLogOFF:(CDVInvokedUrlCommand*)command{
[JPUSHService setLogOFF];
[JPUSHService setLogOFF];
}
- (void)failWithCallbackID:(NSString *)callbackID {
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
[self.commandDelegate sendPluginResult:result callbackId:callbackID];
-(void)crashLogON:(CDVInvokedUrlCommand*)command{
[JPUSHService crashLogON];
}
- (void)succeedWithPluginResult:(CDVPluginResult *)result withCallbackID:(NSString *)callbackID {
[self.commandDelegate sendPluginResult:result callbackId:callbackID];
-(void)setLocalNotification:(CDVInvokedUrlCommand*)command{
NSArray *arguments = command.arguments;
NSDate *date = arguments[0] == [NSNull null] ? nil : [NSDate dateWithTimeIntervalSinceNow:[((NSString*)arguments[0]) intValue]];
NSString *alertBody = arguments[1] == [NSNull null] ? nil : (NSString*)arguments[1];
int badge = arguments[2] == [NSNull null] ? 0 : [(NSString*)arguments[2] intValue];
NSString *idKey = arguments[3] == [NSNull null] ? nil : (NSString*)arguments[3];
NSDictionary *dict = arguments[4] == [NSNull null] ? nil : (NSDictionary*)arguments[4];
[JPUSHService setLocalNotification:date alertBody:alertBody badge:badge alertAction:nil identifierKey:idKey userInfo:dict soundName:nil];
}
-(void)deleteLocalNotificationWithIdentifierKey:(CDVInvokedUrlCommand*)command{
[JPUSHService deleteLocalNotificationWithIdentifierKey:(NSString*)command.arguments[0]];
}
-(void)clearAllLocalNotifications:(CDVInvokedUrlCommand*)command{
[JPUSHService clearAllLocalNotifications];
}
-(void)setLocation:(CDVInvokedUrlCommand*)command{
[JPUSHService setLatitude:[((NSString*)command.arguments[0]) doubleValue] longitude:[((NSString*)command.arguments[1]) doubleValue]];
}
- (CDVPluginResult *)pluginResultForValue:(id)value {
CDVPluginResult *result;
if ([value isKindOfClass:[NSString class]]) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsString:[value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
} else if ([value isKindOfClass:[NSNumber class]]) {
CFNumberType numberType = CFNumberGetType((CFNumberRef)value);
//note: underlyingly, BOOL values are typedefed as char
if (numberType == kCFNumberIntType || numberType == kCFNumberCharType) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:[value intValue]];
} else {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:[value doubleValue]];
#pragma mark-
+(void)setLaunchOptions:(NSDictionary *)theLaunchOptions{
_luanchOptions = theLaunchOptions;
[JPUSHService setDebugMode];
[JPushPlugin registerForRemoteNotification];
//read appkey and channel from PushConfig.plist
NSString *plistPath = [[NSBundle mainBundle] pathForResource:JPushConfigFileName ofType:@"plist"];
if (plistPath == nil) {
NSLog(@"error: PushConfig.plist not found");
assert(0);
}
} else if ([value isKindOfClass:[NSArray class]]) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:value];
} else if ([value isKindOfClass:[NSDictionary class]]) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:value];
} else if ([value isKindOfClass:[NSNull class]]) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
} else {
NSLog(@"Cordova callback block returned unrecognized type: %@", NSStringFromClass([value class]));
return nil;
}
return result;
NSMutableDictionary *plistData = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
NSString * appkey = [plistData valueForKey:JM_APP_KEY];
NSString * channel = [plistData valueForKey:JM_APP_CHANNEL];
NSNumber * isProduction = [plistData valueForKey:JM_APP_ISPRODUCTION];
if (!appkey || appkey.length == 0) {
NSLog(@"error: app key not found in PushConfig.plist ");
assert(0);
}
[JPUSHService setupWithOption:_luanchOptions appKey:appkey
channel:channel apsForProduction:[isProduction boolValue] ];
}
#pragma mark js
-(void)hanleResultWithValue:(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{
NSDictionary *dict = @{@"resultCode":[NSNumber numberWithInt:resultCode],
@"tags" :tags == nil ? [NSNull null] : [tags allObjects],
@"alias" :alias == nil ? [NSNull null] : alias
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%@)",jsonString]];
});
}
- (void)networkDidReceiveMessage:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
//NSLog(@"%@",userInfo);
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
//NSLog(@"%@",jsonString);
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.receiveMessage',%@)",jsonString]];
[self.commandDelegate evalJs:[NSString stringWithFormat:@"window.plugins.jPushPlugin.receiveMessageIniOSCallback('%@')",jsonString]];
});
if (notification) {
NSDictionary *userInfo = [notification userInfo];
//NSLog(@"%@",userInfo);
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
//NSLog(@"%@",jsonString);
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.receiveMessage',%@)",jsonString]];
[self.commandDelegate evalJs:[NSString stringWithFormat:@"window.plugins.jPushPlugin.receiveMessageIniOSCallback('%@')",jsonString]];
});
}
}
-(void)networkDidReceiveNotification:(id)notification{
NSError *error;
NSDictionary *userInfo = [notification object];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
switch ([UIApplication sharedApplication].applicationState) {
case UIApplicationStateActive:
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.receiveNotification',%@)",jsonString]];
});
NSError *error;
NSDictionary *userInfo = [notification object];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error];
NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%ld",(long)[UIApplication sharedApplication].applicationState);
switch ([UIApplication sharedApplication].applicationState) {
case UIApplicationStateActive:
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.receiveNotification',%@)",jsonString]];
});
}
break;
case UIApplicationStateInactive:
case UIApplicationStateBackground:
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.openNotification',%@)",jsonString]];
});
}
break;
default:
//do nothing
break;
}
break;
case UIApplicationStateInactive:
case UIApplicationStateBackground:
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.openNotification',%@)",jsonString]];
});
}
break;
default:
//do nothing
break;
}
}
@end

@ -5,156 +5,192 @@ var JPushPlugin = function(){
//private plugin function
JPushPlugin.prototype.receiveMessage={}
JPushPlugin.prototype.openNotification={}
JPushPlugin.prototype.receiveNotification={}
JPushPlugin.prototype.receiveMessage = {}
JPushPlugin.prototype.openNotification = {}
JPushPlugin.prototype.receiveNotification = {}
JPushPlugin.prototype.isPlatformIOS = function(){
return device.platform == "iPhone" || device.platform == "iPad" || device.platform == "iPod touch" || device.platform == "iOS"
JPushPlugin.prototype.isPlatformIOS = function() {
var isPlatformIOS = device.platform == "iPhone"
|| device.platform == "iPad"
|| device.platform == "iPod touch"
|| device.platform == "iOS";
return isPlatformIOS;
}
JPushPlugin.prototype.error_callback = function(msg){
console.log("Javascript Callback Error: " + msg)
JPushPlugin.prototype.error_callback = function(msg) {
console.log("Javascript Callback Error: " + msg);
}
JPushPlugin.prototype.call_native = function(name, args, callback){
ret = cordova.exec(callback,this.error_callback,'JPushPlugin',name,args);
JPushPlugin.prototype.call_native = function(name, args, callback) {
ret = cordova.exec(callback, this.error_callback, 'JPushPlugin', name, args);
return ret;
}
//public plugin function
JPushPlugin.prototype.startLogPageView = function(pageName){
if(this.isPlatformIOS()){
this.call_native( "startLogPageView",[pageName],null);
}
JPushPlugin.prototype.startLogPageView = function(pageName) {
if(this.isPlatformIOS()) {
this.call_native("startLogPageView", [pageName], null);
}
}
JPushPlugin.prototype.stopLogPageView = function(pageName){
if(this.isPlatformIOS()){
this.call_native( "stopLogPageView",[pageName],null);
JPushPlugin.prototype.stopLogPageView = function(pageName) {
if(this.isPlatformIOS()) {
this.call_native("stopLogPageView", [pageName], null);
}
}
JPushPlugin.prototype.beginLogPageView = function(pageName,duration){
if(this.isPlatformIOS()){
this.call_native( "beginLogPageView",[pageName,duration],null);
JPushPlugin.prototype.beginLogPageView = function(pageName, duration) {
if(this.isPlatformIOS()) {
this.call_native("beginLogPageView", [pageName, duration], null);
}
}
JPushPlugin.prototype.setApplicationIconBadgeNumber = function(badge){
if(this.isPlatformIOS()){
this.call_native( "setApplicationIconBadgeNumber",[badge],null);
}
}
JPushPlugin.prototype.getApplicationIconBadgeNumber = function(callback){
if(this.isPlatformIOS()){
this.call_native( "getApplicationIconBadgeNumber",[],callback);
}
}
JPushPlugin.prototype.setTagsWithAlias = function(tags,alias){
try{
if(tags==null){
this.setAlias(alias);
return;
}
if(alias==null){
this.setTags(tags);
JPushPlugin.prototype.setApplicationIconBadgeNumber = function(badge) {
if(this.isPlatformIOS()) {
this.call_native("setApplicationIconBadgeNumber", [badge], null);
}
}
JPushPlugin.prototype.getApplicationIconBadgeNumber = function(callback) {
if(this.isPlatformIOS()) {
this.call_native("getApplicationIconBadgeNumber", [], callback);
}
}
JPushPlugin.prototype.setTagsWithAlias = function(tags, alias) {
try {
if(tags == null) {
this.setAlias(alias);
return;
}
if(alias == null) {
this.setTags(tags);
return;
}
var arrayTagWithAlias=[tags];
var arrayTagWithAlias = [tags];
arrayTagWithAlias.unshift(alias);
this.call_native( "setTagsWithAlias", arrayTagWithAlias,null);
}
catch(exception){
this.call_native("setTagsWithAlias", arrayTagWithAlias, null);
} catch(exception) {
console.log(exception);
}
}
JPushPlugin.prototype.setTags = function(tags){
try{
this.call_native("setTags",tags,null);
}
catch(exception){
JPushPlugin.prototype.setTags = function(tags) {
try {
this.call_native("setTags", tags, null);
} catch(exception) {
console.log(exception);
}
}
JPushPlugin.prototype.setAlias = function(alias){
try{
this.call_native("setAlias",[alias],null);
}
catch(exception){
console.log(exception);
}
}
JPushPlugin.prototype.getRegistrationID = function(callback){
try{
var data=[];
this.call_native("getRegistrationID",[data],callback);
}
catch(exception){
JPushPlugin.prototype.setAlias = function(alias) {
try {
this.call_native("setAlias", [alias], null);
} catch(exception) {
console.log(exception);
}
}
JPushPlugin.prototype.setBadge = function(value){
if(this.isPlatformIOS()){
try{
this.call_native("setBadge",[value],null);
}
catch(exception){
console.log(exception);
}
}
JPushPlugin.prototype.getRegistrationID = function(callback) {
try {
var data = [];
this.call_native("getRegistrationID", [data], callback);
} catch(exception) {
console.log(exception);
}
}
JPushPlugin.prototype.resetBadge = function(){
if(this.isPlatformIOS()){
try{
var data=[];
this.call_native("resetBadge",[data],null);
}
catch(exception){
console.log(exception);
}
JPushPlugin.prototype.setBadge = function(value) {
if(this.isPlatformIOS()) {
try {
this.call_native("setBadge", [value], null);
} catch(exception) {
console.log(exception);
}
}
}
JPushPlugin.prototype.resetBadge = function() {
if(this.isPlatformIOS()) {
try {
var data = [];
this.call_native("resetBadge", [data], null);
} catch(exception) {
console.log(exception);
}
}
}
JPushPlugin.prototype.setDebugModeFromIos = function() {
if(this.isPlatformIOS()) {
var data = [];
this.call_native("setDebugModeFromIos", [data], null);
}
}
JPushPlugin.prototype.setLogOFF = function() {
if(this.isPlatformIOS()) {
var data = [];
this.call_native("setLogOFF", [data], null);
}
}
JPushPlugin.prototype.setCrashLogON = function() {
if (this.isPlatformIOS()) {
var data = [];
this.call_native("crashLogON", [data], null);
}
}
JPushPlugin.prototype.setDebugModeFromIos = function(){
if(this.isPlatformIOS()){
var data=[];
this.call_native("setDebugModeFromIos",[data],null);
}
JPushPlugin.prototype.addLocalNotificationForIOS = function(delayTime, content,
badge, notificationID, extras) {
if (this.isPlatformIOS()) {
var data = [delayTime, content, badge, notificationID, extras];
this.call_native("setLocalNotification", data, null);
}
}
JPushPlugin.prototype.setLogOFF = function(){
if(this.isPlatformIOS()){
var data=[];
this.call_native("setLogOFF",[data],null);
}
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function(
identifierKey) {
if (this.isPlatformIOS()) {
var data = [identifierKey];
this.call_native("deleteLocalNotificationWithIdentifierKey", data, null);
}
}
JPushPlugin.prototype.receiveMessageIniOSCallback = function(data){
try{
console.log("JPushPlugin:receiveMessageIniOSCallback--data:"+data);
JPushPlugin.prototype.clearAllLocalNotifications = function(){
if (this.isPlatformIOS()) {
var data = [];
this.call_native("clearAllLocalNotifications", data, null);
}
}
JPushPlugin.prototype.setLocation = function(latitude, longitude){
if (this.isPlatformIOS()) {
var data = [latitude, longitude];
this.call_native("setLocation", data, null);
}
}
JPushPlugin.prototype.receiveMessageIniOSCallback = function(data) {
try {
console.log("JPushPlugin:receiveMessageIniOSCallback--data:" + data);
var bToObj = JSON.parse(data);
var content = bToObj.content;
console.log(content);
}
catch(exception){
console.log("JPushPlugin:receiveMessageIniOSCallback"+exception);
console.log(content);
} catch(exception) {
console.log("JPushPlugin:receiveMessageIniOSCallback" + exception);
}
}
JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data){
try{
JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
try {
console.log("JPushPlugin:receiveMessageInAndroidCallback");
var bToObj = JSON.parse(data);
this.receiveMessage=bToObj
cordova.fireDocumentEvent('jpush.receiveMessage',null);
var bToObj = JSON.parse(data);
this.receiveMessage = bToObj
cordova.fireDocumentEvent('jpush.receiveMessage', null);
//console.log(data);
//var message = bToObj.message;
//var extras = bToObj.extras;
@ -163,20 +199,18 @@ JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data){
//console.log(extras['cn.jpush.android.MSG_ID']);
//console.log(extras['cn.jpush.android.CONTENT_TYPE']);
//console.log(extras['cn.jpush.android.EXTRA']);
}
catch(exception){
console.log("JPushPlugin:pushCallback "+exception);
} catch(exception) {
console.log("JPushPlugin:pushCallback " + exception);
}
}
//
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data){
try{
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
try {
console.log("JPushPlugin:openNotificationInAndroidCallback");
var bToObj = JSON.parse(data);
this.openNotification=bToObj;
cordova.fireDocumentEvent('jpush.openNotification',null);
var bToObj = JSON.parse(data);
this.openNotification = bToObj;
cordova.fireDocumentEvent('jpush.openNotification', null);
//console.log(data);
//var bToObj = JSON.parse(data);
//var alert = bToObj.alert;
@ -190,18 +224,18 @@ JPushPlugin.prototype.openNotificationInAndroidCallback = function(data){
//console.log(extras['cn.jpush.android.PUSH_ID']);
//console.log(extras['cn.jpush.android.NOTIFICATION_ID']);
//console.log("JPushPlugin:openNotificationCallback is ready");
}
catch(exception){
} catch(exception) {
console.log(exception);
}
}
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data){
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data) {
try{
console.log("JPushPlugin:receiveNotificationInAndroidCallback");
var bToObj = JSON.parse(data);
this.receiveNotification=bToObj;
cordova.fireDocumentEvent('jpush.receiveNotification',null);
var bToObj = JSON.parse(data);
this.receiveNotification = bToObj;
cordova.fireDocumentEvent('jpush.receiveNotification', null);
//console.log(data);
//var bToObj = JSON.parse(data);
//var alert = bToObj.alert;
@ -215,124 +249,130 @@ JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data){
//console.log(extras['cn.jpush.android.PUSH_ID']);
//console.log(extras['cn.jpush.android.NOTIFICATION_ID']);
//console.log("JPushPlugin:openNotificationCallback is ready");
}
catch(exception){
} catch(exception) {
console.log(exception);
}
}
//android single
JPushPlugin.prototype.setBasicPushNotificationBuilder = function(){
JPushPlugin.prototype.setBasicPushNotificationBuilder = function() {
if(device.platform == "Android") {
data=[]
this.call_native("setBasicPushNotificationBuilder",data,null);
data = [];
this.call_native("setBasicPushNotificationBuilder", data, null);
}
}
JPushPlugin.prototype.setCustomPushNotificationBuilder = function(){
JPushPlugin.prototype.setCustomPushNotificationBuilder = function() {
if(device.platform == "Android") {
data=[];
this.call_native("setCustomPushNotificationBuilder",data,null);
data = [];
this.call_native("setCustomPushNotificationBuilder", data, null);
}
}
JPushPlugin.prototype.stopPush = function(){
data=[];
this.call_native("stopPush",data,null);
JPushPlugin.prototype.stopPush = function() {
data = [];
this.call_native("stopPush", data, null);
}
JPushPlugin.prototype.resumePush = function(){
data=[]
this.call_native("resumePush",data,null);
JPushPlugin.prototype.resumePush = function() {
data = [];
this.call_native("resumePush", data, null);
}
JPushPlugin.prototype.setDebugMode = function(mode){
JPushPlugin.prototype.setDebugMode = function(mode) {
if(device.platform == "Android") {
this.call_native("setDebugMode",[mode],null);
this.call_native("setDebugMode", [mode], null);
}
}
//setDebugMode
JPushPlugin.prototype.clearAllNotification = function(){
JPushPlugin.prototype.clearAllNotification = function() {
if(device.platform == "Android") {
data=[]
this.call_native("clearAllNotification",data,null);
data = [];
this.call_native("clearAllNotification", data, null);
}
}
JPushPlugin.prototype.clearNotificationById = function(notificationId){
if(device.platform == "Android") {
data=[]
this.call_native("clearNotificationById",[notificationId],null);
}
}
JPushPlugin.prototype.setLatestNotificationNum = function(num){
if(device.platform == "Android") {
this.call_native("setLatestNotificationNum",[num],null);
JPushPlugin.prototype.clearNotificationById = function(notificationId) {
if(device.platform == "Android") {
data = [];
this.call_native("clearNotificationById", [notificationId], null);
}
}
JPushPlugin.prototype.isPushStopped = function(callback){
data=[];
this.call_native("isPushStopped",data,callback)
}
JPushPlugin.prototype.init = function(){
if(this.isPlatformIOS()){
var data=[];
this.call_native("initial",data,null);
}else{
data=[];
this.call_native("init",data,null);
}
}
JPushPlugin.prototype.setDebugMode = function(mode){
JPushPlugin.prototype.setLatestNotificationNum = function(num) {
if(device.platform == "Android") {
this.call_native("setDebugMode",[mode],null);
}
}
JPushPlugin.prototype.addLocalNotification = function(builderId,content,title,notificaitonID,broadcastTime,extras){
if(device.platform == "Android") {
data=[builderId,content,title,notificaitonID,broadcastTime,extras];
this.call_native("addLocalNotification",data,null);
}
}
JPushPlugin.prototype.removeLocalNotification = function(notificationID){
if(device.platform == "Android") {
this.call_native("removeLocalNotification",[notificationID],null);
}
}
JPushPlugin.prototype.clearLocalNotifications = function(){
if(device.platform == "Android") {
data=[]
this.call_native("clearLocalNotifications",data,null);
this.call_native("setLatestNotificationNum", [num], null);
}
}
JPushPlugin.prototype.reportNotificationOpened = function(msgID){
JPushPlugin.prototype.isPushStopped = function(callback) {
data = [];
this.call_native("isPushStopped", data, callback);
}
JPushPlugin.prototype.init = function() {
if(this.isPlatformIOS()) {
var data = [];
this.call_native("initial", data, null);
} else {
data = [];
this.call_native("init", data, null);
}
}
JPushPlugin.prototype.setDebugMode = function(mode) {
if(device.platform == "Android") {
this.call_native("reportNotificationOpened",[msgID],null);
this.call_native("setDebugMode", [mode], null);
}
}
JPushPlugin.prototype.addLocalNotification = function(builderId, content, title,
notificaitonID, broadcastTime, extras) {
if(device.platform == "Android") {
data = [builderId, content, title, notificaitonID, broadcastTime, extras];
this.call_native("addLocalNotification", data, null);
}
}
JPushPlugin.prototype.removeLocalNotification = function(notificationID) {
if(device.platform == "Android") {
this.call_native("removeLocalNotification", [notificationID], null);
}
}
JPushPlugin.prototype.clearLocalNotifications = function() {
if(device.platform == "Android") {
data = [];
this.call_native("clearLocalNotifications", data, null);
}
}
JPushPlugin.prototype.reportNotificationOpened = function(msgID) {
if(device.platform == "Android") {
this.call_native("reportNotificationOpened", [msgID], null);
}
}
/**
*是否开启统计分析功能用于用户使用时长活跃用户用户打开次数的统计并上报到服务器上
* Portal 上展示给开发者
**/
JPushPlugin.prototype.setStatisticsOpen = function(mode) {
if(device.platform == "Android") {
this.call_native("setStatisticsOpen", [mode], null);
}
}
//iOS single
if(!window.plugins){
if(!window.plugins) {
window.plugins = {};
}
if(!window.plugins.jPushPlugin){
if(!window.plugins.jPushPlugin) {
window.plugins.jPushPlugin = new JPushPlugin();
}
module.exports = new JPushPlugin();
}
module.exports = new JPushPlugin();