本文描述的内容为 iOS 系统 API 使用方法,与 SDK 的 API 使用方法无关。您在使用融云 RTC SDK 的屏幕共享拓展时可以通过以下方案实现信息通讯。
我们可以使用系统级的通知中心 CFNotificationCenter 来实现拓展间通知通信,使用时和 NSNotificationCenter 类似,注意监听和移除。
示例代码:
1、 宿主 App 需要注册两个监听,CFNotificationCenter 用来接收拓展通知,NSNotificationCenter 类型的用来在宿主收到拓展通知后,在宿主 App 中进一步执行通知方法:
//注册宿主 App 处理事件的监听
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveExtensionMessageNotification:)
name:@"testNotification"
object:self];
//注册 CFNotificationCenter 监听
- (void)registerForNotificationsWithIdentifier{
[self unregisterForNotificationsWithIdentifier];
CFNotificationCenterRef const center = CFNotificationCenterGetDarwinNotifyCenter();
CFNotificationCenterAddObserver(center, (__bridge const void *)(self),observerCFNotification,
CFSTR("ScreenShare Start"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
}
void observerCFNotification(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
// 处理 Extension 的通知
//此处应该发送 NSNotificationCenter 的通知,然后在该通知中做自己的操作
[[NSNotificationCenter defaultCenter] postNotificationName:@"testNotification"
object:(__bridge NSObject *)(observer)
userInfo:@{@"identifier":(__bridge NSString *)name}];
}
//移除监听
- (void)unregisterForNotificationsWithIdentifier {
CFNotificationCenterRef noti = CFNotificationCenterGetDarwinNotifyCenter ();
CFNotificationCenterRemoveObserver(noti, (__bridge const void *)(self), CFSTR("ScreenShare Start"), NULL);
}
//拓展中,在想要发送通知的地方实现:
//发送通知
CFNotificationCenterRef noti = CFNotificationCenterGetDarwinNotifyCenter();
CFNotificationCenterPostNotification(noti, CFSTR("ScreenShare Start"), NULL,NULL, YES);