Flutter iOS通信插件intercom_ios的使用

Flutter iOS通信插件intercom_ios的使用

intercom_ios

intercom_iosintercom_flutter_plugin 的 iOS 实现。

使用

此插件已被推荐使用,这意味着你可以直接使用 intercom_flutter_plugin。当你这样做时,此插件会自动包含在你的应用中,因此你不需要在 pubspec.yaml 中添加它。

但是,如果你导入此包以直接使用其 API,则应像往常一样将其添加到 pubspec.yaml 中。

以下是一个完整的示例,展示如何在 Flutter 应用中使用 intercom_ios 插件。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:intercom_platform_interface/intercom_platform_interface.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // TODO: 确保添加你的 Intercom 工作区的密钥。
  await IntercomPlatform.instance.initialize(
    appId: 'your_app_id',
    iosApiKey: 'your_ios_api_key',
  );
  runApp(const MaterialApp(home: HomePage()));
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  StreamSubscription<dynamic>? _streamSubscription;

  @override
  void dispose() {
    _streamSubscription?.cancel();
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
    // 监听未读消息流
    _streamSubscription = IntercomPlatform.instance.getUnreadStream().listen(
          (event) => debugPrint('UnreadStream EVENT: $event'),
          onError: (e, stack) => debugPrint('UnreadStream ERROR: $e; stack: $stack'),
          onDone: () => debugPrint('UnreadStream DONE'),
        );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Intercom 示例应用'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            // 显示消息中心按钮
            TextButton(
              onPressed: () {
                IntercomPlatform.instance.logout();
                IntercomPlatform.instance.loginIdentifiedUser(
                  userId: '123456789',
                  email: 'example@gmail.com',
                  statusCallback: IntercomStatusCallback(
                    onSuccess: () async {
                      await IntercomPlatform.instance.displayMessenger();
                      await Future.delayed(const Duration(seconds: 5), () {
                        IntercomPlatform.instance.hideMessenger();
                      });
                    },
                    onFailure: (IntercomError error) {
                      debugPrint(error.toString());
                    },
                  ),
                );
              },
              child: const Text('显示消息中心'),
            ),
            // 显示启动器按钮
            TextButton(
              onPressed: () {
                IntercomPlatform.instance.setLauncherVisibility(IntercomVisibility.visible);
              },
              child: const Text('显示启动器'),
            ),
            // 隐藏启动器按钮
            TextButton(
              onPressed: () {
                IntercomPlatform.instance.setLauncherVisibility(IntercomVisibility.gone);
              },
              child: const Text('隐藏启动器'),
            ),
            // 显示帮助中心按钮
            TextButton(
              onPressed: () {
                IntercomPlatform.instance.displayHelpCenter();
              },
              child: const Text('显示帮助中心'),
            ),
          ],
        ),
      ),
    );
  }
}

说明

  1. 初始化

    await IntercomPlatform.instance.initialize(
      appId: 'your_app_id',
      iosApiKey: 'your_ios_api_key',
    );
    

    main 函数中调用 initialize 方法来初始化插件,并传入你的应用 ID 和 iOS API 密钥。

  2. 监听未读消息流

    _streamSubscription = IntercomPlatform.instance.getUnreadStream().listen(
          (event) => debugPrint('UnreadStream EVENT: $event'),
          onError: (e, stack) => debugPrint('UnreadStream ERROR: $e; stack: $stack'),
          onDone: () => debugPrint('UnreadStream DONE'),
        );
    

    初始化时订阅未读消息流,并在收到事件、错误或完成时进行处理。

  3. 显示和隐藏消息中心

    onPressed: () {
      IntercomPlatform.instance.logout();
      IntercomPlatform.instance.loginIdentifiedUser(
        userId: '123456789',
        email: 'example@gmail.com',
        statusCallback: IntercomStatusCallback(
          onSuccess: () async {
            await IntercomPlatform.instance.displayMessenger();
            await Future.delayed(const Duration(seconds: 5), () {
              IntercomPlatform.instance.hideMessenger();
            });
          },
          onFailure: (IntercomError error) {
            debugPrint(error.toString());
          },
        ),
      );
    }
    

    这段代码展示了如何登录并显示消息中心,5秒后隐藏消息中心。

  4. 显示和隐藏启动器

    onPressed: () {
      IntercomPlatform.instance.setLauncherVisibility(IntercomVisibility.visible);
    }
    
    onPressed: () {
      IntercomPlatform.instance.setLauncherVisibility(IntercomVisibility.gone);
    }
    

    这两段代码分别用于显示和隐藏启动器。

  5. 显示帮助中心

    onPressed: () {
      IntercomPlatform.instance.displayHelpCenter();
    }
    

更多关于Flutter iOS通信插件intercom_ios的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter iOS通信插件intercom_ios的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 intercom_ios 插件在 Flutter 中与 iOS 进行通信的示例代码。这个插件允许你在 Flutter 应用中调用原生 iOS 代码,并获取结果。

首先,你需要确保在 pubspec.yaml 文件中添加了 intercom_ios 依赖项:

dependencies:
  flutter:
    sdk: flutter
  intercom_ios: ^最新版本号  # 请替换为最新的版本号

然后,运行 flutter pub get 来安装依赖项。

接下来,你需要在 iOS 项目中进行一些配置。打开 ios/Runner/Info.plist 文件,并添加必要的配置(具体配置根据 intercom_ios 插件的文档要求来)。

然后,在 Flutter 代码中,你可以如下使用 intercom_ios 插件:

import 'package:flutter/material.dart';
import 'package:intercom_ios/intercom_ios.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String resultFromNative = "";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Intercom iOS Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Result from native code: $resultFromNative'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _callNativeFunction,
                child: Text('Call Native Function'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> _callNativeFunction() async {
    // 调用原生iOS代码
    try {
      String result = await IntercomIos.callNativeFunction("exampleFunction", arguments: {"key": "value"});
      setState(() {
        resultFromNative = result;
      });
    } catch (e) {
      setState(() {
        resultFromNative = "Error: ${e.message}";
      });
    }
  }
}

在上面的代码中,我们定义了一个简单的 Flutter 应用,其中包含一个按钮和一个显示结果的文本。当用户点击按钮时,_callNativeFunction 方法会被调用,该方法使用 IntercomIos.callNativeFunction 方法来调用原生 iOS 代码。

注意:IntercomIos.callNativeFunction 方法中的 "exampleFunction" 是你需要在原生 iOS 代码中实现的方法名,arguments 是传递给原生方法的参数。

接下来,你需要在 iOS 原生代码中实现这个方法。打开 ios/Runner/AppDelegate.swift 或相应的文件,并添加如下代码:

import UIKit
import Flutter
import intercom_ios  // 确保导入了插件

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    
    // 注册原生方法供 Flutter 调用
    let channel = FlutterMethodChannel(name: "com.example.flutter/intercom_ios", binaryMessenger: self.flutterEngine?.binaryMessenger)
    channel.setMethodCallHandler({
      (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
      
      if call.method == "exampleFunction" {
        guard let arguments = call.arguments as? [String: Any] else {
          result("Invalid arguments")
          return
        }
        
        // 处理传递过来的参数并返回结果
        let resultString = "Received \(arguments["key"] ?? "nil") from Flutter"
        result(resultString)
      } else {
        result(FlutterMethodNotImplemented)
      }
    })
    
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

在这个示例中,我们在 AppDelegate 中注册了一个名为 com.example.flutter/intercom_iosFlutterMethodChannel,并设置了方法调用处理器。当 Flutter 调用 exampleFunction 时,原生 iOS 代码会接收参数并返回一个结果。

请注意,intercom_ios 插件的具体用法和 API 可能会有所不同,因此请务必参考插件的官方文档和示例代码。上述代码仅为示例,可能需要根据实际情况进行调整。

回到顶部