advanced_sms_log 1.0.0
advanced_sms_log: ^1.0.0 copied to clipboard
Android SMS log reader with real-time incoming stream, optional store observer, SMS send status callbacks, and OTP via SMS User Consent API.
๐ฉ advanced_sms_log #
โ Android SMS log reader (inbox/sent/etc)
โ Real-time incoming SMS listener (stream)
โ OTP read (User Consent API) โ Play-safe
Platforms: โ Android | โ iOS (not supported by iOS APIs)
๐ธ Screenshots #
โจ Features #
โ 1) SMS log reader #
- Read SMS logs:
- Inbox / Sent / Draft / Outbox / Failed / Queued / All
- Filters:
address,bodyContains,threadId, date rangefrom/to
- Pagination:
limit+offset
- Best-effort SIM info:
subId(if available on device/ROM)
โ 2) Real-time listener (stream) #
- Incoming SMS events:
- Works while your app process is alive
- Uses BroadcastReceiver for
SMS_RECEIVED
- Optional store change watcher:
- ContentObserver on
content://sms - Emits
store_changedevents (and can fetch latest message ifREAD_SMSgranted)
- ContentObserver on
โ 3) Send SMS + status callbacks (optional) #
- Send SMS through this plugin (uses
SmsManager) - Get
sent/deliveredcallbacks via events stream
(Status callbacks are only guaranteed for messages sent via this plugin.)
โ 4) OTP read (recommended for Play) #
- OTP via SMS User Consent API
- No
READ_SMS/RECEIVE_SMSruntime permission required - Provide a regex like
\b\d{4,8}\b
โ ๏ธ Google Play policy note (important) #
Google Play restricts use of SMS permissions (like READ_SMS, RECEIVE_SMS).
If your app does not qualify under Play policies, do not include those permissions.
Use OTP via User Consent / SMS Retriever instead.
๐ฆ Install #
dependencies:
advanced_sms_log: ^1.0.0
๐ค Android setup #
Permissions (only if you use full logs + incoming SMS receiver) #
Add to your app android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<!-- Only if you send SMS via plugin -->
<uses-permission android:name="android.permission.SEND_SMS" />
If you publish on Google Play, ensure policy compliance before requesting SMS permissions.
OTP dependency #
This plugin uses Google Play Services Auth API Phone for OTP consent.
The dependency is already included in the plugin's Android Gradle config.
๐ Usage #
1) Read SMS logs #
import 'package:advanced_sms_log/advanced_sms_log.dart';
final ok = await AdvancedSmsLog.requestSmsLogPermission();
if (!ok) return;
final items = await AdvancedSmsLog.getSms(
box: SmsBox.inbox,
limit: 50,
offset: 0,
bodyContains: 'otp',
);
for (final m in items) {
print('${m.address} ${m.date} ${m.body}');
}
2) Real-time incoming SMS listener #
await AdvancedSmsLog.startIncomingListener(
useBroadcast: true,
useObserver: true,
);
final sub = AdvancedSmsLog.events.listen((e) {
if (e.type == SmsEventType.received) {
final sms = e.sms;
print('Incoming: ${sms?.address} -> ${sms?.body}');
}
});
// later...
// await AdvancedSmsLog.stopIncomingListener();
// await sub.cancel();
3) OTP read (User Consent) #
await AdvancedSmsLog.startOtpUserConsent(
otpRegex: r'\b\d{4,8}\b',
);
AdvancedSmsLog.events.listen((e) {
if (e.type == SmsEventType.otp) {
print('OTP: ${e.otp}');
print('Message: ${e.message}');
}
});
4) Send SMS (optional) #
final ok = await AdvancedSmsLog.requestSendPermission();
if (!ok) return;
final sent = await AdvancedSmsLog.sendSms(
to: '+919999999999',
message: 'Hello from advanced_sms_log',
);
print('sendSms(): $sent');
๐ API #
Enums #
SmsBox:inbox,sent,draft,outbox,failed,queued,all
Models #
SmsLogid,address,body,date,dateSent,threadId,type,read,seen,subId
Events (single stream) #
receivedโSmsLogstore_changedโSmsLog?(ifREAD_SMSgranted, we include latest)sent_statusโ{messageId, kind, status, resultCode}otpโ{otp, message}errorโ{error}
๐ Docs #
docs/USAGE.mddocs/ARCHITECTURE.md
โ Sponsor a cup of tea #
If this package saves you development time, consider supporting my work.
https://github.com/sponsors/nousath
๐งพ Changelog #
See CHANGELOG.md.