Kotlin Multiplatform iOS — FirebaseBridge (Objective-C) не вызывается из iosMain (FirebasePushNotifierImpl.init не запусIOS

Программируем под IOS
Ответить
Anonymous
 Kotlin Multiplatform iOS — FirebaseBridge (Objective-C) не вызывается из iosMain (FirebasePushNotifierImpl.init не запус

Сообщение Anonymous »

У меня есть модуль KMP, использующий собственный мост в Objective-C/Swift для FCM. Android работает нормально, но в iOS методы FirebaseBridge не вызываются из iosMain. Кажется, FirebasePushNotifierImpl либо не инициализируется должным образом, либо FirebaseBridge.initializeFirebase() никогда не запускается.
git: https://github.com/Timurandrweb/KotlinProject_7_FCM
Соответствующие файлы:
1) Kotlin (iosMain) — FirebasePushNotifierImpl.kt

Код: Выделить всё

internal class FirebasePushNotifierImpl : PushNotifier {

private val scope =
CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)

init {
scope.launch {
FirebaseBridge.initializeFirebase() // expected to call iOS code
}
}

// getToken, deleteToken, subscribe, etc.
}
2) cinterop .def

Код: Выделить всё

language = Objective-C
package = firebasebridge
headers = FirebaseBridgeObjC.h
compilerOpts = -I${projectDir}/../../iosApp/iosApp
3) Реализация Swift

Код: Выделить всё

@objc public class FirebaseBridge: NSObject {

@objc public static func initializeFirebase() {
DispatchQueue.main.async {
if FirebaseApp.app() == nil {
FirebaseApp.configure()
}
UNUserNotificationCenter.current().delegate =
UIApplication.shared.delegate as? UNUserNotificationCenterDelegate
UIApplication.shared.registerForRemoteNotifications()
}
}

// getToken, deleteToken, subscribe, unsubscribe...
}
4) Заголовок Objective-C

Код: Выделить всё

@interface FirebaseBridge : NSObject
+ (void)initializeFirebase;
+ (void)getToken:(FBTokenCallback)completion;
+ (void)deleteToken:(FBVoidCallback)completion;
+ (void)subscribeToTopic:(NSString*)topic;
+ (void)unsubscribeFromTopic:(NSString*)topic;
@end
Ожидаемое поведение:

Код: Выделить всё

FirebasePushNotifierImpl
инициализируется и выполняется FirebaseBridge.initializeFirebase() (я должен увидеть выходные данные NSLog, а FCM регистрирует токен устройства).
Фактическое поведение:

Нет журналов от FirebaseBridge, токен устройства не зарегистрирован. Похоже, мост Kotlin → Objective-C не вызывается. Сборка прошла успешно, ошибок компиляции нет.
https://github.com/Timurandrweb/KotlinProject_7_FCM

Подробнее здесь: https://stackoverflow.com/questions/798 ... om-iosmain
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»