Hello all,
I'm building a web application in ASP.NET MVC (.NET Framework 4.7.2), from this web app I need to send push notifications to users. For the ones who are logged in with windows/android, everything works as expected, but I can't manage to get it work on the apple side.
If I use the same methods to subscribe to push notifications, it shows me the popup that asks the user to enable push notifications, and then I get an endpoint like this:
https://web.push.apple.com/QKC1Muic0H7...
It doesn't work using this (taking the part after https://web.push.apple.com/), I keep getting "Bad device token" (trying to send the notification via APNS).
Then I found out that there is another method to register the device from the frontend, and this one should give me the real device token:
window.safari.pushNotification.requestPermission
But this one doesn't show me the popup, it gives me "denied" without a reason.
I'm trying to a test application which is here https://pwa.vctplanner.it, the web push id is web.it.vctplanner, I created a push package downloadable from POST https://pwa.vctplanner.it/api/v2/PushPackages/web.it.vctplanner, and the code from the frontend is this:
function registerSafariPush() {
// Controlla se Safari Push Notifications è disponibile
if (!('safari' in window) || !('pushNotification' in window.safari)) {
console.log("Safari Push Notifications non supportate su questo browser.");
return;
}
// Il tuo Website Push ID registrato su Apple Developer
var websitePushId = "web.it.vctplanner";
// Controlla lo stato della permission
var permissionData = window.safari.pushNotification.permission(websitePushId);
switch (permissionData.permission) {
case 'default': // L'utente non ha ancora deciso
window.safari.pushNotification.requestPermission(
'https://pwa.vctplanner.it', // URL del server che serve il Push Package
websitePushId,
{}, // dati opzionali da inviare al server
function (permission) {
if (permission.permission === 'granted') {
console.log("Notifiche push abilitate!");
sendSubscriptionToServer({ endpoint: permission.deviceToken });
} else {
console.log("Notifiche push non abilitate dall'utente.");
}
}
);
break;
case 'denied': // L'utente ha negato
console.log("Notifiche push negate.");
break;
case 'granted': // L'utente ha già autorizzato
console.log("Notifiche push già autorizzate.");
sendSubscriptionToServer({ endpoint: permissionData.deviceToken });
break;
}
}
Any suggestions of what I'm missing? Is there a complete guide to how generate the push package?
Thank you
General
RSS for tagExplore the integration of web technologies within your app. Discuss building web-based apps, leveraging Safari functionalities, and integrating with web services.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
In my application, I use HTML pages to display the interface. Since it’s a cross-platform app, the pages and interactions work properly on other platforms. However, in WebKit, because HTTPS protocol is used, JS requests from the page cannot use the ws protocol but must use the wss protocol under HTTPS. Is there any way to allow a webpage under HTTPS to use ws requests normally? Google Chrome can do this.
Topic:
Safari & Web
SubTopic:
General
Hi all,
Question:
Can Apple confirm that, on macOS 15 without MDM/supervision, there is no supported API, entitlement, auth right, or config file that can enable a Safari App Extension without some form of user interaction?
Environment
• OS / Safari: macOS 15.0.1 (Sequoia), Safari 18.x
• Distribution: Signed, notarized, stapled PKG installs a host app that contains a Safari App Extension
• Management: No MDM allowed (and thus no supervision)
• Goal: Have the extension come up enabled immediately after install, without requiring the user to click the checkbox in Safari Settings ▸ Extensions
What we already know / tried
Normal install flow – After PKG install, the extension shows up disabled. User must check the box to enable.
SFSafariApplication.showPreferencesForExtension(...) – We can deep‑link the user to our row, but they still need to click “Enable.”
Accessibility/UI scripting – We can script the click if the user grants our helper Accessibility permission. That still involves user interaction.
.mobileconfig with Safari Extensions Management (AlwaysOn) – From what I can tell, this requires a supervised device enrolled in MDM. Installing that profile manually on an unsupervised Mac does not enforce the “AlwaysOn” state.
Auth rights / Developer mode – Looked at auth.db rights like com.apple.Safari.allow-unsigned-app-extensions, and the Develop menu “Allow Unsigned Extensions.” Neither appears to auto‑enable a signed extension, and we don’t want to use private/unsupported APIs anyway.
Thanks in advance for any clarification.
Topic:
Safari & Web
SubTopic:
General
I have multiple web views of the same domain that share the same local storage, as expected.
One of them though, is loading a .webarchive file.
The web archive is of the same domain, and is loaded using the same base URL.
For some reason, in most cases, the local storage is not shared with this web view when loading the web archive, although if I make that same web view load the actual live web page it does share local storage.
I say in most cases, because for some users it works as expected, but for a significant portion of users it isn't sharing local storage.
I think that the main difference between working and not is iOS version. iOS 17 seems to be able to share the local storage but iOS 18 does not. I can't find anything related in the release notes of iOS 18 versions.
There is nothing in the documentation for load(_:mimeType:characterEncodingName:baseURL:), or the header file, that explains anything specific about local storage and webarchive loading.
Does anyone know for sure how local storage is handled when a webarchive is loaded into a web view, and did something change with iOS 18 in regards to this?
Hello everyone,
We've had our app rejected twice under Guideline 3.2.2 regarding charitable donations, and we're seeking clarification on the correct implementation. We've read the guidelines but want to confirm the technical approach with the community's experience.
The Rejection Reason:
Apple states: "We still noticed that your app includes the ability to collect charitable donations within the app..." They specify that since we are not an approved nonprofit, we must use one of the alternatives, primarily: "provide a link to your website that launches the default browser or SFSafariViewController for users to make a donation."
Our Current (Rejected) Implementation:
User taps a "Help" button in our native app.
A native modal appears inside our app where the user enters their donation amount and email address for the receipt.
The user clicks "Donate," which then opens an SFSafariViewController to our website's payment page (e.g., Stripe, PayPal). The amount and email are passed as URL parameters to pre-fill the form.
Our Questions for the Community:
Is the issue solely the fact that we have a native modal for data entry? We understand we cannot process the payment in-app, but we thought collecting the intent (amount, email) was acceptable before handing off to Safari.
What is the definitive, compliant flow?
Option A: Should the "Help" button do nothing more than open an SFSafariViewController to a generic donations landing page on our website (https://ourwebsite.com/donate), with no data pre-filled? The user must then navigate and enter all information on the website itself.
Option C: The rejection also mentions SMS. Has anyone had success implementing a "Text-to-Donate" link instead of a web flow?
Wording: The button in our app currently says "Donate". Should this be changed to a more passive call to action like "Visit Website to Donate" to make it absolutely clear the transaction is external?
We want to ensure our next submission is successful. Any insight, especially from developers who have successfully navigated this exact rejection, would be immensely helpful.
Thank you.
I have a website that has been built in Wordpress and hosted on wordpress engine. In testing now and on the i phone with safari browser it keeps crashing after short time 2/3 minutes, content does not display properly pages go blank etc. Has anyone experienced this /have a solution? Thanks
Issue Description
I'm developing a hybrid iOS app and encountering WebView bridge communication issues after updating to Xcode 16 with iOS 18 SDK.
App Architecture
AViewController: Initial view controller displayed at app launch
Handles WebView setup and web-to-native bridge communication
Pushes BViewController when receiving "B" bridge message from web
BViewController: View controller stacked on top of AViewController
Managed by navigation controller
AViewController's WebView continues bridge communication even when BViewController is active
Problem Behavior
Xcode 15 (iOS 18): WebView bridge communication in AViewController works normally while BViewController is active
Xcode 16 (iOS 18 SDK): Server communication breaks or hangs without response while BViewController is active
Communication resumes only after popping back to AViewController from BViewController
Questions
Is the current architecture (configuring WebView in AViewController and maintaining bridge communication through AViewController's WebView while BViewController is presented) not a recommended pattern?
Is Xcode 16's iOS 18 SDK the cause of this issue? If so, could you help me understand which specific changes are affecting this behavior?
This is urgent as we need to deploy soon. I would greatly appreciate a prompt response.
Hello,
I followed the instructions to set up a custom logo for our domain name Allogarage.fr, both for the brand and the domain. Everything appears to be correctly configured in Apple Business backend for several weeks now, but the logo still doesn’t show up in Mail.
Is the branded email feature available in France? Are there any additional steps required?
Hi Developers,
I am working on a small project and I noticed that my website header looks different in Safari on macOS compared to Windows browsers like Chrome and Edge.
In Safari, the header text and spacing look slightly shifted (screenshot attached).
On Windows browsers, everything looks perfectly aligned.
Here is my live project for reference: https://gratuitycalculatorae.com/
Screenshot from Safari (macOS):
Is this related to Safari-specific CSS rendering?
Should I use -webkit- specific fixes or is there a better cross-browser solution?
Any guidance or best practices would be really helpful. Thanks
Is there any supported mechanism in Safari Web Extensions (MV3) for capturing or logging network request data (like fetch, XHR, or webRequest) triggered by the web page?
We are experiencing a problem that seems to be caused by a specification changes for Safari.
We would like to discuss how to solve this problem.
Sample JavaScript:
<html>
<head>
<script>
function jumpPage(code) {
document.main.code.value = code;
win1=window.open("","win1","toolbar=no,resizable=yes,menubar=no,scrollbars=yes,status=yes,left=0,top=0");
win1.resizeTo(width=screen.availWidth,height=screen.availHeight);
document.main.action="details";
document.main.target="win1";
document.main.submit();
}
</script>
</head>
<body>
<form name="main" method="post" action="" target="">
<a href="javascript:jumpPage('001')">details</a>
<input type="hidden" name="code" value="">
</body>
</html>
This JavaScript performs the following actions when a link is clicked.
Open a window using window.open in JavaScript
Submit the above opened window by post method to the target in JavaScript.
When this operation is performed, the process in (2) could submit to the
target page with “POST” method before iOS18.1, but
will transition to the page with“GET”method from iOS18.2 onward.
All protocols are http.
This problem does not occur if the URL is specified as an IP address, but it does occur if the host name is specified as.
Please let me know how to use with“POST”method as in iOS 18.2 or earlier.
Best regards,
Topic:
Safari & Web
SubTopic:
General
Hello there,
back in the old WebKit API there was the WKDownloadDelegate to handle download actions in WebViews. I was wondering how to handle download actions within the new WebKit in SwiftUI. Is there anything to use already or are there workarounds to handle downloads?
Greetings,
Thorben
The new WebView implementation in *OS 26 versions is a very valuable addition to the SwiftUI toolset. I was experimenting with it and was wondering how to implement a Pull To Refresh. While this was easily achievable with the "old" WKWebView I was not able to find an API to implement, for example, a page reload when the user uses a pull to refresh gesture.
I tried to attach to a .refreshable(_:) modifier to the WebView but without success.
Is there an official API for that or should maybe .refreshable(_:) already work and it's just a bug or is it simply not yet supported?
Here is a minimal example I was trying but didn't succeed:
struct ContentView: View {
@State private var page = WebPage()
var body: some View {
NavigationStack {
WebView(page)
.refreshable {
page.reload()
}
}
}
}
Any help is much appreciated. Thank you!
Hello,
We are setting up Apple Sign In in one of our non production websites but we keep getting a "oauth code says expired or revoked" error. We have created a brand new service ID and key for this but are still getting this error.
Topic:
Safari & Web
SubTopic:
General
ios26beta8 mesh不切换
Topic:
Safari & Web
SubTopic:
General
So I have web Augmented Reality apps hosted on AWS S3. It worked fine for a month, but as soon as the IOS 18.4 update was installed they stopped working. It works on every other device and IOS versions.
The URLs for the mentioned AR experiences:
digitechonline.in/solsprefimaginewt8/
digitechonline.in/solsprefimaginewt8p2/
digitechonline.in/orocarear/
These AR experiences get stuck on the loading screen and either reload or give an error. Ideally the camera is supposed to open.
I have tested it on Safari, Microsoft Edge and Google Chrome browsers.
They were created through Unity webgl and hosted on AWS S3 bucket. Please provide a quick solution to this.
window.location.href = 'tel:0216700310'; I ran the code in an IOS environment. The number was displayed when the call button on the device appeared. However, other IOS devices besides some devices came out as a number starting with +82, and I received feedback that the call was not connected properly. I wonder what could be caused by only some devices. And I would also like to ask what can be done to allow the numbers on the code to be displayed and called as they are.
Topic:
Safari & Web
SubTopic:
General
Hi everyone,
I’m working on a web project developed on Adobe Experience Manager (AEM), where we’ve built a custom component that embeds Apple Podcasts episodes using the official iframe provided via https://embed.podcasts.apple.com.
Everything works correctly from a rendering point of view, but we are now exploring ways to track user interactions with the embedded player, specifically events such as: start, play, pause,
progress milestones (e.g. 25%, 50%, etc.).
This data would be used to send analytics events to Adobe Analytics.
So far, we haven’t found any documentation or JavaScript API that would allow us to listen to these events.
We'd like to ask:
Is there any official way to track playback events from an Apple Podcasts iframe?
Any information, clarification, or direction would be really appreciated.
Thanks in advance!
Thanks,
Adriana
Topic:
Safari & Web
SubTopic:
General
iOS 26 (from beta 1 to beta 2)
We have a VPN app that installs a per-app VPN profile with SafariDomains to filter Safari network traffic. This setup works as expected on iOS versions lower than 26.0.
See here more details on SafariDomains: https://developer.apple.com/business/documentation/Configuration-Profile-Reference.pdf
On iOS 26, all SafariDomains configured to go through the per-app VPN result in the following error: "Safari can’t open the page. The error was: Unknown Error"
Additional Details: Only SafariDomains encounter this error. Other managed apps traffic through the per-app VPN works correctly.
Steps to Reproduce:
Install the VPN app with a per-app VPN profile.
Configure SafariDomains with any URL (e.g., example.com).
Open Safari and navigate to the configured URL.
Example Configuration:
We tested with a simple example by adding only one URL to SafariDomains (example.com). Logs from the console were captured at the moment Safari opened and encountered the error.
safari_google2.txt
Has anyone else encountered this issue on iOS 26? Any insights or solutions would be greatly appreciated.
Thank you!
使用direct distribution进行分发时,safari web extension 在safari setting 中显示没有权限读取、修改或传输任何网页的内容。
但是我在看公证日志显示插件是正常的公证的
这导致safari extension 无法使用。
公证日志
https://www.coupert.com/img/2025-04-10/notarization-log.json