<commit_before>import {
  DeviceEventEmitter,
  NativeModules,
  Platform
} from 'react-native'

const JPushModule = NativeModules.JPushModule

const listeners = {}
const ConnectEvent            = 'ConnectEvent'            //连接状态
const NotificationEvent       = 'NotificationEvent'       //通知事件
const CustomMessageEvent      = 'CustomMessageEvent'      //自定义消息事件
const LocalNotificationEvent  = 'LocalNotificationEvent'  //本地通知事件 todo
const TagAliasEvent           = 'TagAliasEvent'           //TagAlias事件
const MobileNumberEvent       = 'MobileNumberEvent'       //电话号码事件

export default class JPush {

  /*
  * 设置调试模式，默认关闭状态
  *
  * 该接口需在 init 接口之前调用，避免出现部分日志没打印的情况
  * @param params = {"debug":boolean}
  * */
  static setLoggerEnable(params) {
    JPushModule.setDebugMode(params)
  }

  /*
  * 初始化推送服务
  * 
  * 请在componentDidMount()调用init，否则会影响通知点击事件的回调
  * */
  static init() {
    if (Platform.OS == "android") {
      JPushModule.init()
    }
  }

  /*
  * 获取 RegistrationID
  *
  * 调用此 API 来取得应用程序对应的 RegistrationID。
  * 只有当应用程序成功注册到 JPush 的服务器时才返回对应的值，否则返回空字符串
  *
  * @param {Fucntion} callback = (result) => {"registerID":String}
  * */
  static getRegistrationID(callback) {
    if (Platform.OS == "android") {
      JPushModule.getRegistrationID(callback)
    } else {
      JPushModule.getRegisterId(callback)
    }
  }

  /*
  * 新增标签
  *
  * 这个接口是增加逻辑，而不是覆盖逻辑
  *
  * @param params = {"sequence":int,"tags":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static addTags(params) {
    if (Platform.OS == "android") {
      JPushModule.addTags(params)
    } else {
      JPushModule.addTags(params)
    }
  }

  /*
  * 覆盖标签
  *
  * 需要理解的是，这个接口是覆盖逻辑，而不是增量逻辑。即新的调用会覆盖之前的设置
  *
  * @param params = {"sequence":int,"tags":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static updateTags(params) {
    if (Platform.OS == "android") {
      JPushModule.setTags(params)
    } else {
      JPushModule.setTags(params)
    }
  }

  /*
  * 删除指定标签
  *
  * @param params = {"sequence":int,"tag":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static deleteTag(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteTags(params)
    } else {
      JPushModule.deleteTags(params)
    }
  }

  /*
  * 清除所有标签
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static deleteTags(params) {
    if (Platform.OS == "android") {
      JPushModule.cleanTags(params)
    } else {
      JPushModule.cleanTags(params)
    }
  }

  /*
  * 查询指定 tag 与当前用户绑定的状态
  *
  * @param params = {"sequence":int,"tag":String}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static queryTag(params) {
    if (Platform.OS == "android") {
      JPushModule.checkTagBindState(params)
    } else {
      JPushModule.validTag(params)
    }
  }

  /*
  * 查询所有标签
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static queryTags(params) {
    if (Platform.OS == "android") {
      JPushModule.getAllTags(params)
    } else {
      JPushModule.getAllTags(params)
    }
  }

  /*
  * 设置别名
  * 需要理解的是，这个接口是覆盖逻辑，而不是增量逻辑。即新的调用会覆盖之前的设置
  *
  * @param params = {"sequence":int,"alias":String}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * alias:
  * 每次调用设置有效的别名，覆盖之前的设置
  * 有效的别名组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：alias 命名长度限制为 40 字节。（判断长度需采用 UTF-8 编码）
  * */
  static setAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.setAlias(params)
    } else {
      JPushModule.setAlias(params)
    }
  }

  /*
  * 删除别名
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static deleteAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteAlias(params)
    } else {
      JPushModule.deleteAlias(params)
    }
  }

  /*
  * 查询别名
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static queryAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.getAlias(params)
    } else {
      JPushModule.getAlias(params)
    }
  }

  //***************************************统计***************************************

  /*
  * 设置手机号码。该接口会控制调用频率，频率为 10s 之内最多 3 次
  *
  * @param params = {"sequence":int,"mobileNumber":String}
  *
  * sequence:请求时传入的序列号，会在回调时原样返回
  * */
  static setMobileNumber(params) {
    if (Platform.OS == "android") {
      JPushModule.setMobileNumber(params)
    } else {
      JPushModule.setMobileNumber(params)
    }
  }

  /*
  * 开启 CrashLog 上报
  * */
  static initCrashHandler() {
    if (Platform.OS == "android") {
      JPushModule.initCrashHandler()
    } else {
      JPushModule.crashLogON(null)
    }
  }

  //***************************************本地通知 todo***************************************

  /*
  * 添加一个本地通知
  * */
  static addLocalNotification(params) {
    if (Platform.OS == "android") {
      JPushModule.addLocalNotification(params)
    } else {
      JPushModule.addNotification(null)
    }
  }

  /*
  * 移除指定的本地通知
  * */
  static removeLocalNotification(params) {
    if (Platform.OS == "android") {
      JPushModule.removeLocalNotification(params)
    } else {

    }
  }

  /*
  * 移除所有的本地通知
  * 注意notificationId为0或者负数时通知无法移除
  * */
  static clearLocalNotifications() {
    if (Platform.OS == "android") {
      JPushModule.clearLocalNotifications()
    } else {

    }
  }

  //***************************************地理围栏***************************************

  /*
  * 设置最多允许保存的地理围栏数量，超过最大限制后，如果继续创建先删除最早创建的地理围栏。
  * 默认数量为10个，允许设置最小1个，最大100个。
  * */
  static setMaxGeofenceNumber(params) {
    if (Platform.OS == "android") {
      JPushModule.setMaxGeofenceNumber(params)
    } else {
      JPushModule.setGeofenecMaxCount(params)
    }
  }

  /*
  * 删除指定id的地理围栏
  * */
  static deleteGeofence(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteGeofence(params)
    } else {
      JPushModule.removeGeofenceWithIdentifier(params)
    }
  }

  //***************************************接口回调***************************************

  //连接状态
  static addConnectEventListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      ConnectEvent, result => {
        callback(result)
      })
  }

  /*
  * 通知事件
  *
  * @param {Fucntion} callback = (result) => {"messageID":int,"title":int，"content":StringArray,"extras":{String:String}},"notificationType":String}
  *
  * messageID:
  *
  * title:
  *
  * content:
  *
  * extras:
  *
  * notificationType：分为notificationArrived和notificationOpened两种
  *
  * */
  static addNotificationListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      NotificationEvent, result => {
        callback(result)
      })
  }

  /*
  * 自定义消息事件
  *
  * @param {Fucntion} callback = (result) => {"messageID":int，"content":StringArray,"extras":{String:String}}}
  *
  * messageID:
  *
  * content:
  *
  * extras:
  *
  * */
  static addCustomMessagegListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      CustomMessageEvent, result => {
        callback(result)
      })
  }<commit_msg>更新通知事件说明<commit_after>import {
  DeviceEventEmitter,
  NativeModules,
  Platform
} from 'react-native'

const JPushModule = NativeModules.JPushModule

const listeners = {}
const ConnectEvent            = 'ConnectEvent'            //连接状态
const NotificationEvent       = 'NotificationEvent'       //通知事件
const CustomMessageEvent      = 'CustomMessageEvent'      //自定义消息事件
const LocalNotificationEvent  = 'LocalNotificationEvent'  //本地通知事件 todo
const TagAliasEvent           = 'TagAliasEvent'           //TagAlias事件
const MobileNumberEvent       = 'MobileNumberEvent'       //电话号码事件

export default class JPush {

  /*
  * 设置调试模式，默认关闭状态
  *
  * 该接口需在 init 接口之前调用，避免出现部分日志没打印的情况
  * @param params = {"debug":boolean}
  * */
  static setLoggerEnable(params) {
    JPushModule.setDebugMode(params)
  }

  /*
  * 初始化推送服务
  * 
  * 请在componentDidMount()调用init，否则会影响通知点击事件的回调
  * */
  static init() {
    if (Platform.OS == "android") {
      JPushModule.init()
    }
  }

  /*
  * 获取 RegistrationID
  *
  * 调用此 API 来取得应用程序对应的 RegistrationID。
  * 只有当应用程序成功注册到 JPush 的服务器时才返回对应的值，否则返回空字符串
  *
  * @param {Fucntion} callback = (result) => {"registerID":String}
  * */
  static getRegistrationID(callback) {
    if (Platform.OS == "android") {
      JPushModule.getRegistrationID(callback)
    } else {
      JPushModule.getRegisterId(callback)
    }
  }

  /*
  * 新增标签
  *
  * 这个接口是增加逻辑，而不是覆盖逻辑
  *
  * @param params = {"sequence":int,"tags":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static addTags(params) {
    if (Platform.OS == "android") {
      JPushModule.addTags(params)
    } else {
      JPushModule.addTags(params)
    }
  }

  /*
  * 覆盖标签
  *
  * 需要理解的是，这个接口是覆盖逻辑，而不是增量逻辑。即新的调用会覆盖之前的设置
  *
  * @param params = {"sequence":int,"tags":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static updateTags(params) {
    if (Platform.OS == "android") {
      JPushModule.setTags(params)
    } else {
      JPushModule.setTags(params)
    }
  }

  /*
  * 删除指定标签
  *
  * @param params = {"sequence":int,"tag":StringArray}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static deleteTag(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteTags(params)
    } else {
      JPushModule.deleteTags(params)
    }
  }

  /*
  * 清除所有标签
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static deleteTags(params) {
    if (Platform.OS == "android") {
      JPushModule.cleanTags(params)
    } else {
      JPushModule.cleanTags(params)
    }
  }

  /*
  * 查询指定 tag 与当前用户绑定的状态
  *
  * @param params = {"sequence":int,"tag":String}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * tag:
  * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 1000 个 tag，且单次操作总长度不得超过 5000 字节
  *（判断长度需采用 UTF-8 编码）单个设备最多支持设置 1000 个 tag。App 全局 tag 数量无限制
  * */
  static queryTag(params) {
    if (Platform.OS == "android") {
      JPushModule.checkTagBindState(params)
    } else {
      JPushModule.validTag(params)
    }
  }

  /*
  * 查询所有标签
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static queryTags(params) {
    if (Platform.OS == "android") {
      JPushModule.getAllTags(params)
    } else {
      JPushModule.getAllTags(params)
    }
  }

  /*
  * 设置别名
  * 需要理解的是，这个接口是覆盖逻辑，而不是增量逻辑。即新的调用会覆盖之前的设置
  *
  * @param params = {"sequence":int,"alias":String}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * alias:
  * 每次调用设置有效的别名，覆盖之前的设置
  * 有效的别名组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
  * 限制：alias 命名长度限制为 40 字节。（判断长度需采用 UTF-8 编码）
  * */
  static setAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.setAlias(params)
    } else {
      JPushModule.setAlias(params)
    }
  }

  /*
  * 删除别名
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static deleteAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteAlias(params)
    } else {
      JPushModule.deleteAlias(params)
    }
  }

  /*
  * 查询别名
  *
  * @param params = {"sequence":int}
  *
  * sequence:
  * 请求时传入的序列号，会在回调时原样返回
  * */
  static queryAlias(params) {
    if (Platform.OS == "android") {
      JPushModule.getAlias(params)
    } else {
      JPushModule.getAlias(params)
    }
  }

  //***************************************统计***************************************

  /*
  * 设置手机号码。该接口会控制调用频率，频率为 10s 之内最多 3 次
  *
  * @param params = {"sequence":int,"mobileNumber":String}
  *
  * sequence:请求时传入的序列号，会在回调时原样返回
  * */
  static setMobileNumber(params) {
    if (Platform.OS == "android") {
      JPushModule.setMobileNumber(params)
    } else {
      JPushModule.setMobileNumber(params)
    }
  }

  /*
  * 开启 CrashLog 上报
  * */
  static initCrashHandler() {
    if (Platform.OS == "android") {
      JPushModule.initCrashHandler()
    } else {
      JPushModule.crashLogON(null)
    }
  }

  //***************************************本地通知 todo***************************************

  /*
  * 添加一个本地通知
  * */
  static addLocalNotification(params) {
    if (Platform.OS == "android") {
      JPushModule.addLocalNotification(params)
    } else {
      JPushModule.addNotification(null)
    }
  }

  /*
  * 移除指定的本地通知
  * */
  static removeLocalNotification(params) {
    if (Platform.OS == "android") {
      JPushModule.removeLocalNotification(params)
    } else {

    }
  }

  /*
  * 移除所有的本地通知
  * 注意notificationId为0或者负数时通知无法移除
  * */
  static clearLocalNotifications() {
    if (Platform.OS == "android") {
      JPushModule.clearLocalNotifications()
    } else {

    }
  }

  //***************************************地理围栏***************************************

  /*
  * 设置最多允许保存的地理围栏数量，超过最大限制后，如果继续创建先删除最早创建的地理围栏。
  * 默认数量为10个，允许设置最小1个，最大100个。
  * */
  static setMaxGeofenceNumber(params) {
    if (Platform.OS == "android") {
      JPushModule.setMaxGeofenceNumber(params)
    } else {
      JPushModule.setGeofenecMaxCount(params)
    }
  }

  /*
  * 删除指定id的地理围栏
  * */
  static deleteGeofence(params) {
    if (Platform.OS == "android") {
      JPushModule.deleteGeofence(params)
    } else {
      JPushModule.removeGeofenceWithIdentifier(params)
    }
  }

  //***************************************接口回调***************************************

  //连接状态
  static addConnectEventListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      ConnectEvent, result => {
        callback(result)
      })
  }

  /*
  * 通知事件
  *
  * @param {Fucntion} callback = (result) => {"messageID":int,"title":int，"content":StringArray,"extras":{String:String}},"notificationType":String}
  *
  * messageID:唯一标识通知消息的 ID
  *
  * title:对应 Portal 推送通知界面上的“通知标题”字段
  *
  * content:对应 Portal 推送通知界面上的“通知内容”字段
  *
  * extras:对应 Portal 推送消息界面上的“可选设置”里的附加字段
  *
  * notificationType：分为notificationArrived和notificationOpened两种
  *
  * 注意：应用在存活状态下点击通知不会有跳转行为，应用在被杀死状态下点击通知会启动应用
  *
  * */
  static addNotificationListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      NotificationEvent, result => {
        callback(result)
      })
  }

  /*
  * 自定义消息事件
  *
  * @param {Fucntion} callback = (result) => {"messageID":int，"content":StringArray,"extras":{String:String}}}
  *
  * messageID:唯一标识自定义消息的 ID
  *
  * content:对应 Portal 推送消息界面上的“自定义消息内容”字段
  *
  * extras:对应 Portal 推送消息界面上的“可选设置”里的附加字段
  *
  * */
  static addCustomMessagegListener(callback) {
    listeners[callback] = DeviceEventEmitter.addListener(
      CustomMessageEvent, result => {
        callback(result)
      })
  }
{'fraction_non_alphanumeric': 0.1736613603473227, 'fraction_numerical': 0.009186434279242433, 'mean_word_length': 3.0401626842907983, 'pattern_counts': {'":': 52, '<': 3, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5761645', 'n_tokens_mistral': 7332, 'n_tokens_neox': 7713, 'n_words': 861}