A booking that is not in the user's calendar is a no-show waiting to happen. On iOS, WebViewGold lets users add an event to the Calendar app from a plain link to an .ics file, so your Base44 app needs nothing more than a URL that returns the event. Android has no dedicated calendar API in WebViewGold; here is what works there instead.
From $109 one-time per platform, or let our team do it all from $698.
Approval guarantee – or money back within 14 days
No coding needed
One-time payment, free updates
24/7 human support
Made in Germany since 2014 · ISO 27001
9:41
BBase44
Calendar eventsNow live in your pocket
App Store · Google Play Approved
What works on each platform
iOS: link to an .ics file
WebViewGold is set up for Calendar (formerly iCal): a normal link to an .ics file lets the user add the entry to the iPhone or iPad calendar. No URL scheme, no JavaScript bridge, and the web app never reads the user's calendar; it only offers an event.
Android: download or Google Calendar
The Android documentation has no calendar API. Two routes work: add .ics to downloadableExtension in Config.java so the file is downloaded and can be opened with a calendar app that imports .ics files, and offer an "Add to Google Calendar" link that opens outside the app.
One event file per booking
Your server returns a small text file (a VCALENDAR with one VEVENT) for each booking, class or appointment. The same URL serves the website, the iOS app and the Android download.
Prompt for Base44
Paste this into Base44 to implement the web-app side. Review the result, publish, then test inside the WebViewGold app.
Prompt to paste into Base44
Add an Add to calendar feature to bookings that works in our WebViewGold mobile app. 1) When a Booking is created or its time changes, build an iCalendar text with one VEVENT: UID booking-ID@ourapp, DTSTAMP, DTSTART and DTEND in UTC ending in Z, SUMMARY with the service name, LOCATION, DESCRIPTION with a link to the booking page, and a reminder one hour before. 2) Upload it as a file named booking-ID.ics using the built-in file upload integration and save the URL in a new field calendar_file_url on Booking. 3) On the booking page show an Add to calendar link to calendar_file_url that opens in the same tab. 4) When navigator.userAgent contains WebViewGold-Android, also show Add to Google Calendar using a calendar.google.com/calendar/render?action=TEMPLATE link built from the booking fields. 5) Keep the same UID for every update so calendars do not show duplicates.
I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.
Add a route such as /calendar/BOOKING_TOKEN.ics that returns the event with Content-Type: text/calendar; charset=utf-8. Keep the path ending in .ics, as in the WebViewGold example, and use an unguessable token instead of relying on the login session.
Fill in the fields that matter
A stable UID per booking, DTSTAMP, DTSTART and DTEND in UTC (ending in Z), SUMMARY, LOCATION and a DESCRIPTION with a link back to the booking. Escape commas and semicolons in text.
Link to it in the same tab
A plain <a href="https://yourdomain.com/calendar/TOKEN.ics">. Do not open it in a new window or with target="_blank"; a web view has nowhere to show one.
Handle Android
Add .ics to downloadableExtension in Config.java for the download route, and show an "Add to Google Calendar" link with calendar.google.com in BROWSER_BLACKLIST, so it opens in the system browser, where most users are signed in to Google, instead of inside the web view.
Test on real devices
Add an event on an iPhone, then check the time zone, the duration and the link in the description. On Android, try phones from two manufacturers; calendar apps differ in how they open downloaded .ics files.
A minimal .ics file
This is all a calendar needs. Lines end with CRLF in the iCalendar spec; libraries handle that for you. Server side of your stack: Base44 built-in entities (database), file storage and backend functions.
text
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//YourApp//Bookings//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20261101T120000Z
DTSTART:20261205T170000Z
DTEND:20261205T180000Z
SUMMARY:Yoga class
LOCATION:Studio 2\, 14 Main Street
DESCRIPTION:Manage your booking: https://yourdomain.com/bookings/123
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
DESCRIPTION:Yoga class in one hour
END:VALARM
END:VEVENT
END:VCALENDAR
The button logic
The .ics link everywhere, the Google Calendar link as an extra on Android and desktop:
javascript
// Custom user agents: "... WebViewGold-iOS" (Config.swift), "... WebViewGold-Android" (Config.java)
var ua = navigator.userAgent;
var IS_ANDROID_APP = ua.indexOf("WebViewGold-Android") !== -1;
var IS_IOS_APP = ua.indexOf("WebViewGold-iOS") !== -1;
function icsUrl(b) { return "https://yourdomain.com/calendar/" + b.token + ".ics"; }
function googleCalendarUrl(b) {
var f = function (d) { return d.toISOString().replace(/[-:]|\.\d{3}/g, ""); };
return "https://calendar.google.com/calendar/render?action=TEMPLATE" +
"&text=" + encodeURIComponent(b.title) +
"&dates=" + f(b.start) + "/" + f(b.end) +
"&details=" + encodeURIComponent(b.url) +
"&location=" + encodeURIComponent(b.location);
}
// Render: always the .ics link; the Google link unless IS_IOS_APP
Pitfalls
Time zones: write times in UTC with a trailing Z, or include a proper VTIMEZONE block. Floating local times shift for travelers and for users in other zones.
A new UID on every download can create duplicates. Keep one UID per booking; how a calendar treats a re-import varies by app.
Login-protected .ics URLs: the request that fetches the file may not carry the user's web session. A random token per booking is the reliable option.
Calendar subscriptions (webcal:// feeds) are a different feature; the WebViewGold docs cover single .ics files.
Not a dedicated one; the calendar integration in the docs is iOS only. On Android, offer the .ics file as a download (add .ics to downloadableExtension in Config.java) and an Add to Google Calendar link that opens outside the app.
Can the app read the user's calendar to check availability?
No. The .ics flow only offers an event that the user adds. Availability belongs on your server, based on your own booking data.
Can I add recurring events or reminders?
Yes, inside the .ics file: an RRULE line for repeating classes and a VALARM block for a reminder. How the reminder appears depends on the user's calendar app; for reminders you control, use push notifications.
How do I generate the .ics file for my Base44 app?
A small server route builds the text. For one event no library is needed, though ical-generator (Node) or icalendar (Python) helps with recurring events and escaping. Ask Base44 for an endpoint that returns text/calendar for a booking token.
Do calendar links work in the browser too?
Yes. The same .ics URL downloads or opens the event in desktop and mobile browsers, so one button serves the website and both apps.
Three ways to get your app into the stores
Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.
Do it yourself
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.
Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.