Как получить доступ к данным удаленного push-уведомления на applicationDidBecomeActive?
При получении удаленного push-уведомления, когда приложение находится в фоновом режиме, приложение вводит applicationDidBecomeActive. Оттуда, как я могу получить доступ к NSDictionary данных из уведомления?
4 ответа
Данные уведомления доставляются в ваше приложение в application:didReceiveRemoteNotification:
, Если вы хотите обработать его в applicationDidBecomeActive:
вы должны хранить его в application:didReceiveRemoteNotification:
и прочитайте это снова в applicationDidBecomeActive
,
Swift версия:
var dUserInfo: [NSObject : AnyObject]?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// code...
if let info = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] {
dUserInfo = info
}
return true
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
dUserInfo = userInfo
}
func applicationDidBecomeActive(application: UIApplication) {
// code...
self.yourAction(dUserInfo)
}
func yourAction(userInfo: [NSObject : AnyObject]?) {
if let info = userInfo?["aps"] as? Dictionary<String, AnyObject> {
}
}
Я использую этот код для управления push:
В AppDelegate
@implementation AppDelegate{
NSDictionary *dUserInfo; //To storage the push data
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Check for options
if (launchOptions != nil)
{
//Store the data from the push.
dUserInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dUserInfo != nil)
{
//Do whatever you need
}
}
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
//Data from the push.
if (dUserInfo != nil)
{
//Do whatever you need
}
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//Store the data from the push.
if (userInfo != nil)
{
dUserInfo = userInfo;
}
}
Я надеюсь, что это будет полезно для кого-то.
Удачного кодирования.
Если ваше приложение находится в background
состояние, когда push-уведомление получено и нажато, приложение будет вызываться с application:didFinishLaunchingWithOptions:
и не application:didReceiveRemoteNotification:
,
Полезные данные push-уведомлений доступны в application:didFinishLaunchingWithOptions:
от launchOptions
толковый словарь.