init method
Future<bool>
init(])
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;
}