搜尋套件、儲存庫與 APP 分類

套件詳情v1.1.0

sms_advanced

這是一個適用於 Flutter 的簡訊庫。它可在 Android 上實現發送、接收、查詢簡訊訊息、簡訊傳遞狀態以及查詢聯絡人資訊,而在 iOS 與 Web 上僅支援發送簡訊。

AndroidiOSWeb
近 30 天下載
74
喜歡數
100
Pub 分數
140

安裝套件

flutter pub add sms_advanced

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

sms_advanced 是一個 Flutter 套件,可在 Android、iOS 和 Web 平台上實現簡訊功能。在 Android 上,它支援發送、接收、查詢訊息、追蹤傳遞狀態以及取得聯絡人資訊。在 iOS 和 Web 上,僅支援發送簡訊。該套件提供統一的介面來處理簡訊作業,適用於需要基本簡訊整合的應用程式。它依賴原生平台功能,並且在 Android 上需要適當的權限。原始碼公開託管在 GitHub 上,以確保透明度和可客製化。

適用情境

  • 從 Flutter 應用發送簡訊
  • 在 Android 上接收和管理簡訊
  • 查詢訊息傳遞狀態
  • 整合聯絡資訊檢索
  • 建構雙向簡訊通訊

主要特色

  • 跨平台簡訊支援
  • 訊息發送和接收(僅限 Android)
  • 配送狀態追蹤
  • 聯絡資訊查詢
  • 公共 GitHub 源碼

適合對象

  • 需要簡訊驗證的應用
  • 客服聊天機器人與簡訊
  • 雙向簡訊訊息系統
  • 面向 Android 的應用程式,具有簡訊需求
  • 想要開源簡訊工具的開發者

使用建議

  • iOS 與網頁端簡訊接收受限
  • 需要 Android 權限以實現完整功能
  • 平台特定的行為差異
  • 無內建簡訊解析或過濾
  • 依賴於原生設備功能

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

sms_advanced

Buy Me A Coffee

This is an SMS library for Flutter.

Getting Started

Installation and Usage

Once you're familiar with Flutter you may install this package adding sms_advanced (1.0.1 or higher) to the dependencies list of the pubspec.yaml file as follow:

...
dependencies:
  flutter:
    sdk: flutter

  sms_advanced: ^1.0.1
...

Then run the command flutter packages get on the console.

Querying SMS messages

Add the import statement for sms_advanced and create an instance of the SmsQuery class:

import 'package:sms_advanced/sms_advanced.dart';

void main() {
  SmsQuery query = new SmsQuery();
}

Getting all SMS messages

List<SmsMessage> messages = await query.getAllSms;

Note: the use of await keyword means that getAllSms is resolved asynchronously and a Future is retorned. To use await, you must be in a function marked async.

Filtering SMS messages

The method querySms from the SmsQuery class returns a list of filtered SMS messages that match the supplied parameters. For example, for querying all the SMS messages sent and received, you could this code:

await query.querySms({
    kinds: [SmsQueryKind.Inbox, SmsQueryKind.Sent]
});

You can also query all the SMS messages sent and received from a specific contact:

await query.querySms({
    address: getContactAddress()
});

Getting all Threads Conversations

With SmsQuery you can also get the entire list of conversations:

List<SmsThread> threads = await query.getAllThreads;

extract information

List<SmsThread> threads = await query.getAllThreads;
  for( var index = num ; index >= threads.length; index-- ) { 
       String sendernumber = threads[index].contact?.address;
       String sim = threads[index].messages.first.sim.toString();
       String message = threads[index].messages.first.body;
       print('sender number: $sendernumber');
       print('reciever sim: $sim');
       print('message: $message');
   } 

Getting the Contact info

Each conversation thread is related with a Contact. The class Contact contains all the info of a thread contact (address, photo, full name). To get access to Contact class you must import 'package:sms_advanced/contact.dart' into your dart file:

import 'package:sms_advanced/contact.dart';

void main() {
  ...
  Contact contact = threads.first.contact;
  print(contact.address);
}

Querying Contact

You can also query a contact by its address (phone number):

import 'package:sms_advanced/contact.dart';

void main() {
  ContactQuery contacts = new ContactQuery();
  Contact contact = await contacts.queryContact(someAddress());
  print(contact.fullName);
}
String getAddress() { return someRandomAddress; }

The Contact photo

You can retrieve the photo of the contact (full size or thumbnail):

...
Uint8List fullSize = contact.photo.bytes;
Uint8List thumbnail = contact.thumbnail.bytes;

User Profile

Some times it is useful to request basic info of the phone owner, like the contact photo, addresses, etc.

import 'package:sms_advanced/contact.dart';

UserProfileProvider provider = new UserProfileProvider();
UserProfile profile = await provider.getUserProfile();
print(profile.fullName);

Sending SMS

What about sending a SMS? All you have to do is to create an instance of the SmsSender class:

import 'package:sms_advanced/sms_advanced.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = someAddress();
  ...
  sender.sendSms(new SmsMessage(address, 'Hello flutter world!'));
}

To be notified when the message is sent and/or delivered, you must add a listener to your message:

import 'package:sms_advanced/sms_advanced.dart';

void main() {
  SmsSender sender = new SmsSender();
  String address = someAddress();
  ...
  SmsMessage message = new SmsMessage(address, 'Hello flutter world!');
  message.onStateChanged.listen((state) {
    if (state == SmsMessageState.Sent) {
      print("SMS is sent!");
    } else if (state == SmsMessageState.Delivered) {
      print("SMS is delivered!");
    }
  });
  sender.sendSms(message);
}

Some times it is useful to be notified of delivered messages regardless of the message. To do that you must subscribe to the onSmsDelivered of the SmsSender class instance:

void main() {
...
SmsSender sender = new SmsSender();
sender.onSmsDelivered.listen((SmsMessage message){
  print('${message.address} received your message.');
}));
}

You can also send with another SimCard:

void main() {
SimCardsProvider provider = new SimCardsProvider();
SimCard card = await provider.getSimCards()[0];
SmsSender sender = new SmsSender();
SmsMessage message = new SmsMessage("address", "message");
sender.sendSMS(message, simCard: card);
}

Note: Using the onSmsDelivered from the SmsSender will only notify to listeners of messages that has been sent through SmsSender.send().

Receiving SMS

If you want to be notified for incoming new messages you must subscribe to an instance of the SmsReceiver class:

import 'package:sms_advanced/sms_advanced.dart';

void main() {
  SmsReceiver receiver = new SmsReceiver();
  receiver.onSmsReceived.listen((SmsMessage msg) => print(msg.body));
}

Deleting SMS

Only deleting one by one is available. Don't forget to make your sms app the default sms app. blogpost guide

import 'package:sms_advanced/sms_advanced.dart';

void main() {
SmsRemover smsRemover = SmsRemover();
<boolean value> = await smsRemover.removeSmsById(sms.id, _smsThread.threadId);
}

Roadmap

IOS Web Android
SMS Sender ✓ ✓ ✓
SMS Receiver ✓
SMS Delivery ✓
SMS Query ✓
SMS Thread ✓
Contact ✓
Contact Photo (full size, thumbnail) ✓
User profile (basic info) ✓
SMS Delete One-by-one ✓

Android Integration

Activity Changes

Note that sms_advanced requires the use of a FragmentActivity instead of an Activity. To update your application:

  • If you are using FlutterActivity directly, change it to FlutterFragmentActivity in your AndroidManifest.xml.

  • If you are using a custom activity, update your MainActivity.java:

    import io.flutter.embedding.android.FlutterFragmentActivity;
    
    public class MainActivity extends FlutterFragmentActivity {
        // ...
    }
    

    or MainActivity.kt:

    import io.flutter.embedding.android.FlutterFragmentActivity
    
    class MainActivity: FlutterFragmentActivity() {
        // ...
    }
    

    to inherit from FlutterFragmentActivity.

Contributions

Any contribution is welcome.

所屬分類

依賴

依賴清單 2 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。