WindVane ミニアプリ コンテナーを Flutter アプリに統合すると、Flutter アプリで WindVane を使用してミニアプリを読み込むことができます。
手順
WindVane ミニアプリ コンテナーを Flutter アプリに統合するには、WindVane SDK をネイティブアプリに統合し、MethodChannel を使用してネイティブアプリで WindVane SDK によって提供されるメソッドを呼び出してミニアプリを開く必要があります。次の操作を実行します。
WindVane SDK をネイティブ Android アプリまたは iOS アプリに統合します。
MethodChannel
インスタンスを Flutter で作成して、Flutter とネイティブアプリ間の通信を有効にし、呼び出すメソッドを定義します。Android アプリまたは iOS アプリで
MethodChannel
によって定義されたメソッドを実装します。作成した
MethodChannel
インスタンスを Flutter で使用して、ネイティブアプリで定義されたメソッドを呼び出します。
手順 1: WindVane をネイティブアプリに統合する
WindVane をネイティブアプリに統合する方法の詳細については、次のトピックをご参照ください。
手順 2: Flutter で MethodChannel インスタンスを作成する
MethodChannel
インスタンスを Flutter で作成して、Flutter とネイティブアプリ間の通信を有効にします。サンプルコード:
class WindVaneMiniAppManager {
static const MethodChannel channel = const MethodChannel("windvane_miniapp");
}
ビジネス要件に基づいて MethodChannel
をチャネル名に設定できます。上記のコードの windvane_miniapp
は参照用にのみ提供されています。
手順 3: ネイティブアプリで MethodChannel を実装する
Android
FlutterActivity
を継承します。configureFlutterEngine
メソッドを実装して、MethodChannel
インスタンスを作成します。重要ネイティブアプリで MethodChannel に指定するチャネル名は、手順 2: Flutter で MethodChannel インスタンスを作成する で Flutter の MethodChannel に指定したチャネル名と同じである必要があります。
次のサンプルコードでは、3 つのメソッドが定義されています。
loadMiniApp: ミニアプリを開きます。
initWindVaneMiniApp: WindVane を初期化します。
getMiniApps: ミニアプリをクエリします。
@Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); GeneratedPluginRegistrant.registerWith(flutterEngine); MethodChannel channel = new MethodChannel(flutterEngine.getDartExecutor(), WINDVANE_MINIAPP); channel.setMethodCallHandler((methodCall, result) -> { String method = methodCall.method; if ("initMiniApp".equals(method)) { initMiniApp(result); } else if ("getMiniAppList".equals(method)) { getMiniAppList(result); } else if ("openMiniapp".equals(method)) { openMiniApp(methodCall, result); }}); }
MethodCall.method
を使用して、メソッドの名前をクエリできます。MethodCall.argument("${key}")
を使用して、メソッドのパラメーターをクエリできます。メソッドの呼び出し後に返される
MethodChannel.Result.success
またはMethodChannel.Result.error
を使用して、メソッドの結果を確認できます。
iOS
FlutterViewController
を継承します。MethodChannel
インスタンスを作成します。@interface EMASMainViewController : FlutterViewController @end @interface EMASMainViewController () @property (nonatomic, strong) FlutterMethodChannel* messageChannel; @end @implementation EMASMainViewController - (void)viewDidLoad { [super viewDidLoad]; [self configMessageChannel]; } -(void) configMessageChannel{ // 現在の ViewController を取得します。 // FlutterViewController* controller = (FlutterViewController*)[UIApplication sharedApplication].delegate.window.rootViewController; self.messageChannel = [FlutterMethodChannel methodChannelWithName:@"windvane_miniapp" binaryMessenger:self.binaryMessenger]; __weak __typeof__(self) weakSelf = self; [self.messageChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) { NSLog(@"call method is %@",call.method); __strong typeof(weakSelf) strongSelf = weakSelf; NSString *method = call.method; if ([method isEqualToString:@"initMiniApp"]) { [strongSelf initWindVaneMiniApp:call result:result]; } else if ([method isEqualToString:@"openMiniapp"]) { [strongSelf loadMiniApp:call result:result]; } else if ([method isEqualToString:@"getMiniAppList"]) { [strongSelf getMiniApps:call result:result]; } }]; } @end
手順 4: MethodChannel を呼び出す
作成した MethodChannel インスタンスを Flutter で使用して、ネイティブアプリで定義されたメソッドを呼び出します。サンプルコード:
WindVaneMiniAppManager.channel.invokeMethod(
"openMiniapp", {'appId': appId}).then((value) => {});
invokeMethod
は Future オブジェクトを返します。