代码之家  ›  专栏  ›  技术社区  ›  Perry Hoekstra

从React Native整合本机短信

  •  0
  • Perry Hoekstra  · 技术社区  · 7 年前

    我正在尝试从React native中集成本机SMS文本功能。本机集成的原因是,目前没有任何React本机解决方案(如React本机sms或React本机通信)支持将图像作为附件发送。

    我接到了React Native给iOS的电话,但在iOS端,我收到了以下信息:

    Warning: Attempt to present <MFMessageComposeViewController: 0x10e86ba00> on <FooAppModule: 0x10de097e0> whose view is not in the window hierarchy!
    

    我的期望是MFMessageComposeViewController将显示从React本机应用程序发送的文本和图像,并允许用户按下send键。iOS中的当前代码块如下所示:

    @objc(FooAppModule)
    class FooAppModule: UIViewController, 
    MFMessageComposeViewControllerDelegate {
    
      var bridge: RCTBridge!
      var promiseRejectBlock: RCTPromiseRejectBlock!
    
       // Indicate whether or not a text message can be sent from the member's iOS device
      func canSendText() -> Bool {
        return MFMessageComposeViewController.canSendText()
      }
    
      // Configures and returns a MFMessageComposeViewController instance
      func configuredMessageComposeViewController(phoneNumber: String) {
        debugPrint("Phone number to be sent a text to", phoneNumber)
    
        let textMessageRecipients = [ phoneNumber ]
    
        let messageComposeVC = MFMessageComposeViewController()
        messageComposeVC.messageComposeDelegate = self  //  Make sure to set this property to self, so that the controller can be dismissed!
        messageComposeVC.recipients = textMessageRecipients
        messageComposeVC.body =  "Sending Text Message through SMS in Swift"
    
        self.present(messageComposeVC, animated: true, completion: nil)
      }
    
      // MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it
      func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) 
      {
        controller.dismiss(animated: true, completion: nil)
      }
    
      @objc func shareText(_ phoneNumber: String, imageBase64: String,
                   resolver resolve: @escaping RCTPromiseResolveBlock,
                   rejecter reject: @escaping RCTPromiseRejectBlock) -> Void     {
            if (canSendText()) {
              configuredMessageComposeViewController(phoneNumber: phoneNumber)
        }
      }
    }
    

    我错过了谜题的哪一部分?

    0 回复  |  直到 7 年前