如何在React Native中为多个电话号码触发SMS URI重定向



所以基本上我有一个已经适用于android设备的代码,它的目的是用预先填充的文本触发设备的消息/短信应用程序。这也会在iOS上打开iMessage应用程序,消息已经成功预填,但不幸的是,它不支持多个电话号码。

下面的代码是我正在尝试做的一个示例。generateURI()的返回值稍后将用于react native的Linking.openURL()命令。

export function generateURI(arrayOfPhoneNumbers, event) {
var url = `sms:`
for(var i = 0; i < arrayOfPhoneNumbers.length; i++) {
url += `${arrayOfPhoneNumbers[i]},`
}
url = url.slice(0, -1); //remove last comma
url += `${getSMSDivider()}body=Test Message`
return url
}
function getSMSDivider() {
return Platform.OS === "ios" ? "&" : "?";
}

值得注意的事项:

许多URI方案模式和标准似乎没有得到苹果的尊重,因为它们在以下链接中列出:https://www.rfc-editor.org/rfc/rfc5724.例如:每个短信字段都应该使用字符?,但对于iOS设备,只有&有效,最重要的是,如果你将传递的字符串值编码为body=属性,android可以理解,但iPhone不可以。因此,不幸的是,在处理苹果自己的规则手册时,查看一个成文的标准并不是一个可行的解决方案。

此外,苹果在下面的链接上有一个非常奇怪的声明,说The URL string must not include any message text or other information.https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html但这并不意味着他们不支持多个电话号码。

这对我有效:

let numbers = '';
contacts.forEach((phoneNumber: string) => {
numbers += `${phoneNumber},`;
});
numbers = numbers.slice(0, -1);
const url = (Platform.OS === 'android')
? `sms:${numbers}?body=${text}`
: `sms:/open?addresses=${numbers}&body=${text}`;

最新更新