Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 57 additions & 5 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,16 @@ jobs:
node-version: [10.x, 12.x, 14.x, 15.x]
steps:
- name: Checkout Branch
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: "NPM Build"
run: npm ci; npm run build --if-present
- name: "NPM Test"
run: npm test

android-test:
name: Android Unit Tests
runs-on: ubuntu-latest
Expand All @@ -40,28 +41,79 @@ jobs:
working-directory: ./plugin
steps:
- name: Checkout Branch
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: "Install JDK 11"
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 11
- name: Install NPM
uses: actions/setup-node@v1
uses: actions/setup-node@v4
- name: NPM Build
run: |
npm ci
npm run build --if-present
- name: Run Unit Tests
run: ./gradlew test

example-android:
name: Build Example Android App
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./example
steps:
- name: Checkout Branch
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Cordova
run: npm install -g cordova
- name: Install Dependencies
run: npm ci
- name: Add Android Platform
run: cordova platform add android
- name: Build Android
run: cordova build android

example-ios:
name: Build Example iOS App
runs-on: macos-latest
defaults:
run:
working-directory: ./example
steps:
- name: Checkout Branch
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Cordova
run: npm install -g cordova
- name: Install Dependencies
run: npm ci
- name: Add iOS Platform
run: cordova platform add ios
- name: Build iOS
run: cordova build ios

pr-notify:
if: >
github.event_name == 'pull_request' &&
github.event.pull_request.draft == false
needs:
- js-test
- android-test
- example-android
- example-ios
name: Notify GChat
uses: ROKT/rokt-workflows/.github/workflows/oss_pr_opened_notification.yml@main
secrets:
Expand Down
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,3 @@ node_modules

example/platforms
example/plugins
package-lock.json
71 changes: 71 additions & 0 deletions example/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# MParticle Cordova Example

This example demonstrates how to integrate the MParticle Cordova plugin into your application.

## Prerequisites

- Node.js and npm
- Cordova CLI
- Xcode (for iOS development)
- Android Studio (for Android development)

## Setup

1. Install dependencies:
```bash
npm install
```

2. Add your MParticle credentials:
- In `platform_overrides/android/MainActivity.java`, replace:
- `REPLACE_ME_API_KEY` with your Android API key
- `REPLACE_ME_API_SECRET` with your Android API secret

- In `platform_overrides/ios/AppDelegate.m`, replace:
- `REPLACE_ME_API_KEY` with your iOS API key
- `REPLACE_ME_API_SECRET` with your iOS API secret

3. Add platforms:
```bash
cordova platform add android
cordova platform add ios
```

## Running the App

For Android:
```bash
cordova run android
```

For iOS:
```bash
cordova run ios
```

## Development

The example includes a clean script to help reset the project state:

```bash
npm run clean
```

This will:
- Remove the platforms directory
- Remove the plugins directory
- Remove node_modules and package-lock.json
- Reinstall dependencies

After cleaning, you'll need to re-add the platforms:
```bash
cordova platform add android ios
```

## Project Structure

- `platform_overrides/` - Contains platform-specific customizations
- `android/` - Android-specific files (MainActivity.java)
- `ios/` - iOS-specific files (AppDelegate.m)
- `www/` - Web assets and Cordova application code
- `hooks/` - Scripts that run during Cordova commands
4 changes: 4 additions & 0 deletions example/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<preference name="deployment-target" value="12.0" />
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>

<!-- Platform-specific file copy hook -->
<hook type="after_platform_add" src="hooks/after_platform_add/010_copy_platform_specific_files.js" />
<plugin name="cordova-plugin-mparticle" spec="../plugin" />
</widget>
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env node

var fs = require('fs');
var path = require('path');
var shell = require('child_process');

module.exports = function(context) {
// Get platform from context
var platform = context.opts.platforms[0];

function ensureDirectoryExistence(filePath) {
var dirname = path.dirname(filePath);
if (fs.existsSync(dirname)) {
return true;
}
fs.mkdirSync(dirname, { recursive: true });
}

if (platform === 'android') {
// Copy MainActivity.java
var srcFile = path.join(context.opts.projectRoot, 'platform_overrides', 'android', 'MainActivity.java');
var destFile = path.join(context.opts.projectRoot, 'platforms', 'android', 'app', 'src', 'main', 'java', 'com', 'mparticle', 'example', 'MainActivity.java');

if (fs.existsSync(srcFile)) {
try {
ensureDirectoryExistence(destFile);
fs.copyFileSync(srcFile, destFile);
console.log('Copied custom MainActivity.java');
} catch (err) {
console.error('Error copying MainActivity.java:', err);
process.exitCode = 1;
}
}
} else if (platform === 'ios') {
// Copy AppDelegate.m
var srcFile = path.join(context.opts.projectRoot, 'platform_overrides', 'ios', 'AppDelegate.m');
var destFile = path.join(context.opts.projectRoot, 'platforms', 'ios', 'MParticleExample', 'AppDelegate.m');

if (fs.existsSync(srcFile)) {
try {
ensureDirectoryExistence(destFile);
fs.copyFileSync(srcFile, destFile);
console.log('Copied custom AppDelegate.m');
} catch (err) {
console.error('Error copying AppDelegate.m:', err);
process.exitCode = 1;
}
}
}
};
Loading
Loading