React Native链接短信

22
现在RN支持跨平台链接,我想知道如何发送带有预设信息的短信。根据文档(https://facebook.github.io/react-native/docs/linking.html#content),可以尝试使用任何已安装应用程序打开给定的URL。您可以使用其他URL,比如位置(例如“geo:37.484847,-122.148386”),联系人或任何其他可以使用已安装应用程序打开的URL。
我的问题是,我应该遵循什么URI方案来打开带有预定义消息的短信?它是否跨平台?
谢谢。

1
可能是Android上的SMS URL的重复问题。 - Lane Rettig
1
不完全是重复,因为问题需要跨平台的解决方案,而实际上iOS略有不同。 - Rob Hogan
如果您想让用户从联系人中进行选择,请参考我的答案 - Akshay Soam
7个回答

23

您是否考虑过并尝试过使用sms:number?body=yourMessage

您可以在RFC 5724中了解更多相关信息。


6
iOS上的分隔符似乎是&。参见https://dev59.com/XaHia4cB1Zd3GeqPTnSn#47834556 - Rob Hogan

16

在“body”分隔符的平台之间存在差异 您可以使用以下代码使其正常工作:

function openUrl(url: string): Promise<any> {
  return Linking.openURL(url);
}
export function openSmsUrl(phone: string, body: string): Promise<any> {
  return openUrl(`sms:${phone}${getSMSDivider()}body=${body}`);
}
function getSMSDivider(): string {
  return Platform.OS === "ios" ? "&" : "?";
}

6
我创建了一个钩子来发送短信消息:
import { useCallback } from 'react'
import { Linking, Platform } from 'react-native'

export default () => {
  const onSendSMSMessage = useCallback(async (phoneNumber, message) => {
    const separator = Platform.OS === 'ios' ? '&' : '?'
    const url = `sms:${phoneNumber}${separator}body=${message}`
    await Linking.openURL(url)
  }, [])

  return onSendSMSMessage
}

我该如何使用这个钩子? - user14135278
1
1 - 创建一个钩子文件。它可以被命名为“useSendSMS”。 2 - 在你想要使用的组件中导入。 3 - 执行钩子。它将返回一个异步函数,该函数接收一个电话号码和一条消息。由于它是一个异步函数,请确保在try catch块中包装执行。 - Luan Eduardo
这个链接可能会对你有所帮助:https://reactjs.org/docs/hooks-custom.html - Luan Eduardo
如果我传递带有国家代码的电话号码,那么在iPad上发送按钮将无法激活,但如果我传递不带国家代码的电话号码,则iPad上的发送按钮将是激活状态。 - Neerav Shah

4

或者你可以简单地执行

url = `sms:${context.provider.state.driverPhoneNo}${Platform.OS === "ios" ? "&" : "?"}body=${""}`

Linking.openURL(url);

4

这应该适用于两个平台

 const operator = Platform.select({ios: '&', android: '?'});
 Linking.openURL(`sms:${operator}body=${options.title}`);

1
我很确定这不是React Native特有的问题,只是关于在Android上进行链接的问题。看一下:Android上的SMS URL

0

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