[ReactNative] Put launchOptions in RCTPushNotificationManager

This commit is contained in:
Andrew Rasmussen 2015-03-16 12:33:02 -07:00
Родитель 06125009dd
Коммит 5f538b2284
4 изменённых файлов: 90 добавлений и 4 удалений

Просмотреть файл

@ -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