Instantiate local notifications different than remote notifications

Summary:
To use `PushNotificationIOS` for local notifications in the same way as we use them for remote notifications. Today remote notifications are being constructed correctly but local notifications are not. Related issue: https://github.com/facebook/react-native/issues/8014

When ObjC receives local notifications it does not serialize the `UILocalNotification` the same way as we do for remote notifications. And when we go to construct a `PushNotificationIOS` javascript instance it works for remote notifications but not for local notifications.

- Some of remote notification's data is wrapped in an `aps` dict (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1).
- All of local notifications are being received and passed to javascript as a flat dictionary: (https://github.com/facebook/react-native/blob/maste
Closes https://github.com/facebook/react-native/pull/8029

Differential Revision: D3417260

Pulled By: javache

fbshipit-source-id: c130aa39e89ffbbd8b1243b6dacbf95bb591b4da
This commit is contained in:
Jonathan Stanton 2016-06-14 06:02:36 -07:00 committed by Facebook Github Bot 7
parent 1e88c1261c
commit 8ac55ee92b
1 changed files with 23 additions and 14 deletions

View File

@ -173,6 +173,7 @@ class PushNotificationIOS {
listener = PushNotificationEmitter.addListener(
DEVICE_NOTIF_EVENT,
(notifData) => {
notifData.remote = true;
handler(new PushNotificationIOS(notifData));
}
);
@ -180,6 +181,7 @@ class PushNotificationIOS {
listener = PushNotificationEmitter.addListener(
DEVICE_LOCAL_NOTIF_EVENT,
(notifData) => {
notifData.remote = false;
handler(new PushNotificationIOS(notifData));
}
);
@ -297,7 +299,7 @@ class PushNotificationIOS {
_initialNotification = null;
return initialNotification;
}
/**
* If the app launch was triggered by a push notification,
* it will give the notification object, otherwise it will give `null`
@ -316,19 +318,26 @@ class PushNotificationIOS {
constructor(nativeNotif: Object) {
this._data = {};
// Extract data from Apple's `aps` dict as specified here:
// https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html
Object.keys(nativeNotif).forEach((notifKey) => {
var notifVal = nativeNotif[notifKey];
if (notifKey === 'aps') {
this._alert = notifVal.alert;
this._sound = notifVal.sound;
this._badgeCount = notifVal.badge;
} else {
this._data[notifKey] = notifVal;
}
});
if (nativeNotif.remote) {
// Extract data from Apple's `aps` dict as defined:
// https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html
Object.keys(nativeNotif).forEach((notifKey) => {
var notifVal = nativeNotif[notifKey];
if (notifKey === 'aps') {
this._alert = notifVal.alert;
this._sound = notifVal.sound;
this._badgeCount = notifVal.badge;
} else {
this._data[notifKey] = notifVal;
}
});
} else {
// Local notifications aren't being sent down with `aps` dict.
this._badgeCount = nativeNotif.applicationIconBadgeNumber;
this._sound = nativeNotif.soundName;
this._alert = nativeNotif.alertBody;
this._data = nativeNotif.userInfo;
}
}
/**