如何在 React-Native 中为多个 phone 号码触发 SMS URI 重定向?

How to trigger SMS URI redirect in React-Native for multiple phone numbers?

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

以下代码目前是我正在尝试做的事情的示例。 generateURI() 的返回值稍后用于反应本机的 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" ? "&" : "?";
}

注意事项:

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

苹果还有一个很奇怪的声明说The URL string must not include any message text or other information.在下面link https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html 但这并不意味着它们不支持多个 phone 号码。

这对我有用:

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}`;