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
2 changes: 1 addition & 1 deletion .github/workflows/create-release-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ jobs:
(
cd examples/demo
vp run setup || echo "::notice::expected pod install conflict; bumping OneSignalXCFramework"
(cd ios/App && pod update OneSignalXCFramework --no-repo-update)
(cd ios/App && pod update OneSignalXCFramework)
)
echo "✓ Refreshed examples/demo/ios/App/Podfile.lock"

Expand Down
2 changes: 1 addition & 1 deletion examples/demo/bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions examples/demo/ios/App/App.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 99SW8E36CT;
INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.OneSignalNotificationServiceExtensionCordova;
Expand All @@ -658,7 +658,7 @@
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 99SW8E36CT;
INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.onesignal.example.NSE;
Expand Down
35 changes: 19 additions & 16 deletions examples/demo/ios/App/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,49 +12,52 @@ PODS:
- Capacitor
- CordovaPluginsStatic (8.3.1):
- CapacitorCordova
- OneSignalXCFramework (= 5.5.1)
- OneSignalXCFramework (5.5.1):
- OneSignalXCFramework/OneSignalComplete (= 5.5.1)
- OneSignalXCFramework/OneSignal (5.5.1):
- OneSignalXCFramework (= 5.5.2)
- OneSignalXCFramework (5.5.2):
- OneSignalXCFramework/OneSignalComplete (= 5.5.2)
- OneSignalXCFramework/OneSignal (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalExtension
- OneSignalXCFramework/OneSignalLiveActivities
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalUser
- OneSignalXCFramework/OneSignalComplete (5.5.1):
- OneSignalXCFramework/OneSignalComplete (5.5.2):
- OneSignalXCFramework/OneSignal
- OneSignalXCFramework/OneSignalInAppMessages
- OneSignalXCFramework/OneSignalLocation
- OneSignalXCFramework/OneSignalCore (5.5.1)
- OneSignalXCFramework/OneSignalExtension (5.5.1):
- OneSignalXCFramework/OneSignalCore (5.5.2)
- OneSignalXCFramework/OneSignalExtension (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalInAppMessages (5.5.1):
- OneSignalXCFramework/OneSignalInAppMessages (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalUser
- OneSignalXCFramework/OneSignalLiveActivities (5.5.1):
- OneSignalXCFramework/OneSignalLiveActivities (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalUser
- OneSignalXCFramework/OneSignalLocation (5.5.1):
- OneSignalXCFramework/OneSignalLocation (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalUser
- OneSignalXCFramework/OneSignalNotifications (5.5.1):
- OneSignalXCFramework/OneSignalNotifications (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalExtension
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalOutcomes
- OneSignalXCFramework/OneSignalOSCore (5.5.1):
- OneSignalXCFramework/OneSignalOSCore (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalOutcomes (5.5.1):
- OneSignalXCFramework/OneSignalOutcomes (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalUser (5.5.1):
- OneSignalXCFramework/OneSignalOSCore
- OneSignalXCFramework/OneSignalUser (5.5.2):
- OneSignalXCFramework/OneSignalCore
- OneSignalXCFramework/OneSignalNotifications
- OneSignalXCFramework/OneSignalOSCore
Expand Down Expand Up @@ -97,8 +100,8 @@ SPEC CHECKSUMS:
CapacitorHaptics: 296f771ecd89c7a1bd92a7b6826a7d268e2e70f5
CapacitorKeyboard: 31c8285d92c9d1410071d52449f16d2c6673b6f4
CapacitorStatusBar: 01d5763b4ed720de5ce2edbc938de6a98f4c8f32
CordovaPluginsStatic: 0ac3b344dc20172c14778f3b492eecc3d2c7d83c
OneSignalXCFramework: 2b46c36b38528b65dce33ed9d83375f8c98bf40c
CordovaPluginsStatic: aec218b37b85f783c287b8131dbcd75d69f775c8
OneSignalXCFramework: 2f46ff87ccefd9afe8e3b5f9fe357072191205ff

PODFILE CHECKSUM: 892242555b0dc410fc880efd419fbc59f99aa3c7

Expand Down
8 changes: 5 additions & 3 deletions examples/demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
"description": "OneSignal Sample App",
"scripts": {
"setup": "../setup.sh",
"preandroid": "vp run setup",
"preios": "vp run setup",
"setup:android": "../setup.sh android",
"setup:ios": "../setup.sh ios",
"preandroid": "vp run setup:android",
"preios": "vp run setup:ios",
"build": "tsc && vp build",
"android:sync": "ionic cap sync android",
"ios:sync": "ionic cap sync ios",
"android": "ionic cap run android -l --external",
"ios": "ionic cap run ios -l --external",
"update:pods": "(cd ios/App && pod update OneSignalXCFramework --no-repo-update)"
"update:pods": "(cd ios/App && pod update OneSignalXCFramework)"
},
"dependencies": {
"@capacitor/android": "^8.3.1",
Expand Down
13 changes: 13 additions & 0 deletions examples/demo/src/pages/HomeScreen.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
:root {
/* Colors */
--os-primary: #e54b4d;
--os-primary-pressed: #c33f41;
--os-primary-tint: rgba(229, 75, 77, 0.1);
--os-success: #34a853;
--os-grey-700: #616161;
--os-grey-600: #757575;
Expand Down Expand Up @@ -212,6 +214,11 @@
font-weight: 600;
letter-spacing: 0.6px;
margin-bottom: var(--space-card-gap);
transition: background-color 100ms ease-out;
}

.action-btn:active {
background: var(--os-primary-pressed);
}

.action-btn-content {
Expand Down Expand Up @@ -239,6 +246,12 @@
color: var(--os-primary);
}

.action-btn.outline:active {
background: var(--os-primary-tint);
border-color: var(--os-primary-pressed);
color: var(--os-primary-pressed);
}

.action-btn.outline:disabled {
border-color: var(--os-grey-500);
color: var(--os-grey-500);
Expand Down
67 changes: 58 additions & 9 deletions examples/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,18 @@ set -euo pipefail
# Run from inside any examples/<demo> directory.
ORIGINAL_DIR=$(pwd)
SDK_ROOT=$(cd "$ORIGINAL_DIR/../.." && pwd)
SYNC_PLATFORM="${1:-all}"

info() { echo -e "\033[0;32m[setup]\033[0m $*"; }

case "$SYNC_PLATFORM" in
all|android|ios) ;;
*)
echo "Usage: $0 [all|android|ios]" >&2
exit 2
;;
esac

# ── Plugin tarball cache ─────────────────────────────────────────────────────
# Skip rebuild/repack/`vp add` when plugin sources haven't changed.
SDK_STAMP="$SDK_ROOT/.cordova-sdk-source.stamp"
Expand Down Expand Up @@ -43,14 +52,32 @@ info "Building web bundle (vite)..."
vp run build

# ── Capacitor sync cache ─────────────────────────────────────────────────────
# `cap sync` runs `pod install` + `xcodebuild clean` (~30-60s); skip when
# inputs are unchanged. Hash sources (not `dist/`) since bundlers emit
# content-hashed chunk names that can drift between identical builds.
SYNC_STAMP="$ORIGINAL_DIR/.cap-sync.stamp"
SYNC_HASH=$(find "$ORIGINAL_DIR/src" "$ORIGINAL_DIR/index.html" \
"$ORIGINAL_DIR/capacitor.config.ts" "$ORIGINAL_DIR/vite.config.ts" \
"$ORIGINAL_DIR/package.json" "$ORIGINAL_DIR/bun.lock" \
"$ORIGINAL_DIR/ios/App" \
# `cap sync` can run `pod install` + `xcodebuild clean` (~30-60s); skip when
# inputs are unchanged. Use per-platform stamps so Android-only runs do not
# touch iOS when CocoaPods is available locally.
SYNC_STAMP="$ORIGINAL_DIR/.cap-sync-${SYNC_PLATFORM}.stamp"
SYNC_INPUTS=(
"$ORIGINAL_DIR/src"
"$ORIGINAL_DIR/index.html"
"$ORIGINAL_DIR/capacitor.config.ts"
"$ORIGINAL_DIR/vite.config.ts"
"$ORIGINAL_DIR/package.json"
"$ORIGINAL_DIR/bun.lock"
)

case "$SYNC_PLATFORM" in
android)
SYNC_INPUTS+=("$ORIGINAL_DIR/android")
;;
ios)
SYNC_INPUTS+=("$ORIGINAL_DIR/ios/App")
;;
all)
SYNC_INPUTS+=("$ORIGINAL_DIR/android" "$ORIGINAL_DIR/ios/App")
;;
esac

SYNC_HASH=$(find "${SYNC_INPUTS[@]}" \
-type f \
! -path "*/node_modules/*" \
! -path "*/Pods/*" \
Expand All @@ -69,8 +96,30 @@ SYNC_HASH=$(find "$ORIGINAL_DIR/src" "$ORIGINAL_DIR/index.html" \
| awk '{print $1}')
SYNC_HASH="${SYNC_HASH}-${SDK_SRC_HASH}"

if [[ -d "$ORIGINAL_DIR/ios/App/App/public" ]] && [[ -f "$SYNC_STAMP" ]] && [[ "$(cat "$SYNC_STAMP")" == "$SYNC_HASH" ]]; then
sync_outputs_exist() {
case "$SYNC_PLATFORM" in
android)
[[ -d "$ORIGINAL_DIR/android/app/src/main/assets/public" ]]
;;
ios)
[[ -d "$ORIGINAL_DIR/ios/App/App/public" ]]
;;
all)
[[ -d "$ORIGINAL_DIR/android/app/src/main/assets/public" && -d "$ORIGINAL_DIR/ios/App/App/public" ]]
;;
esac
}

if sync_outputs_exist && [[ -f "$SYNC_STAMP" ]] && [[ "$(cat "$SYNC_STAMP")" == "$SYNC_HASH" ]]; then
info "Capacitor sync inputs unchanged, skipping cap sync"
elif [[ "$SYNC_PLATFORM" == "android" ]]; then
info "Syncing Capacitor Android..."
vpx cap sync android
echo "$SYNC_HASH" > "$SYNC_STAMP"
elif [[ "$SYNC_PLATFORM" == "ios" ]]; then
info "Syncing Capacitor iOS..."
vpx cap sync ios
echo "$SYNC_HASH" > "$SYNC_STAMP"
elif ! command -v pod >/dev/null 2>&1; then
# CI Android jobs run on Linux where CocoaPods isn't installed.
# Sync only Android so plain `cap sync` doesn't shell out to pod.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "onesignal-cordova-plugin",
"version": "5.3.10",
"version": "5.3.11",
"description": "OneSignal is a high volume Push Notification service for mobile apps. In addition to basic notification delivery, OneSignal also provides tools to localize, target, schedule, and automate notifications that you send.",
"keywords": [
"adm",
Expand Down
6 changes: 3 additions & 3 deletions plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="onesignal-cordova-plugin"
version="5.3.10">
version="5.3.11">

<name>OneSignal Push Notifications</name>
<author>Josh Kasten, Bradley Hesse, Rodrigo Gomez-Palacio</author>
Expand All @@ -26,7 +26,7 @@
</engines>

<platform name="android">
<framework src="com.onesignal:OneSignal:5.9.2" />
<framework src="com.onesignal:OneSignal:5.9.3" />
<framework src="build-extras-onesignal.gradle" custom="true" type="gradleReference" />

<config-file target="res/xml/config.xml" parent="/*">
Expand Down Expand Up @@ -73,7 +73,7 @@
<source url="https://cdn.cocoapods.org/"/>
</config>
<pods use-frameworks="true">
<pod name="OneSignalXCFramework" spec="5.5.1" />
<pod name="OneSignalXCFramework" spec="5.5.2" />
</pods>
</podspec>

Expand Down
48 changes: 1 addition & 47 deletions src/android/com/onesignal/cordova/OneSignalPush.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,8 @@
*/
package com.onesignal.cordova;

import android.app.Activity;
import android.app.Application;
import com.onesignal.OneSignal;
import com.onesignal.common.OneSignalWrapper;
import com.onesignal.core.internal.application.IApplicationService;
import com.onesignal.debug.internal.logging.Logging;
import com.onesignal.inAppMessages.IInAppMessage;
import com.onesignal.inAppMessages.IInAppMessageClickEvent;
Expand Down Expand Up @@ -373,18 +370,11 @@ public boolean init(CallbackContext callbackContext, JSONArray data) {

initDone = true;
OneSignalWrapper.setSdkType("cordova");
OneSignalWrapper.setSdkVersion("050310");
OneSignalWrapper.setSdkVersion("050311");
try {
String appId = data.getString(0);
OneSignal.initWithContext(this.cordova.getActivity(), appId);

// If the SDK was initialized from a non-Activity context (FCM/work
// managers, SyncJobService) before this call, initWithContext above
// short-circuits and ApplicationService.start never re-runs, so its
// ALC missed MainActivity.onResume and isInForeground stays false.
// Forward the missed events now.
nudgeApplicationServiceForeground();

// add listeners
OneSignal.getInAppMessages().addLifecycleListener(this);
OneSignal.getInAppMessages().addClickListener(this);
Expand All @@ -398,42 +388,6 @@ public boolean init(CallbackContext callbackContext, JSONArray data) {
}
}

/**
* Forward the missed activity-resume to the SDK so isInForeground is
* correct on cold start. No-op if the SDK already saw the resume.
*
* TODO: Replace with a public native-SDK entry point (e.g.
* OneSignal.onActivityForegrounded(Activity)) once the Android SDK
* exposes one, instead of casting IApplicationService to
* ActivityLifecycleCallbacks here.
*/
private void nudgeApplicationServiceForeground() {
final Activity activity = this.cordova.getActivity();
if (activity == null) return;

// cordova.execute() runs on the WebView thread, but Android's
// ActivityLifecycleCallbacks are normally invoked on the main thread.
// Hop to the UI thread so we don't race real framework callbacks.
activity.runOnUiThread(() -> {
final Activity currentActivity = this.cordova.getActivity();
if (currentActivity == null) return;

IApplicationService appSvc;
try {
appSvc = OneSignal.INSTANCE.getServices().getServiceOrNull(IApplicationService.class);
} catch (Throwable t) {
return;
}
if (appSvc == null) return;
if (appSvc.isInForeground() && appSvc.getCurrent() == currentActivity) return;
if (!(appSvc instanceof Application.ActivityLifecycleCallbacks)) return;

Application.ActivityLifecycleCallbacks callbacks = (Application.ActivityLifecycleCallbacks) appSvc;
callbacks.onActivityStarted(currentActivity);
callbacks.onActivityResumed(currentActivity);
});
}

@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) {
boolean result = false;
Expand Down
2 changes: 1 addition & 1 deletion src/ios/OneSignalPush.m
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void processNotificationClicked(OSNotificationClickEvent *event) {

void initOneSignalObject(NSDictionary *launchOptions) {
OneSignalWrapper.sdkType = @"cordova";
OneSignalWrapper.sdkVersion = @"050310";
OneSignalWrapper.sdkVersion = @"050311";
[OneSignal initialize:nil withLaunchOptions:launchOptions];
}

Expand Down
Loading