我正在开发可可接触框架(使用目标c)来处理来自FCM的通知。查看文档,我发现有一种方法可以使用FIRMessaging delegate
并将shouldEstablishDirectChannel
属性设置为YES,在FCM和IOS应用程序之间建立直接通道(绕过APNS)。为了获得FIRMessaging的实例,有一个类方法; messaging
。我的疑问是,如果我在框架内创建该类的实例(使用messaging
方法)(我做其他事情,例如设置用于处理接收消息的令牌的委托)。
我在框架内部的类的Class方法中拥有这段代码。在从NSObject覆盖的+ load上调用此方法。根据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收到令牌。