hiya,
Flutter iOS: USSD code with * and # not launching in cellphone dialer (works on Android)
flutter ios ussd url-launcher tel-uri PROBLEM
My Flutter app executes USSD codes for cellular cash recharges. It labored appropriately on iOS earlier than 2026, however after updating the app, USSD codes now not execute on iPhone.
Key statement: After testing, I discovered:
An everyday cellphone quantity like 0123456789 → opens dialer appropriately ✅
USSD with * eliminated → opens dialer ✅
USSD with # eliminated → opens dialer ✅
Full USSD like *140*1*70000000# → nothing occurs ❌
This isn’t a code change on my facet — the identical code labored earlier than. The difficulty seems solely on iOS (iPhone 7, 10, 12 examined). Android works advantageous.
MY CURRENT CODE
static Future ussd(String ussdCode) async {
if (kIsAppleOS) {
ultimate Uri uri = Uri(
scheme: 'tel',
path: ussdCode, // e.g. *140*1*70000000#
);
await launchUrl(uri);
} else {
await DirectCallPlus.makeCall(ussdCode);
}
}
ENVIRONMENT
Flutter 3.x · url_launcher: ^6.1.7 · direct_call_plus: ^1.0.4 · iOS 15, 16, 17 · Units: iPhone 7, 10, 12
WHAT I TRIED
Encoding # as %23 → nonetheless blocked
mode: LaunchMode.externalApplication → no distinction
Uri.parse(‘tel:*140percent231’) as a substitute of Uri() → nonetheless blocked
Package deal ussd_launcher: ^1.5.0 → Android solely, no iOS assist
QUESTION
Is there any technique to execute a USSD code routinely on iOS in 2025/2026 from a Flutter app? Or is that this totally blocked by Apple? If that’s the case, what’s the finest UX fallback technique to information the consumer to dial manually?
