diff --git a/example/android/myapplication/build.gradle b/example/android/myapplication/build.gradle
index 5c8cbee486408a9ec90b9d1cca89dd9220112e39..2adc9ac534174701de6b4010d2e33c4eea8e810f 100644
--- a/example/android/myapplication/build.gradle
+++ b/example/android/myapplication/build.gradle
@@ -13,10 +13,9 @@ apply from: "../../../node_modules/react-native/react.gradle"
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
-
defaultConfig {
applicationId "com.wix.reactnativenotifications.app"
- minSdkVersion 19
+ minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
diff --git a/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java
index 0aa9149123fec5ea3a43331ce2a660b50046984c..30fedc6f2067447ea247a0871cf99b92736c7226 100644
--- a/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java
+++ b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java
@@ -1,40 +1,18 @@
package com.wix.reactnativenotifications.app;
-import android.os.Build;
import android.os.Bundle;
-import android.view.ViewGroup;
-import android.widget.Toolbar;
-
import com.facebook.react.ReactActivity;
-import com.facebook.react.ReactRootView;
-import static android.os.Build.VERSION.SDK_INT;
public class MainActivity extends ReactActivity {
- private ReactRootView mReactRootView;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- ViewGroup layout;
- if (SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- layout = (ViewGroup) getLayoutInflater().inflate(R.layout.activity_main, null);
- Toolbar toolbar = layout.findViewById(R.id.toolbar);
- setActionBar(toolbar);
- } else {
- layout = (ViewGroup) getLayoutInflater().inflate(R.layout.activity_main_prelollipop, null);
- }
- mReactRootView = new ReactRootView(this);
- layout.addView(mReactRootView);
-
- setContentView(layout);
-
- startReactApplication();
}
- private void startReactApplication() {
- mReactRootView.startReactApplication(getReactInstanceManager(), "NotificationsExampleApp", null);
+ @Override
+ protected String getMainComponentName() {
+ return "NotificationsExampleApp";
}
}
diff --git a/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainApplication.java b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainApplication.java
index 87b0d3a6ea174849a221b7e24bab964c1652eb91..24c9cbce864af3ea4effa4830539ce9fba38a810 100644
--- a/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainApplication.java
+++ b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainApplication.java
@@ -24,7 +24,12 @@ public class MainApplication extends Application implements ReactApplication {
return Arrays.asList(
new MainReactPackage(),
new RNNotificationsPackage(MainApplication.this)
- );
+ );
+ }
+
+ @Override
+ protected String getJSMainModuleName() {
+ return "index";
}
};
diff --git a/example/index.js b/example/index.js
index f047e961d1d01f0a1db39e7078cbcc43211211d5..c30bce596d842c0730572c1aa0d2163dd2e7c94f 100644
--- a/example/index.js
+++ b/example/index.js
@@ -6,7 +6,7 @@ import {
Button
} from 'react-native';
import React, {Component} from 'react';
-import { Notifications } from 'react-native-notifications';
+import {Notifications} from 'react-native-notifications';
class NotificationsExampleApp extends Component {
constructor() {
@@ -22,7 +22,7 @@ class NotificationsExampleApp extends Component {
registerNotificationEvents() {
Notifications.events().registerNotificationReceived((notification, completion) => {
this.setState({
- notifications: [...this.state.notifications, notification.link]
+ notifications: [...this.state.notifications, notification]
});
completion({alert: true, sound: false, badge: false});
@@ -30,15 +30,21 @@ class NotificationsExampleApp extends Component {
Notifications.events().registerRemoteNotificationOpened((notification, completion) => {
this.setState({
- notifications: [...this.state.notifications, `Notification Clicked: ${notification.link}`]
+ notifications: [...this.state.notifications, notification]
});
-
+
completion();
});
}
renderNotification(notification) {
- return {`${notification}`};
+ return (
+
+ {`Title: ${notification.title}`}
+ {`Body: ${notification.body}`}
+ {`Extra Link Param: ${notification.data.link}`}
+
+ );
}
requestPermissions() {
@@ -51,7 +57,7 @@ class NotificationsExampleApp extends Component {
title: String.fromCodePoint(0x1F44D),
identifier: 'UPVOTE_ACTION'
};
-
+
const replyAction = {
activationMode: 'background',
title: 'Reply',
@@ -62,7 +68,7 @@ class NotificationsExampleApp extends Component {
},
identifier: 'REPLY_ACTION'
};
-
+
const category = {
identifier: 'SOME_CATEGORY',
actions: [upvoteAction, replyAction]
@@ -88,13 +94,10 @@ class NotificationsExampleApp extends Component {
async componentDidMount() {
const initialNotification = await Notifications.getInitialNotification();
if (initialNotification) {
- this.setState({notifications: [initialNotification.link, ...this.state.notifications]});
+ this.setState({notifications: [initialNotification, ...this.state.notifications]});
}
}
- componentWillUnmount() {
- }
-
render() {
const notifications = this.state.notifications.map((notification, idx) =>
(
@@ -105,9 +108,9 @@ class NotificationsExampleApp extends Component {
return (
-
);
diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle
index 9ea834b292ae7390634cdaf1fc734d26bdf48e96..4940660612897d897ea95a7fa808070e9d840ece 100644
--- a/lib/android/app/build.gradle
+++ b/lib/android/app/build.gradle
@@ -6,7 +6,7 @@ android {
buildToolsVersion '28.0.3'
defaultConfig {
- minSdkVersion 19
+ minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
diff --git a/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationProps.java b/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationProps.java
index b155dfa030021809938eb3bb89c6d22d908f71cf..daab203847e56d6defddc22bc2381eb2d3daa401 100644
--- a/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationProps.java
+++ b/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationProps.java
@@ -6,16 +6,6 @@ public class PushNotificationProps {
protected Bundle mBundle;
- public PushNotificationProps() {
- mBundle = new Bundle();
- }
-
- public PushNotificationProps(String title, String body) {
- mBundle = new Bundle();
- mBundle.putString("title", title);
- mBundle.putString("body", body);
- }
-
public PushNotificationProps(Bundle bundle) {
mBundle = bundle;
}
diff --git a/lib/src/Notifications.ts b/lib/src/Notifications.ts
index 1ff45ac2022dbd4a86ba5c422b2f5f6f3894c750..8019c6af1b4dc2b5e38ec87dadc1a329271db3fd 100644
--- a/lib/src/Notifications.ts
+++ b/lib/src/Notifications.ts
@@ -2,9 +2,10 @@ import { NativeCommandsSender } from './adapters/NativeCommandsSender';
import { NativeEventsReceiver } from './adapters/NativeEventsReceiver';
import { Commands } from './commands/Commands';
import { EventsRegistry } from './events/EventsRegistry';
-import { Notification, NotificationCategory } from './interfaces/Notification';
+import { Notification } from './interfaces/Notification';
import { UniqueIdProvider } from './adapters/UniqueIdProvider';
import { CompletionCallbackWrapper } from './adapters/CompletionCallbackWrapper';
+import { NotificationCategory } from './interfaces/NotificationCategory';
export class NotificationsRoot {
private readonly nativeEventsReceiver: NativeEventsReceiver;
diff --git a/lib/src/adapters/CompletionCallbackWrapper.ts b/lib/src/adapters/CompletionCallbackWrapper.ts
index e221ad1674fb4d7d52b200b3829084d6fd90e0b4..8530682714e1dceecc1165cedcee57c22b7c257c 100644
--- a/lib/src/adapters/CompletionCallbackWrapper.ts
+++ b/lib/src/adapters/CompletionCallbackWrapper.ts
@@ -1,5 +1,7 @@
import { NativeCommandsSender } from './NativeCommandsSender';
-import { NotificationCompletion, Notification } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
+import { NotificationCompletion } from '../interfaces/NotificationCompletion';
+
import { Platform } from 'react-native';
export class CompletionCallbackWrapper {
constructor(
diff --git a/lib/src/adapters/NativeCommandsSender.ts b/lib/src/adapters/NativeCommandsSender.ts
index 5a3219e503e897ae3107a179a88bdef08e2ee71f..f36b688e70b82fa1942f33d727f0e609c2ce6311 100644
--- a/lib/src/adapters/NativeCommandsSender.ts
+++ b/lib/src/adapters/NativeCommandsSender.ts
@@ -1,5 +1,8 @@
import { NativeModules } from 'react-native';
-import { Notification, NotificationCategory, NotificationPermissions, NotificationCompletion } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
+import { NotificationCompletion } from '../interfaces/NotificationCompletion';
+import { NotificationPermissions } from '../interfaces/NotificationPermissions';
+import { NotificationCategory } from '../interfaces/NotificationCategory';
interface NativeCommandsModule {
getInitialNotification(): Promise;
diff --git a/lib/src/adapters/NativeEventsReceiver.ts b/lib/src/adapters/NativeEventsReceiver.ts
index 69d10890efd4301d02a7507df09d94e0fec20582..f84071db00a86f4584a18d698ac4858cb66d2223 100644
--- a/lib/src/adapters/NativeEventsReceiver.ts
+++ b/lib/src/adapters/NativeEventsReceiver.ts
@@ -19,7 +19,9 @@ export class NativeEventsReceiver {
}
public registerRemoteNotificationReceived(callback: (notification: Notification) => void): EmitterSubscription {
- return this.emitter.addListener('notificationReceived', callback);
+ return this.emitter.addListener('notificationReceived', (payload) => {
+ callback(new Notification(payload));
+ });
}
public registerPushKitNotificationReceived(callback: (event: object) => void): EmitterSubscription {
@@ -27,7 +29,9 @@ export class NativeEventsReceiver {
}
public registerRemoteNotificationOpened(callback: (response: Notification, completion: () => void) => void): EmitterSubscription {
- return this.emitter.addListener('notificationOpened', callback);
+ return this.emitter.addListener('notificationOpened', (payload, completion) => {
+ callback(new Notification(payload), completion);
+ });
}
public registerRemoteNotificationsRegistrationFailed(callback: (event: RegistrationError) => void): EmitterSubscription {
diff --git a/lib/src/commands/Commands.test.ts b/lib/src/commands/Commands.test.ts
index 9841a4ba72024d2f4ff8f0557d7da65132f252aa..127570d384bc42d175947a3d92ce77321ffa855b 100644
--- a/lib/src/commands/Commands.test.ts
+++ b/lib/src/commands/Commands.test.ts
@@ -3,8 +3,10 @@ import { mock, verify, instance, when, anyNumber } from 'ts-mockito';
import { Commands } from './Commands';
import { NativeCommandsSender } from '../adapters/NativeCommandsSender';
-import { Notification, NotificationCategory, NotificationPermissions } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
import { UniqueIdProvider } from '../adapters/UniqueIdProvider';
+import { NotificationCategory } from '../interfaces/NotificationCategory';
+import { NotificationPermissions } from '../interfaces/NotificationPermissions';
describe('Commands', () => {
let uut: Commands;
@@ -28,7 +30,7 @@ describe('Commands', () => {
});
it('returns a promise with the initial notification', async () => {
- const expectedNotification: Notification = {identifier: 'id', data: {}, alert: 'alert'};
+ const expectedNotification: Notification = new Notification({identifier: 'id'});
when(mockedNativeCommandsSender.getInitialNotification()).thenResolve(
expectedNotification
);
@@ -75,19 +77,19 @@ describe('Commands', () => {
describe('postLocalNotification', () => {
it('sends to native', () => {
- const notification: Notification = {identifier: 'id', alert: 'alert', data: {}};
+ const notification: Notification = new Notification({identifier: 'id'});
uut.postLocalNotification(notification);
verify(mockedNativeCommandsSender.postLocalNotification(notification, anyNumber())).called();
});
it('generates unique identifier', () => {
- const notification: Notification = {identifier: 'id', data: {}, alert: 'alert'};
+ const notification: Notification = new Notification({identifier: 'id'});
uut.postLocalNotification(notification);
verify(mockedNativeCommandsSender.postLocalNotification(notification, anyNumber())).called();
});
it('use passed notification id', () => {
- const notification: Notification = {identifier: 'id', data: {}, alert: 'alert'};
+ const notification: Notification = new Notification({identifier: 'id'});
const passedId: number = 2;
uut.postLocalNotification(notification, passedId);
verify(mockedNativeCommandsSender.postLocalNotification(notification, passedId)).called();
diff --git a/lib/src/commands/Commands.ts b/lib/src/commands/Commands.ts
index 1527f594615462103af36b28628bc79ac39a2897..99a11ba4583ca5085e6b58ef588c4ea7c2240e46 100644
--- a/lib/src/commands/Commands.ts
+++ b/lib/src/commands/Commands.ts
@@ -1,6 +1,8 @@
import * as _ from 'lodash';
import { NativeCommandsSender } from '../adapters/NativeCommandsSender';
-import { Notification, NotificationCategory, NotificationPermissions } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
+import { NotificationCategory } from '../interfaces/NotificationCategory';
+import { NotificationPermissions } from '../interfaces/NotificationPermissions';
import { UniqueIdProvider } from '../adapters/UniqueIdProvider';
export class Commands {
diff --git a/lib/src/events/EventsRegistry.test.ts b/lib/src/events/EventsRegistry.test.ts
index 8b9571754e80f6df6801d085dac545e8107441de..b8af1c83044c694c967b5ab8003df80af1b0eb47 100644
--- a/lib/src/events/EventsRegistry.test.ts
+++ b/lib/src/events/EventsRegistry.test.ts
@@ -1,10 +1,11 @@
import { EventsRegistry } from './EventsRegistry';
import { NativeEventsReceiver } from '../adapters/NativeEventsReceiver.mock';
-import { NotificationCompletion, Notification } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
import { CompletionCallbackWrapper } from '../adapters/CompletionCallbackWrapper';
import { NativeCommandsSender } from '../adapters/NativeCommandsSender.mock';
import { NotificationResponse } from '../interfaces/NotificationEvents';
import { Platform } from 'react-native';
+import { NotificationCompletion } from '../interfaces/NotificationCompletion';
describe('EventsRegistry', () => {
let uut: EventsRegistry;
@@ -28,7 +29,7 @@ describe('EventsRegistry', () => {
it('should wrap callback with completion block', () => {
const wrappedCallback = jest.fn();
- const notification: Notification = {identifier: 'identifier', data: {}, alert: 'alert'}
+ const notification: Notification = new Notification({identifier: 'identifier'});
uut.registerNotificationReceived(wrappedCallback);
const call = mockNativeEventsReceiver.registerRemoteNotificationReceived.mock.calls[0][0];
@@ -39,7 +40,7 @@ describe('EventsRegistry', () => {
});
it('should wrap callback with completion block', () => {
- const expectedNotification: Notification = {identifier: 'identifier', data: {}, alert: 'alert'}
+ const expectedNotification: Notification = new Notification({identifier: 'identifier'});
uut.registerNotificationReceived((notification) => {
expect(notification).toEqual(expectedNotification);
@@ -49,7 +50,7 @@ describe('EventsRegistry', () => {
});
it('should invoke finishPresentingNotification', () => {
- const notification: Notification = {identifier: 'notificationId', data: {}, alert: 'alert'}
+ const notification: Notification = new Notification({identifier: 'notificationId'});
const response: NotificationCompletion = {alert: true}
uut.registerNotificationReceived((notification, completion) => {
@@ -63,7 +64,7 @@ describe('EventsRegistry', () => {
it('should not invoke finishPresentingNotification on Android', () => {
Platform.OS = 'android';
- const expectedNotification: Notification = {identifier: 'notificationId', data: {}, alert: 'alert'}
+ const expectedNotification: Notification = new Notification({identifier: 'notificationId'});
const response: NotificationCompletion = {alert: true}
uut.registerNotificationReceived((notification, completion) => {
@@ -88,7 +89,7 @@ describe('EventsRegistry', () => {
it('should wrap callback with completion block', () => {
const wrappedCallback = jest.fn();
- const notification: Notification = {identifier: 'identifier', data: {}, alert: 'alert'};
+ const notification: Notification = new Notification({identifier: 'identifier'});
const response: NotificationResponse = {notification, identifier: 'responseId'};
uut.registerRemoteNotificationOpened(wrappedCallback);
@@ -100,7 +101,7 @@ describe('EventsRegistry', () => {
});
it('should wrap callback with completion block', () => {
- const notification: Notification = {identifier: 'identifier', data: {}, alert: 'alert'}
+ const notification: Notification = new Notification({identifier: 'identifier'});
const expectedResponse: NotificationResponse = {notification, identifier: 'responseId'}
uut.registerRemoteNotificationOpened((response) => {
@@ -111,7 +112,7 @@ describe('EventsRegistry', () => {
});
it('calling completion should invoke finishHandlingAction', () => {
- const expectedNotification: Notification = {identifier: 'notificationId', data: {}, alert: 'alert'}
+ const expectedNotification: Notification = new Notification({identifier: 'notificationId'});
uut.registerRemoteNotificationOpened((notification, completion) => {
completion();
@@ -125,7 +126,7 @@ describe('EventsRegistry', () => {
it('should not invoke finishHandlingAction on Android', () => {
Platform.OS = 'android';
- const expectedNotification: Notification = {identifier: 'notificationId', data: {}, alert: 'alert'}
+ const expectedNotification: Notification = new Notification({identifier: 'notificationId'});
uut.registerRemoteNotificationOpened((notification, completion) => {
completion();
diff --git a/lib/src/events/EventsRegistry.ts b/lib/src/events/EventsRegistry.ts
index d143de4d11592a73fe2b34e9d6df742c2b25afa3..97bd3509a23512d924751ab3489623c7adb7454c 100644
--- a/lib/src/events/EventsRegistry.ts
+++ b/lib/src/events/EventsRegistry.ts
@@ -7,7 +7,8 @@ import {
NotificationResponse
} from '../interfaces/NotificationEvents';
import { CompletionCallbackWrapper } from '../adapters/CompletionCallbackWrapper';
-import { NotificationCompletion, Notification } from '../interfaces/Notification';
+import { Notification } from '../interfaces/Notification';
+import { NotificationCompletion } from '../interfaces/NotificationCompletion';
export class EventsRegistry {
constructor(
diff --git a/lib/src/interfaces/Notification.ts b/lib/src/interfaces/Notification.ts
index 106393adadc6cb763e21249ff79f5604bc657beb..05a4599def4f84868e143dac4ee14bdb8ed8638c 100644
--- a/lib/src/interfaces/Notification.ts
+++ b/lib/src/interfaces/Notification.ts
@@ -1,45 +1,26 @@
-export interface Notification {
+export class Notification {
identifier: string;
- data: object;
- alert: string
+ private _data?: any;
+
sound?: string;
badge?: number;
type?: string;
thread?: string;
-}
-
-export interface NotificationPermissions {
- badge: boolean;
- alert: boolean;
- sound: boolean;
-}
-
-export interface NotificationCategory {
- identifier: string
- actions: [NotificationAction?];
-}
+ constructor(payload: object) {
+ this._data = payload;
+ this.identifier = this._data.identifier;
+ }
-export interface NotificationTextInput {
- buttonTitle: string;
- placeholder: string;
-}
-
-export interface NotificationAction {
- identifier: string;
- activationMode: 'foreground' | 'authenticationRequired' | 'destructive';
- title: string;
- authenticationRequired: boolean;
- textInput: NotificationTextInput
-}
+ get data(): any {
+ return this._data;
+ }
-export interface NotificationActionResponse {
- identifier: string;
- text: string;
-}
+ get title(): string {
+ return this._data.title;
+ }
-export interface NotificationCompletion {
- badge?: boolean;
- alert?: boolean;
- sound?: boolean;
+ get body(): string {
+ return this._data.body;
+ }
}
diff --git a/lib/src/interfaces/NotificationActionResponse.ts b/lib/src/interfaces/NotificationActionResponse.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4659e97cadda80321ffe1e1c786b2387be3893c2
--- /dev/null
+++ b/lib/src/interfaces/NotificationActionResponse.ts
@@ -0,0 +1,4 @@
+export interface NotificationActionResponse {
+ identifier: string;
+ text: string;
+}
diff --git a/lib/src/interfaces/NotificationCategory.ts b/lib/src/interfaces/NotificationCategory.ts
new file mode 100644
index 0000000000000000000000000000000000000000..69a84975c07152190aa279e5f4fc0865b61db993
--- /dev/null
+++ b/lib/src/interfaces/NotificationCategory.ts
@@ -0,0 +1,18 @@
+export interface NotificationCategory {
+ identifier: string
+ actions: [NotificationAction?];
+}
+
+
+export interface NotificationTextInput {
+ buttonTitle: string;
+ placeholder: string;
+}
+
+export interface NotificationAction {
+ identifier: string;
+ activationMode: 'foreground' | 'authenticationRequired' | 'destructive';
+ title: string;
+ authenticationRequired: boolean;
+ textInput: NotificationTextInput
+}
\ No newline at end of file
diff --git a/lib/src/interfaces/NotificationCompletion.ts b/lib/src/interfaces/NotificationCompletion.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e34fcfdb5788f373d2f8679c3310b5a2adcf4a57
--- /dev/null
+++ b/lib/src/interfaces/NotificationCompletion.ts
@@ -0,0 +1,5 @@
+export interface NotificationCompletion {
+ badge?: boolean;
+ alert?: boolean;
+ sound?: boolean;
+}
diff --git a/lib/src/interfaces/NotificationEvents.ts b/lib/src/interfaces/NotificationEvents.ts
index 7284220044de981400338b0850090f6790bc6cb0..dcd90eb3c5713b8aa744c6b04c193c14ad779b69 100644
--- a/lib/src/interfaces/NotificationEvents.ts
+++ b/lib/src/interfaces/NotificationEvents.ts
@@ -1,4 +1,5 @@
-import { Notification, NotificationActionResponse } from './Notification';
+import { Notification } from './Notification';
+import { NotificationActionResponse } from './NotificationActionResponse';
export interface Registered {
deviceToken: string;
diff --git a/lib/src/interfaces/NotificationPermissions.ts b/lib/src/interfaces/NotificationPermissions.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d951b2648053f238034dd39bb0fb02f562c5098
--- /dev/null
+++ b/lib/src/interfaces/NotificationPermissions.ts
@@ -0,0 +1,5 @@
+export interface NotificationPermissions {
+ badge: boolean;
+ alert: boolean;
+ sound: boolean;
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 264680ba79705e68e02e909335c2627514b2557c..f9770d2851aa9fac9a39c13803d66fbb25784945 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,8 @@
"test-unit-ios": "node ./scripts/test-unit --ios",
"test-unit-android": "node ./scripts/test-unit --android",
"test-js": "node ./scripts/test-js",
- "xcode": "open example/ios/NotificationsExampleApp.xcodeproj"
+ "xcode": "open example/ios/NotificationsExampleApp.xcodeproj",
+ "androidStudio": "open -a /Applications/Android\\ Studio.app ./example/android"
},
"nativePackage": true,
"dependencies": {