You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何在Xamarin.Forms中自动发送短信?有无免费方案

嘿,作为Xamarin.Forms新手就着手做自动发短信的功能,挺有想法的!我来给你梳理下Xamarin.Forms里实现短信发送的方法,重点说说免费的解决方案~

Xamarin.Forms发送短信的免费方案

一、原生平台原生实现(完全免费)

Xamarin.Forms是跨平台框架,短信发送依赖各平台的原生API,这是完全免费的方案,但要注意iOS和Android的差异:

Android端:可静默发送(需权限)

首先得在Android项目的AndroidManifest.xml里添加短信发送权限:

<uses-permission android:name="android.permission.SEND_SMS" />

Android 6.0及以上还需要动态申请权限,不然会被系统拦截:

const int SmsPermissionRequestCode = 1;

// 在MainActivity里实现权限申请逻辑
public void RequestSmsPermission()
{
    if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.SendSms) != Android.Content.PM.Permission.Granted)
    {
        ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.SendSms }, SmsPermissionRequestCode);
    }
}

然后写发送短信的核心方法:

using Android.Telephony;

public void SendSms(string phoneNumber, string message)
{
    // 先确认权限已获取
    if (ContextCompat.CheckSelfPermission(MainActivity.Instance, Manifest.Permission.SendSms) != Android.Content.PM.Permission.Granted)
    {
        RequestSmsPermission();
        return;
    }
    
    var smsManager = SmsManager.Default;
    // 参数分别是收件人、发件人(可null)、内容、发送回执、送达回执(可null)
    smsManager.SendTextMessage(phoneNumber, null, message, null, null);
}

iOS端:需用户交互(苹果隐私限制)

苹果的隐私政策不允许APP静默发送短信,必须通过系统自带的短信界面让用户确认发送。实现代码如下:

using MessageUI;
using UIKit;

public void SendSms(string phoneNumber, string message)
{
    if (MFMessageComposeViewController.CanSendText)
    {
        var smsController = new MFMessageComposeViewController();
        smsController.Recipients = new[] { phoneNumber };
        smsController.Body = message;
        
        // 发送完成后关闭界面
        smsController.Finished += (sender, args) =>
        {
            ((MFMessageComposeViewController)sender).DismissViewController(true, null);
        };
        
        // 获取当前页面的ViewController来弹出短信界面
        var rootVC = UIApplication.SharedApplication.KeyWindow.RootViewController;
        rootVC.PresentViewController(smsController, true, null);
    }
}

二、跨平台插件方案(免费,更便捷)

如果不想分别写Android和iOS的原生代码,可以用第三方插件Xam.Plugins.Messaging,它封装了各平台的短信、电话、邮件功能,使用起来更省心。

步骤:

  1. 在NuGet包管理器中搜索Xam.Plugins.Messaging,安装到你的共享项目(PCL/NetStandard)和各个平台项目。
  2. 在共享项目中直接调用:
using Plugin.Messaging;

public void SendSmsCrossPlatform(string phoneNumber, string message)
{
    var smsMessenger = CrossMessaging.Current.SmsMessenger;
    if (smsMessenger.CanSendSms)
    {
        smsMessenger.SendSms(phoneNumber, message);
    }
}

这个插件在Android上依然需要申请SEND_SMS权限,iOS上还是会弹出系统短信界面,和原生实现逻辑一致,但代码更简洁。

三、完全自动发送的免费方案(无用户交互)

如果你的需求是不需要用户手动确认,完全自动发送短信,那上面的方案在iOS上就行不通了,这时候可以用短信网关的免费试用服务,比如Twilio的免费额度(国外),或者国内阿里云、腾讯云的免费试用套餐。

以Twilio为例:

  1. 注册Twilio账号,获取免费试用额度和你的专属号码。
  2. 安装Twilio的NuGet包Twilio到你的项目。
  3. 调用API发送短信:
using Twilio;
using Twilio.Rest.Api.V2010.Account;

public void SendAutoSms(string phoneNumber, string message)
{
    // 替换成你的Twilio账号SID和Auth Token
    string accountSid = "你的Account SID";
    string authToken = "你的Auth Token";
    TwilioClient.Init(accountSid, authToken);

    var smsMessage = MessageResource.Create(
        body: message,
        from: new Twilio.Types.PhoneNumber("你的Twilio号码"),
        to: new Twilio.Types.PhoneNumber(phoneNumber)
    );
}

注意:免费试用有发送次数限制,且发送的短信会带有Twilio的标识,适合测试阶段使用。国内用户可以选择国内云服务商的免费短信套餐,不过大多需要实名认证。

总结

  • 如果接受用户交互(iOS必须):优先用原生API或Xam.Plugins.Messaging,完全免费,符合平台规范。
  • 如果需要无交互自动发送:选择短信网关的免费试用方案,适合测试或小额度发送需求。

内容的提问来源于stack exchange,提问作者mah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:45:04