[ReactNative] Put launchOptions in RCTPushNotificationManager
This commit is contained in:
Родитель
06125009dd
Коммит
5f538b2284
|
@ -15,12 +15,10 @@ function renderApplication(RootComponent, initialProps, rootTag) {
|
||||||
rootTag,
|
rootTag,
|
||||||
'Expect to have a valid rootTag, instead got ', rootTag
|
'Expect to have a valid rootTag, instead got ', rootTag
|
||||||
);
|
);
|
||||||
var pushNotification = initialProps.launchOptions &&
|
var initialNotification = PushNotificationIOS.popInitialNotification();
|
||||||
initialProps.launchOptions.remoteNotification &&
|
|
||||||
new PushNotificationIOS(initialProps.launchOptions.remoteNotification);
|
|
||||||
React.render(
|
React.render(
|
||||||
<RootComponent
|
<RootComponent
|
||||||
pushNotification={pushNotification}
|
pushNotification={initialNotification}
|
||||||
{...initialProps}
|
{...initialProps}
|
||||||
/>,
|
/>,
|
||||||
rootTag
|
rootTag
|
||||||
|
|
|
@ -5,8 +5,12 @@
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var NativeModules = require('NativeModules');
|
||||||
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
||||||
|
|
||||||
|
var RCTPushNotificationManager = NativeModules.RCTPushNotificationManager;
|
||||||
|
|
||||||
|
var _initialNotification = RCTPushNotificationManager.initialNotification;
|
||||||
var _notifHandlers = {};
|
var _notifHandlers = {};
|
||||||
|
|
||||||
var DEVICE_NOTIF_EVENT = 'remoteNotificationReceived';
|
var DEVICE_NOTIF_EVENT = 'remoteNotificationReceived';
|
||||||
|
@ -30,6 +34,14 @@ class PushNotificationIOS {
|
||||||
_notifHandlers[handler] = null;
|
_notifHandlers[handler] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static popInitialNotification() {
|
||||||
|
var initialNotification = _initialNotification &&
|
||||||
|
new PushNotificationIOS(_initialNotification);
|
||||||
|
_initialNotification = null;
|
||||||
|
return initialNotification;
|
||||||
|
}
|
||||||
|
|
||||||
constructor(nativeNotif) {
|
constructor(nativeNotif) {
|
||||||
this._data = {};
|
this._data = {};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#import <FBReactKit/RCTBridgeModule.h>
|
||||||
|
|
||||||
|
extern NSString *const RKRemoteNotificationReceived;
|
||||||
|
extern NSString *const RKOpenURLNotification;
|
||||||
|
|
||||||
|
@interface RCTPushNotificationManager : NSObject <RCTBridgeModule>
|
||||||
|
|
||||||
|
- (instancetype)initWithInitialNotification:(NSDictionary *)initialNotification NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,64 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#import "RCTPushNotificationManager.h"
|
||||||
|
|
||||||
|
#import "RCTAssert.h"
|
||||||
|
#import "RCTBridge.h"
|
||||||
|
#import "RCTEventDispatcher.h"
|
||||||
|
|
||||||
|
NSString *const RKRemoteNotificationReceived = @"RemoteNotificationReceived";
|
||||||
|
NSString *const RKOpenURLNotification = @"RKOpenURLNotification";
|
||||||
|
|
||||||
|
@implementation RCTPushNotificationManager
|
||||||
|
{
|
||||||
|
NSDictionary *_initialNotification;
|
||||||
|
}
|
||||||
|
|
||||||
|
@synthesize bridge = _bridge;
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
return [self initWithInitialNotification:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithInitialNotification:(NSDictionary *)initialNotification
|
||||||
|
{
|
||||||
|
if ((self = [super init])) {
|
||||||
|
_initialNotification = [initialNotification copy];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
|
selector:@selector(handleRemoteNotificationReceived:)
|
||||||
|
name:RKRemoteNotificationReceived
|
||||||
|
object:nil];
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
|
selector:@selector(handleOpenURLNotification:)
|
||||||
|
name:RKOpenURLNotification
|
||||||
|
object:nil];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleRemoteNotificationReceived:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
[_bridge.eventDispatcher sendDeviceEventWithName:@"remoteNotificationReceived"
|
||||||
|
body:[notification userInfo]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleOpenURLNotification:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
[_bridge.eventDispatcher sendDeviceEventWithName:@"openURL"
|
||||||
|
body:[notification userInfo]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)constantsToExport
|
||||||
|
{
|
||||||
|
return @{
|
||||||
|
@"initialNotification": _initialNotification ?: [NSNull null]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Загрузка…
Ссылка в новой задаче