Language/iOS,AOS

iOS Swift 공유하기

건담아빠 2024. 5. 20. 09:11

iOS 앱에서 공유하기 기능을 추가할 일이 생겼다, 다음을 위해 정리해두자.

1. React

class Common {
  ...
  
  static share(text) {
    if (Util.Browser.isAndroidApp()) {
      try {
        AndroidBridge.share(text);
      } catch (e) {}
      return true;
    } else if (Util.Browser.isIosApp()) {
      const message = {
        action: 'share',
        text: text,
      };
      window.webkit.messageHandlers.IosBridge1.postMessage(message);
      return true;
    }
    return false;
  }
  
  ...
}

 

2. Swift

...

// MARK: - iOS Bridge
// 웹 액션 정의 : WebAction을 구분하는데 사용되는 타입
enum WebAction: String {
    case setAppData
    case getAppData
    case getAppVersion
    case getVersionCode
    case loginWithKakao
    case loginWithNaver
    case loginWithFacebook
    case loginWithApple
    case windowFullPDF
    case windowFull
    case windowFrame
    case windowClose
    case windowCloseAndOpenerReload
    case getNotificationId
    case getDeepLink
    case share
}
extension MainViewController: WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        guard message.name == IOS_BRIDGE_NAME,
              let messages = message.body as? [String: Any],
              let action = messages["action"] as? String else { return }
        
        let webAction = WebAction(rawValue: action)
        
        // 공유할 text
        Utils.Log("@@@@@@@@@@@@@@@@@@@@@@@ \(action)")
        
        switch webAction {
        
        ...
            
        case .share:
            guard let text: String = messages["text"] as? String else { return }
            
            Utils.Log("##################### text : \(text)")
            
            var shareItems = [String]()
            shareItems.append(text)

            let activityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
            activityViewController.popoverPresentationController?.sourceView = self.view
            self.present(activityViewController, animated: true, completion: nil)
        
        ...
        
        default:
            Utils.Log("undefined action")
        }
    }
}

...

 

생각보다 너무 쉽게 되어버렸다..

 

참조

https://velog.io/@minji0801/iOS-Swift-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EB%98%90%EB%8A%94-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EA%B3%B5%EC%9C%A0%ED%95%98%EA%B8%B0