Flutter iOS: USSD code with * and # not launching in phone dialer (works on Android)

1 day ago 1
ARTICLE AD BOX

hello,


Flutter iOS: USSD code with * and # not launching in phone dialer (works on Android)
flutter ios ussd url-launcher tel-uri PROBLEM

My Flutter app executes USSD codes for mobile money recharges. It worked correctly on iOS before 2026, but after updating the app, USSD codes no longer execute on iPhone.

Key observation: After testing, I found:

A regular phone number like 0123456789 → opens dialer correctly ✅
USSD with * removed → opens dialer ✅
USSD with # removed → opens dialer ✅
Full USSD like *140*1*70000000# → nothing happens ❌

This is not a code change on my side — the same code worked before. The issue appears only on iOS (iPhone 7, 10, 12 tested). Android works fine.

MY CURRENT CODE

static Future\<void\> ussd(String ussdCode) async { if (kIsAppleOS) { final 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 · Devices: iPhone 7, 10, 12

WHAT I TRIED
Encoding # as %23 → still blocked
mode: LaunchMode.externalApplication → no difference
Uri.parse('tel:*140%231') instead of Uri() → still blocked
Package ussd_launcher: ^1.5.0 → Android only, no iOS support
QUESTION

Is there any way to execute a USSD code automatically on iOS in 2025/2026 from a Flutter app? Or is this fully blocked by Apple? If so, what is the best UX fallback strategy to guide the user to dial manually?

Read Entire Article