【问题标题】:How to send sms messages from a React Native App programmatically ?如何以编程方式从 React Native App 发送短信?
【发布时间】:2018-04-06 19:51:32
【问题描述】:

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

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

用户不应该按下任何按钮来发送短信,因为我的目标是每次用户在应用程序中执行特定任务时通知电话号码。

我试过查看Twilio,但他们没有为 React Native 提供 api。

有人知道我该怎么做吗?

【问题讨论】:

    标签: reactjs react-native twilio twilio-api


    【解决方案1】:

    根据kdenz的回答,我在这里按照教程进行操作:Seeting up a firebase function

    这是我在 Firebase 数据库值“可见”发生变化时向 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 做到这一点?
    • 你好 ScreenWatcher,这个函数是作为一个 firebase 函数,如果它们是用 firebase 设置的,它将适用于 android 和 ios 应用程序。我使用本机反应。
    【解决方案2】:

    我认为这只有在 Android 上才有可能,正如在这个已弃用的包 https://www.npmjs.com/package/react-native-send-sms 中看到的那样

    对于 iOS,我不这么认为,如 How to programmatically send a text message after the user has given permission? 所示

    要实现您想要的,您需要像 Twilio 这样的 SMS 服务。然后,您可以设置一个服务器(或一个成本最低且易于维护的云功能),它接收来自您的 RN 应用程序的 API 调用,并将消息发送给所需的接收者。然后,您还可以设置一些安全措施,以防止黑客向 API 发送垃圾邮件。

    或者如果您不关心安全性(我强烈不推荐),您可以直接在您的应用程序中调用 Twilio 发送消息 API,这很危险,因为黑客可以轻松提取您的 Twilio 授权令牌并使用它来为自己发送消息。

    【讨论】:

    • 你好 kdenz。非常感谢您的回答,我已经看到了两个链接。我想我不明白如何让它工作,你是在说,通过 axios 向 Twilio api 发送一个 http 请求可以做什么?或者我可以在 AWS 中设置一个 Lambda 函数吗?发送这样的短信似乎很复杂?
    • 或许,我应该放弃,让用户按下短信按钮。但这确实破坏了应用程序的用途,因为应用程序的工作是在用户应用程序中发生某些事情时通知另一部手机,而不强制用户执行任何操作。
    • 当这里的值发生变化时,使用firebase并发送短信怎么样?
    • @Friis1978 是的,这也可以。您可以设置一个监听某些数据库值的 firebase 云功能,当它发生变化时,它会自动通过 twilio 发送短信。 firebase.google.com/docs/functions
    • 嘿嘿,终于成功了,只是按照本教程设置了一个firebase函数:youtube.com/watch?v=vIWXoaR_VnQ&t=420s
    【解决方案3】:

    在android上,可以通过编程方式从用户号码without user interaction发送短信。

    但在 IOS 上,无需用户交互即可发送 SMS 的唯一方法是使用 Twilio 等外部提供商;但消息将来自您的服务器号码,而不是来自用户。

    我已经回答了同样的问题。看一下这个 Is there anyway to send sms in background for both Android & IOS?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 2011-04-15
      • 1970-01-01
      • 2010-09-05
      • 2014-05-09
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多