所以基本上我有一个已经适用于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}`;