我想将 Sirikit 集成到我的 flutter 应用程序中。因此我必须建立一个MethodChannel用于主机和客户端之间的通信。我希望 iOS 端调用 flutter 函数,并且该响应是 Siris 答案。 这是颤动的一面:
void nativeFunc() {
const platform = const MethodChannel("flutter.siri");
Future<dynamic> _handleMethod(MethodCall call) async {
if (call.method == "message") {
return api_request("Physics", call.arguments, 50);
}
}
platform.setMethodCallHandler(_handleMethod);
}
然后我必须在iOS端指定methodChannel:
//AppDelegate.swift
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let methodChannel = FlutterMethodChannel(name:"flutter.siri")
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
//IntentHandler.swift
func handle(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
// Implement your application logic to send a message here.
let userActivity = NSUserActivity(activityType: NSStringFromClass(INSendMessageIntent.self))
let response = methodChannel.invokeMethod()//this should invoke the MethodChannel-function from Flutter
completion(response)
}
我不是 Ios 开发人员,所以我不知道如何实际做到这一点。现在的问题是 IntentHandler.swift-File 无法访问方法通道数据,因为它是在另一个文件中声明的。我的 Intenthandler 文件如何调用 flutter 方法并用 Siri 响应?
我面临着类似的问题,但我能够让它发挥作用。
问题是 Siri 意图位于不同的目标中,因为如果需要,它们可以在后台运行,因此使用方法通道的通信实施起来会非常复杂(如果可能的话)。
我的方法是使用flutter扩展HomeWidget https://pub.dev/packages/home_widget
由于 Home 小部件也使用不同的目标,并且此扩展使用应用程序组和 UserDefaults 打开通信通道,因此我们可以使用相同的通信通道将数据发送到 Siri Intent。
只需按照 HomeWidget 扩展的配置指南并将 AppGroups 功能添加到您的跑步者 Target 以及您的 Siri 意图即可。 确保在所有这些中使用相同的组 ID,包括在 flutter 端:
HomeWidget.setAppGroupId('YOUR_GROUP_ID');
然后就可以使用扩展方法在flutter和swift之间发送和接收数据了。
这个问题解决了吗?我也遇到同样的问题,寻求帮助