一、正常步驟,用戶操作原生并告知RN
項(xiàng)目要用到原生收到推送時,給JS發(fā)送通知钱慢,
首先找了這篇16年文章 : http://blog.csdn.net/pz789as/article/details/52837853,參照前輩描述卿堂,很詳盡
繼承了RCTEventEmitter這個類束莫,用來發(fā)送通知的:
而后實(shí)現(xiàn)這兩個方法,
二草描、然后就是坑了:bridge is not set.
當(dāng)用戶操作觸發(fā)時調(diào)用sendEventWithName這個方法時览绿,就會出現(xiàn)下面這個問題了:
三、解決方案
使用單例解決這個問題:
+ (id)allocWithZone:(NSZone *)zone {
static XGPushManager *pushManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
pushManager = [super allocWithZone:zone];
});
return pushManager;
}
四穗慕、原生被動接收通知時饿敲,再通知RN
當(dāng)推送來時,只能再AppDelegate中拿到逛绵,這時候創(chuàng)建的這個類并不知道這個事件怀各,因此要先給這個類注冊通知:
+ (id)allocWithZone:(NSZone *)zone {
static XGPushManager *pushManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
pushManager = [super allocWithZone:zone];
[[NSNotificationCenter defaultCenter] addObserver:pushManager selector:@selector(receivePushNotificateRN:) name:@"EventReminder" object:nil];
});
return pushManager;
}
而后在需要的地方發(fā)送該通知就好了倔韭,這時候,RN就同樣的能接收到了瓢对。
(注意發(fā)送名字和在工具類中注冊的名字一樣寿酌。 可以與通知RN的名字不一樣)
[[NSNotificationCenter defaultCenter] postNotificationName:@"EventReminder" object:@{@"1":@"2"}];
參考文章:
1、https://www.v2ex.com/t/424276#r_5232907
2硕蛹、http://www.reibang.com/p/8bc6d699b471