Я разрабатываю каркас касания какао (используя цель c) для обработки уведомлений от FCM. Просматривая документацию, я обнаружил, что существует способ установить прямой канал между FCM и приложением IOS (минуя APNS), используя FIRMessaging delegate
и задав для свойства shouldEstablishDirectChannel
значение YES. Для получения экземпляра FIRMessaging существует метод класса;messaging
. Я сомневаюсь, что если я создам экземпляр (с messaging
методом) этого класса внутри моей платформы (и я делаю другие вещи, такие как установка делегата для обработки токена, получающего сообщения).
- как мне сохранить этот экземпляр живым, чтобы продолжать получать сообщения от FCM?
- это не будет уничтожено в любой момент времени, и я перестану получать сообщения от FCM?
У меня есть этот фрагмент кода в методе Class класса внутри моей структуры. Этот метод вызывается на + load, который я переопределил из NSObject. Который, согласно документации Apple, выполняется при добавлении класса в целевую среду выполнения C.
FIRMessaging *firmessaging = [FIRMessaging messaging];
FCMDelegate * delegateObject = [[FCMDelegate alloc] init];
firmessaging.shouldEstablishDirectChannel = YES;
firmessaging.delegate = delegateObject;
delegateObject
соответствует протоколу FIRMessagingDelegate
, поэтому он реализует didReceiveRegistrationToken
и didReceiveRemoteMessage
Внутри didReceiveRegistrationToken У меня есть:
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString * defaultToken = [defaults objectForKey:@"token"];
if(defaultToken == nil)
{
[defaults setObject:fcmToken forKey:@"token"];
}
}
Моя проблема в том, что я не получаю токен от FCM.