@bitstart/react-native-sms-sender
v0.2.1
Published
React Native SMS Sender - Android Native Module with TurboModules
Downloads
456
Maintainers
Readme
@bitstart/react-native-sms-sender
React Native SMS/MMS 管理插件,支持 Android TurboModules 新架构。
✨ 功能特性
📱 短信/彩信管理
- ✅ 发送短信(直接发送 / 打开系统界面)
- ✅ 发送彩信(通过系统 Intent)
- ✅ 批量发送短信
- ✅ 获取短信列表
- ✅ 获取彩信列表
- ✅ 获取会话列表
- ✅ 搜索消息
- ✅ 删除短信/彩信
- ✅ 标记已读
- ✅ 获取未读数量
📲 短信监听
- ✅ 四重监听保障(BroadcastReceiver × 2 + ContentObserver + NotificationListener)
- ✅ 验证码自动识别
- ✅ 验证码自动复制到剪切板
- ✅ 动态开关控制
🔋 保活机制
- ✅ 前台服务(常驻通知)
- ✅ 一像素保活(锁屏时激活)
- ✅ 开机自启
- ✅ 电池优化白名单
📶 SIM 卡支持
- ✅ 获取 SIM 卡列表
- ✅ 双卡设备支持
- ✅ 指定 SIM 卡发送
📦 安装
npm install @bitstart/react-native-sms-sender
# 或
yarn add @bitstart/react-native-sms-sender
# 或
bun add @bitstart/react-native-sms-sender🔧 配置
Android 权限
在 android/app/src/main/AndroidManifest.xml 中添加权限:
<manifest>
<!-- 短信相关 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<!-- 联系人(用于显示联系人名称) -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<!-- 电话状态(SIM 卡信息) -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 保活相关 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>📖 使用方法
初始化
import SmsSender from "@bitstart/react-native-sms-sender";
// 初始化 SDK
await SmsSender.initialize({
smsListenerEnabled: true, // 启用短信监听
autoCopyVerificationCode: true, // 自动复制验证码
notificationEnabled: true, // 显示通知
keepAliveEnabled: true, // 启用保活
onePixelEnabled: true, // 启用一像素保活
});发送短信
// 打开系统短信应用
await SmsSender.sendSms({
phoneNumber: "10086",
body: "Hello",
});
// 直接发送(需要权限)
await SmsSender.sendSms({
phoneNumber: "10086",
body: "Hello",
skipConfirmation: true,
});
// 指定 SIM 卡发送
await SmsSender.sendSms({
phoneNumber: "10086",
body: "Hello",
skipConfirmation: true,
simSlotIndex: 0, // 第一张 SIM 卡
});
// 批量发送
const result = await SmsSender.sendBatchSms(["10086", "10010", "10000"], "Hello everyone!", { simSlotIndex: 0 });发送彩信
await SmsSender.sendMms({
phoneNumbers: ["10086"],
body: "Hello with image",
subject: "Test MMS",
attachments: ["content://media/external/images/1"],
});读取短信
// 获取短信列表
const { messages, total, hasMore } = await SmsSender.getSmsList({
direction: "inbox", // 收件箱
limit: 20,
offset: 0,
});
// 获取未读短信
const unread = await SmsSender.getSmsList({
unreadOnly: true,
});
// 获取某个联系人的短信
const contactMessages = await SmsSender.getSmsList({
address: "10086",
});
// 按时间范围查询
const recent = await SmsSender.getSmsList({
startDate: Date.now() - 7 * 24 * 60 * 60 * 1000, // 最近7天
endDate: Date.now(),
});读取彩信
// 获取彩信列表
const { messages } = await SmsSender.getMmsList({
loadAttachments: true,
limit: 20,
});
// 获取彩信附件
const attachments = await SmsSender.getMmsAttachments("mms_id");获取会话列表
const { conversations } = await SmsSender.getConversations({
limit: 30,
});
// 获取某个会话的消息
const { messages } = await SmsSender.getConversationMessages("thread_id", {
limit: 50,
});搜索消息
const { messages } = await SmsSender.searchMessages("验证码", {
limit: 20,
});删除消息
// 删除单条短信
await SmsSender.deleteSms("sms_id");
// 删除单条彩信
await SmsSender.deleteMms("mms_id");
// 批量删除
await SmsSender.deleteMessages(["id1", "id2", "id3"]);
// 删除整个会话
await SmsSender.deleteConversation("thread_id");标记已读
// 标记单条已读
await SmsSender.markSmsAsRead("sms_id");
await SmsSender.markMmsAsRead("mms_id");
// 批量标记已读
await SmsSender.markMessagesAsRead(["id1", "id2"]);
// 标记整个会话已读
await SmsSender.markConversationAsRead("thread_id");
// 获取未读数量
const { sms, mms, total } = await SmsSender.getUnreadCount();监听短信
// 监听所有短信
const unsubscribe = SmsSender.addSmsListener((event) => {
console.log("收到短信:", event.sender);
console.log("内容:", event.body);
console.log("来源:", event.source); // sms_deliver / sms_received / content_observer / notification_listener
if (event.isVerificationCode) {
console.log("验证码:", event.verificationCode);
console.log("已复制:", event.copiedToClipboard);
}
});
// 取消监听
unsubscribe();
// 只监听验证码
const unsubscribeCode = SmsSender.addVerificationCodeListener((code, event) => {
console.log("收到验证码:", code);
console.log("来自:", event.sender);
});保活服务
// 启动保活
await SmsSender.startKeepAlive();
// 停止保活
await SmsSender.stopKeepAlive();
// 获取保活状态
const status = await SmsSender.getKeepAliveStatus();
console.log("前台服务:", status.foregroundServiceRunning);
console.log("一像素保活:", status.keepAliveActivityAlive);
console.log("ContentObserver:", status.contentObserverRegistered);
console.log("通知监听:", status.notificationListenerConnected);
// 请求电池优化白名单
await SmsSender.requestIgnoreBatteryOptimization();SIM 卡管理
// 获取 SIM 卡列表
const { sims, defaultSmsSlot } = await SmsSender.getSimCards();
sims.forEach((sim) => {
console.log(`卡槽 ${sim.slotIndex}: ${sim.displayName}`);
console.log(` 运营商: ${sim.carrierName}`);
console.log(` 电话号码: ${sim.phoneNumber || "未知"}`);
console.log(` 是否默认: ${sim.isDefaultSms}`);
});动态配置
// 修改配置
await SmsSender.setConfig({
autoCopyVerificationCode: false, // 关闭自动复制
smsListenerEnabled: false, // 关闭短信监听
});
// 获取当前配置
const config = await SmsSender.getConfig();
// 单独设置
await SmsSender.setSmsListenerEnabled(true);
await SmsSender.setAutoCopyEnabled(true);权限管理
// 检查发送权限
const hasSendPermission = await SmsSender.hasPermission();
// 请求发送权限
const granted = await SmsSender.requestPermission();
// 请求读取权限
const readGranted = await SmsSender.requestReadPermission();
// 检查设备支持
const available = await SmsSender.isAvailable();剪切板操作
// 复制到剪切板
await SmsSender.copyToClipboard("123456");
// 读取剪切板
const text = await SmsSender.getClipboardText();📊 数据类型
SmsMessage
interface SmsMessage {
id: string; // 消息 ID
type: "sms";
threadId: string; // 会话 ID
address: string; // 电话号码
contactName?: string; // 联系人名称
body: string; // 消息内容
date: number; // 时间戳(毫秒)
direction: MessageDirection;
read: boolean;
seen: boolean;
simSlotIndex?: number;
}MmsMessage
interface MmsMessage {
id: string;
type: "mms";
threadId: string;
addresses: string[]; // 收件人列表
contactNames?: string[];
subject?: string;
body?: string; // 文本内容
date: number;
direction: MessageDirection;
read: boolean;
seen: boolean;
attachments: MmsAttachment[];
size?: number;
}Conversation
interface Conversation {
threadId: string;
address: string;
contactName?: string;
snippet: string; // 最后一条消息
date: number;
messageCount: number;
unreadCount: number;
hasMms: boolean;
}SimInfo
interface SimInfo {
slotIndex: number;
subscriptionId: number;
carrierName: string;
displayName: string;
phoneNumber?: string;
iccId?: string;
isDefaultSms: boolean;
countryIso?: string;
}🔐 权限说明
| 权限 | 用途 |
| -------------------------------------- | --------------- |
| SEND_SMS | 发送短信 |
| READ_SMS | 读取短信/彩信 |
| RECEIVE_SMS | 接收短信广播 |
| RECEIVE_MMS | 接收彩信广播 |
| READ_CONTACTS | 获取联系人名称 |
| READ_PHONE_STATE | 获取 SIM 卡信息 |
| FOREGROUND_SERVICE | 前台保活服务 |
| RECEIVE_BOOT_COMPLETED | 开机自启 |
| REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | 电池优化白名单 |
| SYSTEM_ALERT_WINDOW | 一像素保活 |
⚠️ 注意事项
- 删除/修改短信:需要应用成为默认短信应用才能生效
- 直接发送短信:需要
SEND_SMS权限 - 一像素保活:需要
SYSTEM_ALERT_WINDOW悬浮窗权限 - 通知监听:需要用户手动在设置中授权
- 彩信发送:只能通过系统 Intent,无法直接发送
📝 更新日志
v0.2.0
- ✨ 新增:获取短信/彩信列表
- ✨ 新增:获取会话列表
- ✨ 新增:删除短信/彩信/会话
- ✨ 新增:标记已读功能
- ✨ 新增:搜索消息
- ✨ 新增:获取 SIM 卡信息
- ✨ 新增:批量发送短信
- ✨ 新增:发送彩信(Intent)
- ✨ 新增:获取未读数量
v0.1.1
- ✨ 新增:验证码自动复制
- ✨ 新增:动态配置开关
- 🐛 修复:配置持久化
v0.1.0
- 🎉 初始版本
- ✨ 短信发送(直接/Intent)
- ✨ 四重短信监听
- ✨ 验证码识别
- ✨ 保活机制
📄 License
MIT
