Получить токен FCM с прямого канала FCM - PullRequest
0 голосов
/ 15 октября 2019

Я разрабатываю каркас касания какао (используя цель c) для обработки уведомлений от FCM. Просматривая документацию, я обнаружил, что существует способ установить прямой канал между FCM и приложением IOS (минуя APNS), используя FIRMessaging delegate и задав для свойства shouldEstablishDirectChannel значение YES. Для получения экземпляра FIRMessaging существует метод класса;messaging. Я сомневаюсь, что если я создам экземпляр (с messaging методом) этого класса внутри моей платформы (и я делаю другие вещи, такие как установка делегата для обработки токена, получающего сообщения).

  1. как мне сохранить этот экземпляр живым, чтобы продолжать получать сообщения от FCM?
  2. это не будет уничтожено в любой момент времени, и я перестану получать сообщения от 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.

...