<aside> 💡 Channel Talk SDKはSwiftUIを公式的にサポートしていないため、SwiftUIに最適化していません。


こちらのガイドは公式の開発ドキュメントではないため最新バージョンと内容が異なる場合があります。 こちらのガイドは以下の環境で作成しています。

Xcode : 13.0 (13A233) CocoaPod : 1.10.1 Swift Package Manager : available Channel SDK - iOS : 9.1.2

</aside>

Installation

基本的にネイティブと同様で、こちらのガイドではCocoaPodsを使用しています。

XcodeバージョンとCocoaPodsバージョンによっては設定方法が異なる場合があります。

詳しくはこちらをご確認ください。

1. Initialize ChannelIO

After iOS 14 (without AppDelegate, SceneDelegate)

iOS 14以上でAppDelegateとSceneDelegateが自動的に生成されない場合

  1. AppDelegate classを生成し、以下のコードを作成します。
import ChannelIOFront

class AppDelegate: NSObject, UIApplicationDelegate {
  var window: UIWindow?
  
  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
  ) -> Bool {
    ChannelIO.initialize(application)
    return true
  }
}
  1. UIWindowを強く参照できるシングルトンオブジェクトを生成し、以下のコードを作成します。 例では、ChannelIOFrontManagerファイルを作成して使用しました。
class ChannelIOFrontManager {
  static let shared: ChannelIOFrontManager = ChannelIOFrontManager()
  
  private var channelWindow: UIWindow?
  
  func initChannelWindow() {
    if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
      channelWindow = ChannelIO.initializeWindow(with: scene)
    }
  }
}
  1. @main annotationとApp protocolを採用したApp構造体でwindowをinitializeします。 例では、SwiftUISampleAppです。
// initialize window

**@main**
struct SwiftUISampleApp: **App** {
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
  
  var body: some Scene {
    WindowGroup {
      RootView()
        .onAppear(perform: ChannelIOFrontManager.shared.initChannelWindow) // *最初の一度だけ実行する必要があります*
    }
  }
}
  1. ChannelIO Boot.ChannelIOのBootはbootが必要なところで使用しました。 例では、SomeView(使いたい箇所)のonAppearでbootしました。
// boot ChannelIO

struct SomeView : View {
		  ...

	var body: some View {
		ContentView()

		  ...

			.onAppear(perform: runChannelIO)
  }
}
  

private func runChannelIO() {

// bootOption 例
  let config = BootConfig()
  config.pluginKey = "your plugin key"
    
  ChannelIO.boot(with: config) { (status, user) in
    switch status {
    case .success:
      ChannelIO.showChannelButton()
      ChannelIO.showMessenger()
    default:
      print(status.rawValue)
    }
  }
}

<aside> 🚨 ChannelIO SDKを使用するためにはwindowのinitializeとbootが必要です。

</aside>