Flutter

Prev Next

Você pode adicionar Xtremepush aos seus apps Flutter rapidamente seguindo nossa integração nativa para Android e iOS, e então adicionando um canal de método para se comunicar do seu código Dart para a respectiva plataforma. Siga nosso guia abaixo para mostrar como isso pode ser feito.

Certifique-se de que seus aplicativos móveis estejam adicionados ao Xtremepush, seguindo os guias para Android e iOS.

O Xtremepush.dart arquivo e o código de integração podem ser baixados aqui.

Adição do canal do método

Adicione o Xtremepush.dart arquivo ao seu diretório principal de bibliotecas, ao lado do main.dart arquivo.

Android

Na sua MainActivity.java aula, adicione o canal do método Xtremepush adicionando o seguinte:

private static final String CHANNEL = "ie.imobile.xtremepush/flutter";
    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                .setMethodCallHandler(
                        (call, result) -> {
                            // Note: this method is invoked on the main thread.
                            switch (call.method) {
                                case "hitEvent":
                                    final String xpEvent = call.argument("xpEvent");
                                    mPushConnector.hitEvent(xpEvent);
                                    break;
                                case "hitTag":
                                    final String xpTag = call.argument("xpTag");
                                    mPushConnector.hitTag(xpTag);
                                    break;
                                case "hitTagWithValue":
                                    final String xpTagw = call.argument("xpTag");
                                    final String xpTagValue = call.argument("xpTagValue");
                                    mPushConnector.hitTag(xpTagw, xpTagValue);
                                    break;
                                case "setUser":
                                    final String user_id = call.argument("xp_user_id");
                                    mPushConnector.setUser(user_id);
                                    break;
                                case "setTempUser":
                                    final String temp_user_id = call.argument("xp_temp_user_id");
                                    mPushConnector.setTempUser(temp_user_id);
                                    break;
                                case "openInbox":
                                    mPushConnector.openInbox(this);
                                    break;
                                case "setSubscription":
                                    final boolean sub_status = call.argument("subscription_flag");
                                    mPushConnector.setSubscription(sub_status);
                                    break;
                                case "getInboxList":
                                    final int offset = call.argument("offset");
                                    final int limit = call.argument("limit");
                                    mPushConnector.inboxListWithOffset(this, offset, limit);
                                    break;
                                case "requestNotificationPermissions":
                                    mPushConnector.requestNotificationPermissions(this);
                                    break;
                            }
                        }
                );
    }
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
                .setMethodCallHandler { call: MethodCall, result: MethodChannel.Result? ->
                    when (call.method) {
                        "hitEvent" -> {
                            val xpEvent = call.argument<String>("xpEvent")
                            PushConnector.mPushConnector.hitEvent(xpEvent)
                        }
                        "hitTag" -> {
                            val xpTag = call.argument<String>("xpTag")
                            PushConnector.mPushConnector.hitTag(xpTag)
                        }
                        "hitTagWithValue" -> {
                            val xpTagw = call.argument<String>("xpTag")
                            val xpTagValue = call.argument<String>("xpTagValue")
                            PushConnector.mPushConnector.hitTag(xpTagw, xpTagValue)
                        }
                        "setUser" -> {
                            val user_id = call.argument<String>("xp_user_id")
                            PushConnector.mPushConnector.setUser(user_id)
                        }
                        "setTempUser" -> {
                            val temp_user_id = call.argument<String>("xp_temp_user_id")
                            PushConnector.mPushConnector.setTempUser(temp_user_id)
                        }
                        "openInbox" -> PushConnector.mPushConnector.openInbox(this)
                        "setSubscription" -> {
                            val sub_status = call.argument<Boolean>("subscription_flag")!!
                            PushConnector.mPushConnector.setSubscription(sub_status)
                        }
                    }
                }
    }
    companion object {
        private const val CHANNEL = "ie.imobile.xtremepush/flutter"
    }

iOS

Na chamada do didFinishLaunching seu AppDelegate, adicione o canal do método como abaixo:

let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
    let xtremepushChannel = FlutterMethodChannel(name: "ie.imobile.xtremepush/flutter",
                                              binaryMessenger: controller.binaryMessenger)
    xtremepushChannel({
      (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
        switch call.method {
        case "hitEvent":
            let xpEvent = call.arguments["xpEvent"] as! String
            XPush.hitEvent(xpEvent)
        case "hitTag":
            let xpTag = call.arguments["xpTag"] as! String;
            XPush.hitTag(xpTag)
        case "hitTagWithValue":
            let xpTag = call.arguments["xpTag"] as! String;
            let xpTagValue = call.arguments["xpTagValue"] as! String;
            XPush.hitTag(xpTag, withValue: xpTagValue)
        case "setUser":
            let userId = call.arguments["xp_user_id"] as! String;
            XPush.setUser(userId)
        case "setTempUser":
            let userId = call.arguments["xp_temp_user_id"] as! String;
            XPush.setTempUser(userId)
        case "openInbox":
            XPush.openInbox()
        case "setSubscription":
            let subscription_flag = (call.arguments["xp_temp_user_id"] as! NSNumber).boolValue;
            XPush.setSubscription(subscription_flag)
        }
    })
[xtremepushChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
        if ([@"hitEvent" isEqualToString:call.method]) {
            NSString *xpEvent = call.arguments[@"xpEvent"];
            [XPush hitEvent: xpEvent];
        }
        if ([@"hitTag" isEqualToString:call.method]) {
            NSString *xpTag = call.arguments[@"xpTag"];
            [XPush hitTag: xpTag];
        }
        if ([@"hitTagWithValue" isEqualToString:call.method]) {
            NSString *xpTag = call.arguments[@"xpTag"];
            NSString *xpTagValue = call.arguments[@"xpTagValue"];
            [XPush hitTag: xpTag withValue:xpTagValue];
        }
        if ([@"setUser" isEqualToString:call.method]) {
            NSString *xpUser = call.arguments[@"xp_user_id"];
            [XPush setUser: xpUser];
        }
        if ([@"setTempUser" isEqualToString:call.method]) {
            NSString *xpUser = call.arguments[@"xp_temp_user_id"];
            [XPush setTempUser: xpUser];
        }
        if ([@"openInbox" isEqualToString:call.method]) {
            [XPush openInbox];
        }
        if ([@"setSubscription" isEqualToString:call.method]) {
            BOOL subscription_flag = [call.arguments[@"subscription_flag"] boolValue];
            [XPush setSubscription: subscription_flag];
        }
      }];

Chamando funções Xtremepush a partir do Dart

No seu arquivo Dart, importe Xtremepush do arquivo Xtremepush.dart:

import 'Xtremepush.dart';

Você pode então chamar as funções usando o seguinte:

Xtremepush.hitEvent("string");
Xtremepush.hitTag("string");
Xtremepush.hitTagWithValue("string", "string");
Xtremepush.hitEvent("string");
Xtremepush.setUser("string");
Xtremepush.setTempUser("string");
Xtremepush.openInbox();
Xtremepush.getInboxList(offset, limit);
Xtremepush.setSubscription(true/false);

Certifique-se de definir o ID do usuário

Recomenda-se que, nesta fase, você use nosso método SDK para definir IDs de usuário, seguindo nosso guia dedicado para garantir que os dispositivos possam ser associados e direcionados em suas campanhas por seu próprio identificador único.