init method

  1. @override
Future<bool> init(
  1. dynamic backgroundMessageHandler(
    1. Map
    ), [
  2. String title = "Pushed",
  3. String body = "The service active"
])
override

Implementation

@override
Future<bool> init(Function(Map<dynamic, dynamic>) backgroundMessageHandler,
    [String title = "Pushed", String body = "The service active"]) async {
  //hpk
  String? hpkToken;
  try {
    await huawei.Push.turnOnPush();
    huawei.Push.getTokenStream.listen((event) async {
      hpkToken = event;
      await addLog(methodChannel, 'HpkDeviceToken: $hpkToken');
    });
    huawei.Push.onMessageReceivedStream.listen((event) async {
      var messageOfMap = event.toMap();
      messageOfMap["data"] = event.dataOfMap;
      var pushedMessage =
          AndroidFlutterPushedMessaging.convertMessage(messageOfMap);
      await addLog(methodChannel, 'Hpk onMessage: $pushedMessage');
      var token = await methodChannel.invokeMethod<String>('getToken');
      await FlutterPushedMessagingPlatform.confirmDelivered(
          token ?? "", pushedMessage["messageId"], "Hpk");
      var lastMessageId =
          await methodChannel.invokeMethod<String>('getLastMessageId');
      if (lastMessageId != pushedMessage["messageId"]) {
        await addLog(methodChannel, "Hpk processing message");
        FlutterPushedMessagingPlatform.messageController.sink
            .add(pushedMessage);
        await methodChannel.invokeMethod<bool>('setLastMessageId',
            {"lastMessageId": pushedMessage["messageId"]});
      }
    });

    huawei.Push.onNotificationOpenedApp.listen((event) async {
      var message = <String, dynamic>{};
      message["data"] = event["extras"];
      var pushedMessage =
          AndroidFlutterPushedMessaging.convertMessage(message);
      print("onClick");
      await clickOnPush(pushedMessage, "Hpk");
    });

    huawei.Push.registerBackgroundMessageHandler(
        huaweiMessagingBackgroundHandler);
    huawei.Push.getToken('');

    var initialHpkPush = await huawei.Push.getInitialNotification();
    if (initialHpkPush != null) {
      var message = <String, dynamic>{};
      message["data"] = initialHpkPush["extras"];
      initialPush = AndroidFlutterPushedMessaging.convertMessage(message);
      //await clickOnPush(pushedMessage, "Hpk");
    }
    for (var counter = 0; counter < 30; counter++) {
      if (hpkToken != null) break;
      await Future.delayed(const Duration(milliseconds: 100));
    }
  } catch (e) {
    await addLog(methodChannel, "Cant initialize Hpk");
  }
  //***********

  //Fcm
  String? fbToken;
  try {
    await Firebase.initializeApp();
    FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
    fbToken = await (FirebaseMessaging.instance.getToken());
  } catch (_) {
    await addLog(methodChannel, "Cant initialize Fcm");
  }
  if (fbToken != null) {
    await addLog(methodChannel, 'firebaseDeviceToken: $fbToken');
    FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
      var pushedMessage =
          AndroidFlutterPushedMessaging.convertMessage(message.toMap());
      await addLog(methodChannel, 'Firebase onMessage: $pushedMessage');
      var token = await methodChannel.invokeMethod<String>('getToken');
      await FlutterPushedMessagingPlatform.confirmDelivered(
          token ?? "", pushedMessage["messageId"], "Fcm");
      var lastMessageId =
          await methodChannel.invokeMethod<String>('getLastMessageId');
      if (lastMessageId != pushedMessage["messageId"]) {
        await addLog(methodChannel, "Fcm processing message");
        FlutterPushedMessagingPlatform.messageController.sink
            .add(pushedMessage);
        await methodChannel.invokeMethod<bool>('setLastMessageId',
            {"lastMessageId": pushedMessage["messageId"]});
      }
    });
  }
  //***********
  methodChannel.setMethodCallHandler(_handle);
  var token = await methodChannel.invokeMethod<String>('getToken');
  var newToken =
      await getNewToken(token ?? "", fcmToken: fbToken, hpkToken: hpkToken);
  if (token != newToken && newToken != "") {
    token = newToken;
    await methodChannel.invokeMethod<bool>('setToken', {"token": token});
  }
  if (token == "") return false;
  messageCallback = backgroundMessageHandler;
  final CallbackHandle? handle =
      PluginUtilities.getCallbackHandle(backgroundMessageHandler);
  final result = await methodChannel.invokeMethod<dynamic>('init', {
        "backgroundHandle": handle?.toRawHandle(),
        "title": title,
        "body": body
      }) ??
      false;
  if (!result) {
    await methodChannel.invokeMethod<bool>('setToken', {"token": ""});
    return false;
  }
  FlutterPushedMessagingPlatform.pushToken = token;
  if (initialPush != null) {
    print("Initial push");
    clickOnPush(initialPush!, "Hpk");
  }
  return true;
}