Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

jpush-phonegap-plugin

Package Overview
Dependencies
Maintainers
1
Versions
80
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jpush-phonegap-plugin - npm Package Compare versions

Comparing version 2.2.4 to 2.2.5

6

doc/Common_detail_api.md

@@ -229,3 +229,3 @@ # 通用 API 说明

if(device.platform == "Android") {
alertContent = window.plugins.jPushPlugin.openNotification.alert;
alertContent = event.alert;
} else {

@@ -284,3 +284,3 @@ alertContent = event.aps.alert;

if(device.platform == "Android") {
alertContent = window.plugins.jPushPlugin.receiveNotification.alert;
alertContent = event.alert;
} else {

@@ -344,3 +344,3 @@ alertContent = event.aps.alert;

if(device.platform == "Android") {
message = window.plugins.jPushPlugin.receiveMessage.message;
message = event.message;
} else {

@@ -347,0 +347,0 @@ message = event.content;

{
"name": "jpush-phonegap-plugin",
"version": "2.2.4",
"version": "2.2.5",
"description": "JPush for cordova plugin",

@@ -5,0 +5,0 @@ "cordova": {

@@ -5,3 +5,3 @@ # JPush PhoneGap / Cordova Plugin

[![QQ Group](https://img.shields.io/badge/QQ%20Group-413602425-red.svg)]()
[![release](https://img.shields.io/badge/release-2.2.3-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![release](https://img.shields.io/badge/release-2.2.4-blue.svg)](https://github.com/jpush/jpush-phonegap-plugin/releases)
[![platforms](https://img.shields.io/badge/platforms-iOS%7CAndroid-lightgrey.svg)](https://github.com/jpush/jpush-phonegap-plugin)

@@ -13,29 +13,28 @@ [![weibo](https://img.shields.io/badge/weibo-JPush-blue.svg)](http://weibo.com/jpush?refer_flag=1001030101_&is_all=1)

> QQ 交流群:413602425
> 如需要短信验证码功能的插件,可关注 [JSMS Cordova Plugin](https://github.com/jpush/cordova-plugin-jsms)。
> QQ 交流群:413602425。
## 集成步骤
集成 JPush PhoneGap Plugin 有两种方法:
### 在线安装
- 通过 Cordova Plugins 安装,要求 PhoneGap/Cordova CLI 5.0+:
- 先安装 cordova-plugin-device 插件:
cordova plugin add jpush-phonegap-plugin --variable API_KEY=your_jpush_appkey
cordova plugin add cordova-plugin-device
- 直接通过 url 安装:
- 安装本插件
- 通过 Cordova Plugins 安装,要求 Cordova CLI 5.0+:
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable API_KEY=your_jpush_appkey
cordova plugin add jpush-phonegap-plugin --variable API_KEY=your_jpush_appkey
### 本地安装
使用 git 命令将 JPush PhoneGap 插件下载的本地,目录标记为 $JPUSH_PLUGIN_DIR:
- 或者直接通过 url 安装:
git clone https://github.com/jpush/jpush-phonegap-plugin.git
cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git --variable API_KEY=your_jpush_appkey
cordova plugin add $JPUSH_PLUGIN_DIR --variable API_KEY=your_jpush_appkey
- 或下载到本地安装:
- [Android 手动安装文档地址](/doc/Android_handle_install.md)。
cordova plugin add Your_Plugin_Path --variable API_KEY=your_jpush_appkey
- [iOS 手动安装文档地址](/doc/iOS_install.md)。
## Demo
插件项目中包含一个简单的 Demo。若想参考,可以在 /example 文件夹内找到并拷贝以下文件:
插件项目中包含一个简单的 Demo。若想参考,可以在 */example* 文件夹内找到并拷贝以下文件:

@@ -74,3 +73,3 @@ src/example/index.html -> www/index.html

### 1. Android
### Android

@@ -81,7 +80,4 @@ - Eclipse 中 import PhoneGap 工程之后出现:*Type CallbackContext cannot be resolved to a type*。

### 2. iOS
### iOS
- 收不到推送:
请首先按照正确方式再次配置证书、描述文件,具体可参考 [iOS 证书设置指南](http://docs.jpush.io/client/ios_tutorials/#ios_1)。
- 设置 PushConfig.plist:

@@ -94,6 +90,9 @@ - APP_KEY:应用标识。

- 收不到推送:
请首先按照正确方式再次配置证书、描述文件,具体可参考 [iOS 证书设置指南](http://docs.jpush.io/client/ios_tutorials/#ios_1)。
## 更多
- QQ 群:413602425。
- [JPush 官网文档](http://docs.jpush.io/)。
- 如有问题可访问[极光社区](http://community.jpush.cn/)。
- QQ 群:413602425;
- [JPush 官网文档](http://docs.jpush.io/);
- 如有问题可访问[极光社区](http://community.jiguang.cn/)。

@@ -0,8 +1,5 @@

var JPushPlugin = function () {}
// private plugin function
var JPushPlugin = function(){
};
//private plugin function
JPushPlugin.prototype.receiveMessage = {}

@@ -12,204 +9,202 @@ JPushPlugin.prototype.openNotification = {}

JPushPlugin.prototype.isPlatformIOS = function() {
var isPlatformIOS = device.platform == "iPhone"
|| device.platform == "iPad"
|| device.platform == "iPod touch"
|| device.platform == "iOS";
return isPlatformIOS;
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);
return ret;
JPushPlugin.prototype.call_native = function (name, args, callback) {
ret = cordova.exec(callback, this.error_callback, 'JPushPlugin', name, args)
return ret
}
// public methods
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.init = function () {
if (this.isPlatformIOS()) {
var data = []
this.call_native('initial', data, null)
} else {
data = []
this.call_native('init', data, null)
}
}
JPushPlugin.prototype.getRegistrationID = function(callback) {
try {
var data = [];
this.call_native("getRegistrationID", [data], callback);
} 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.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.isPushStopped = function(callback) {
data = [];
this.call_native("isPushStopped", data, callback);
JPushPlugin.prototype.isPushStopped = function (callback) {
data = []
this.call_native('isPushStopped', data, callback)
}
// iOS methods
JPushPlugin.prototype.setTagsWithAlias = function(tags, alias) {
try {
if(tags == null) {
this.setAlias(alias);
return;
}
if(alias == null) {
this.setTags(tags);
return;
}
var arrayTagWithAlias = [tags];
arrayTagWithAlias.unshift(alias);
this.call_native("setTagsWithAlias", arrayTagWithAlias, null);
} catch(exception) {
console.log(exception);
}
JPushPlugin.prototype.setTagsWithAlias = function (tags, alias) {
try {
if (tags == null) {
this.setAlias(alias)
return
}
if (alias == null) {
this.setTags(tags)
return
}
var arrayTagWithAlias = [tags]
arrayTagWithAlias.unshift(alias)
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) {
console.log(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.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.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.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.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.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.setCrashLogON = function () {
if (this.isPlatformIOS()) {
var data = []
this.call_native('crashLogON', [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.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.deleteLocalNotificationWithIdentifierKeyInIOS = function(
identifierKey) {
if (this.isPlatformIOS()) {
var data = [identifierKey];
this.call_native("deleteLocalNotificationWithIdentifierKey", data, null);
}
JPushPlugin.prototype.deleteLocalNotificationWithIdentifierKeyInIOS = function (
identifierKey) {
if (this.isPlatformIOS()) {
var data = [identifierKey]
this.call_native('deleteLocalNotificationWithIdentifierKey', data, null)
}
}
JPushPlugin.prototype.clearAllLocalNotifications = function(){
if (this.isPlatformIOS()) {
var data = [];
this.call_native("clearAllLocalNotifications", data, null);
}
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.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);
}
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)
}
}
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.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.getApplicationIconBadgeNumber = function (callback) {
if (this.isPlatformIOS()) {
this.call_native('getApplicationIconBadgeNumber', [], callback)
}
}
// 判断系统设置中是否对本应用启用通知。

@@ -223,118 +218,115 @@ // iOS: 返回值如果大于 0,代表通知开启;0: 通知关闭。

// Android: 返回值 1 代表通知启用、0: 通知关闭。
JPushPlugin.prototype.getUserNotificationSettings = function(callback) {
if(this.isPlatformIOS()) {
this.call_native("getUserNotificationSettings", [], callback);
} else if (device.platform == "Android") {
this.call_native("areNotificationEnabled", [], callback);
}
JPushPlugin.prototype.getUserNotificationSettings = function (callback) {
if (this.isPlatformIOS()) {
this.call_native('getUserNotificationSettings', [], callback)
} else if (device.platform == 'Android') {
this.call_native('areNotificationEnabled', [], callback)
}
}
// Android methods
JPushPlugin.prototype.setDebugMode = function(mode) {
if(device.platform == "Android") {
this.call_native("setDebugMode", [mode], null);
}
JPushPlugin.prototype.setDebugMode = function (mode) {
if (device.platform == 'Android') {
this.call_native('setDebugMode', [mode], null)
}
}
JPushPlugin.prototype.setBasicPushNotificationBuilder = function() {
if(device.platform == "Android") {
data = [];
this.call_native("setBasicPushNotificationBuilder", data, null);
}
JPushPlugin.prototype.setBasicPushNotificationBuilder = function () {
if (device.platform == 'Android') {
data = []
this.call_native('setBasicPushNotificationBuilder', data, null)
}
}
JPushPlugin.prototype.setCustomPushNotificationBuilder = function() {
if(device.platform == "Android") {
data = [];
this.call_native("setCustomPushNotificationBuilder", data, null);
}
JPushPlugin.prototype.setCustomPushNotificationBuilder = function () {
if (device.platform == 'Android') {
data = []
this.call_native('setCustomPushNotificationBuilder', data, null)
}
}
JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) {
try {
console.log("JPushPlugin:receiveMessageInAndroidCallback");
data = JSON.stringify(data);
var bToObj = JSON.parse(data);
this.receiveMessage = bToObj
cordova.fireDocumentEvent('jpush.receiveMessage', null);
} catch(exception) {
console.log("JPushPlugin:pushCallback " + exception);
}
JPushPlugin.prototype.receiveMessageInAndroidCallback = function (data) {
try {
data = JSON.stringify(data)
console.log('JPushPlugin:receiveMessageInAndroidCallback: ' + data)
this.receiveMessage = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveMessage', this.receiveMessage)
} catch(exception) {
console.log('JPushPlugin:pushCallback ' + exception)
}
}
JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) {
try {
console.log("JPushPlugin:openNotificationInAndroidCallback");
data = JSON.stringify(data);
var bToObj = JSON.parse(data);
this.openNotification = bToObj;
cordova.fireDocumentEvent('jpush.openNotification', null);
} catch(exception) {
console.log(exception);
}
JPushPlugin.prototype.openNotificationInAndroidCallback = function (data) {
try {
data = JSON.stringify(data)
console.log('JPushPlugin:openNotificationInAndroidCallback: ' + data)
this.openNotification = JSON.parse(data)
cordova.fireDocumentEvent('jpush.openNotification', this.openNotification)
} catch(exception) {
console.log(exception)
}
}
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function(data) {
try{
console.log("JPushPlugin:receiveNotificationInAndroidCallback");
data = JSON.stringify(data);
var bToObj = JSON.parse(data);
this.receiveNotification = bToObj;
cordova.fireDocumentEvent('jpush.receiveNotification', null);
} catch(exception) {
console.log(exception);
}
JPushPlugin.prototype.receiveNotificationInAndroidCallback = function (data) {
try {
data = JSON.stringify(data)
console.log('JPushPlugin:receiveNotificationInAndroidCallback: ' + data)
this.receiveNotification = JSON.parse(data)
cordova.fireDocumentEvent('jpush.receiveNotification', this.receiveNotification)
} catch(exception) {
console.log(exception)
}
}
JPushPlugin.prototype.clearAllNotification = function() {
if(device.platform == "Android") {
data = [];
this.call_native("clearAllNotification", data, null);
}
JPushPlugin.prototype.clearAllNotification = function () {
if (device.platform == 'Android') {
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.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.setLatestNotificationNum = function (num) {
if (device.platform == 'Android') {
this.call_native('setLatestNotificationNum', [num], null)
}
}
JPushPlugin.prototype.setDebugMode = function(mode) {
if(device.platform == "Android") {
this.call_native("setDebugMode", [mode], null);
}
JPushPlugin.prototype.setDebugMode = function (mode) {
if (device.platform == 'Android') {
this.call_native('setDebugMode', [mode], null)
}
}
JPushPlugin.prototype.addLocalNotification = function(builderId, content, title,
notificationID, broadcastTime, extras) {
if(device.platform == "Android") {
data = [builderId, content, title, notificationID, broadcastTime, extras];
this.call_native("addLocalNotification", data, null);
}
JPushPlugin.prototype.addLocalNotification = function (builderId, content, title,
notificationID, broadcastTime, extras) {
if (device.platform == 'Android') {
data = [builderId, content, title, notificationID, 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.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.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);
}
JPushPlugin.prototype.reportNotificationOpened = function (msgID) {
if (device.platform == 'Android') {
this.call_native('reportNotificationOpened', [msgID], null)
}
}

@@ -346,6 +338,6 @@

*/
JPushPlugin.prototype.setStatisticsOpen = function(mode) {
if(device.platform == "Android") {
this.call_native("setStatisticsOpen", [mode], null);
}
JPushPlugin.prototype.setStatisticsOpen = function (mode) {
if (device.platform == 'Android') {
this.call_native('setStatisticsOpen', [mode], null)
}
}

@@ -357,28 +349,28 @@

*/
JPushPlugin.prototype.requestPermission = function() {
if(device.platform == "Android") {
this.call_native("requestPermission", [], null);
}
JPushPlugin.prototype.requestPermission = function () {
if (device.platform == 'Android') {
this.call_native('requestPermission', [], null)
}
}
JPushPlugin.prototype.setSilenceTime = function(startHour, startMinute, endHour, endMinute) {
if (device.platform == "Android") {
this.call_native("setSilenceTime", [startHour, startMinute, endHour, endMinute], null);
}
JPushPlugin.prototype.setSilenceTime = function (startHour, startMinute, endHour, endMinute) {
if (device.platform == 'Android') {
this.call_native('setSilenceTime', [startHour, startMinute, endHour, endMinute], null)
}
}
JPushPlugin.prototype.setPushTime = function(weekdays, startHour, endHour) {
if (device.platform == "Android") {
this.call_native("setPushTime", [weekdays, startHour, endHour], null);
}
JPushPlugin.prototype.setPushTime = function (weekdays, startHour, endHour) {
if (device.platform == 'Android') {
this.call_native('setPushTime', [weekdays, startHour, endHour], null)
}
}
if(!window.plugins) {
window.plugins = {};
if (!window.plugins) {
window.plugins = {}
}
if(!window.plugins.jPushPlugin) {
window.plugins.jPushPlugin = new JPushPlugin();
if (!window.plugins.jPushPlugin) {
window.plugins.jPushPlugin = new JPushPlugin()
}
module.exports = new JPushPlugin();
module.exports = new JPushPlugin()

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc