Флаттер канал и Facebook AppEventLogger - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь вызвать функцию из трепетания по событию onTap и передать некоторые аргументы в родной Android.Пожалуйста, обратите внимание, что я больше являюсь разработчиком PHP / JavaScript, я Kotlin virgin.

Пока мне удалось сделать это, используя:

static const platform = const MethodChannel('foo.bar/example');

void _onTap() {
   var arguments = {'name': widget.recipe.name, 'id': widget.recipe.id.toString()};
   platform.invokeMethod('setPageView', arguments);
}

Затем в MainActivity.kt

class MainActivity : FlutterActivity() {
private val channel: String = "foo.bar/example"

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)

    val logger = AppEventsLogger.newLogger(this)


    MethodChannel(flutterView, channel).setMethodCallHandler(MethodChannel.MethodCallHandler(fun(methodCall: MethodCall, result: MethodChannel.Result) {
        if (methodCall.method.equals("setPageView")) {
            val params = Bundle()

            params.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "recipe")
            params.putString(AppEventsConstants.EVENT_PARAM_CONTENT, methodCall.argument("recipe"))
            params.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, methodCall.argument("id"))

            logger.logEvent(AppEventsConstants.EVENT_NAME_VIEWED_CONTENT, 0.0, params)

            logger.logEvent("pageView", 0.0, params)

            System.out.println("Called setPageView.")

        }
    }))
  }
}

Проблема в том, что когда я захожу внутрь MethodCallHandler, событие по какой-то причине не отправляется в facebook.Но если я зарегистрирую что-то прямо под

val logger = AppEventsLogger.newLogger(this)

Событие успешно отправлено на Facebook.

Код внутри MethodCallHandler выполняется, так что это не проблема.

Есть идеи, что я сделал не так?

Спасибо

1 Ответ

0 голосов
/ 05 июня 2019

Решено путем создания содержимого MethodCallHandler как автономного метода в классе MainActivity

class MainActivity : FlutterActivity() {
    private val channel: String = "foo.bar/example"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        GeneratedPluginRegistrant.registerWith(this)

        MethodChannel(flutterView, channel).setMethodCallHandler(
                MethodChannel.MethodCallHandler(
                        fun(methodCall: MethodCall, result: MethodChannel.Result) {
                            if (methodCall.method.equals("setPageView")) {
                                logPageView(methodCall.argument("name"), methodCall.argument("id"))
                            }
                        }
                )
        )
    }

    fun logPageView(name: String?, id: String?) {
        val logger = AppEventsLogger.newLogger(this)
        val params = Bundle()

        params.putString(AppEventsConstants.EVENT_PARAM_CONTENT_TYPE, "recipe")
        params.putString(AppEventsConstants.EVENT_PARAM_CONTENT, name)
        params.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, id)
        params.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "EUR")

        logger.logEvent(AppEventsConstants.EVENT_NAME_VIEWED_CONTENT, 0.0, params)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...