如何从React Native应用程序中以编程方式发送短信消息?

3

我希望能够通过编程方式在React Native应用程序中以后台方式发送短信。

我知道如何在代码中正常发送短信,但应用程序会打开默认的短信应用程序,这不是我想要的。

用户不应该按任何按钮发送短信,因为我的目标是在用户执行特定任务时通知一个电话号码。

我尝试查看Twilio,但它们没有提供React Native的API。

有人知道如何做到这一点吗?

3个回答

3

根据kdenz的回答,我在这里跟着教程操作:设置firebase函数

以下是我的代码,用于在firebase数据库值“visible”发生变化时向Twilio发送请求。

import * as functions from 'firebase-functions';
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

const twilio = require('twilio');
const accountSid = functions.config().twilio.sid;
const authToken = functions.config().twilio.token;

console.log(`Twilio account: ${accountSid}`);

const client = new twilio(accountSid, authToken);

const twilioNumber = 'xxx-xxx-xxx';

exports.textStatus = functions.database
    .ref('/users/{userId}/data/visible')
    .onUpdate(event => {
        return admin.database()
            .ref(`users/{userId}/data/`)
            .once('value')
            .then(snapshot => snapshot.val())
            .then(user=> {
                console.log(user[0]);

                const longitude = user.longi;
                const latitude = user.lati;
                const phoneNumber = user.phone;

                const textMessage = {
                    body: `See user position at Google: http://www.google.com/maps/place/${latitude},${longitude}`,
                    to: phoneNumber,
                    from: twilioNumber
                }

                return client.messages.create(textMessage);


            })
            .then(message => console.log(message.sid, 'success'))
            .catch(err => console.log(err));
    });

谢谢分享。你找到了在iOS上实现这个的方法吗? - Greg
你好,ScreenWatcher。该函数是作为 Firebase 函数创建的,如果 Android 和 iOS 应用程序已经设置了 Firebase,则可以使用它。我使用 React Native。 - Friis1978

2

我认为这只有在Android上才可能实现,可以看到这个已经被弃用的包https://www.npmjs.com/package/react-native-send-sms

对于iOS,我认为不行,可以看到如何在用户授权后通过编程方式发送文本消息?

要实现你想要的功能,你需要像Twilio这样的短信服务。然后你可以设置一个服务器(或云函数,成本较低且易于维护),从RN应用接收API调用,并将消息发送给所需的收件人。您还可以设置一些安全措施,以防止黑客滥用API。

或者,如果您不关心安全性(我强烈不建议这样做),您可以直接在应用程序中调用Twilio发送消息API,这是危险的,因为黑客可以轻松提取您的Twilio授权令牌并将其用于自己发送消息。


你好kdenz。非常感谢您的回答,我已经看到了这两个链接。我不认为我理解如何使其工作,您是在说,可以通过axios向Twilio api发送http请求来完成吗?或者我可以在AWS中设置一个Lambda函数吗?像那样发送短信似乎非常复杂? - Friis1978
1
也许我应该放弃,让用户自己按短信按钮。但这确实毁了应用程序的目的,因为应用程序的工作是在不强迫用户执行任何操作的情况下通知另一部手机用户的应用程序中正在发生的事情。 - Friis1978
使用Firebase,当此处的值发生更改时,发送短信怎么样? - Friis1978
@Friis1978 嗯,那也可以。您可以设置一个 Firebase 云函数来监听某些数据库值,当它们发生变化时,它会通过 Twilio 自动发送短信。https://firebase.google.com/docs/functions/ - kdenz
嗨,又见面了。终于成功了,只是按照这个教程设置了一个 Firebase 函数:https://www.youtube.com/watch?v=vIWXoaR_VnQ&t=420s - Friis1978

0

在Android上,可以通过编程的方式无需用户交互发送短信。

但是在iOS上,唯一可以在没有用户交互的情况下发送短信的方法是使用外部提供商,例如Twilio;但是消息将来自您服务器的号码,而不是用户的号码。

我已经回答了同类问题。看看这个有没有办法在Android和iOS上后台发送短信?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接