使用推送通知调用函数

时间:2013-01-29 16:54:59

标签: iphone objective-c

我为我的iPhone应用程序制作了自己的推送通知服务器。我正在向客户端设备发送不同的推送通知。现在有一个特殊的通知,我想在appDelegate或任何地方调用特定的函数。

我该如何实现?

2 个答案:

答案 0 :(得分:2)

您无法指定直接调用的功能

启动应用时,会调用-(BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)launchOptions并传递UIApplicationLaunchOptionsRemoteNotificationKey下的选项中的注释

当应用运行时,您有application:didReceiveRemoteNotification:


您可以传递方法的NAME来通知!这样:

...
NSString *methodName = [notificationUserInfo objectForKey:@"methodName"];
[self performSelector:NSSelectorFromString(methodName)];
...

服务器端JSON将包含methodName键: 如我们所见,我们可以包括我们所喜欢的APNS JSON PAYLOAD - more arguments

{"aps":{"alert":"APP_NAME': BLA_BLA_BLA","sound":"default"}, "methodName":"xy"}

答案 1 :(得分:1)

当用户通过通知启动应用时,它可能有不同的情况:

它没有启动,然后app以默认方式启动,你可以用这样的方式处理通知:

-(BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UILocalNotification *remoteNotif =
        [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (remoteNotif) {
        //handle remote notification
    }
    ....
}

如果app在后台或前台,称为委托方法

- application:didReceiveRemoteNotification: {
    if (application.applicationState == UIApplicationStateActive){
        //application was in foreground
    } else if (application.applicationState == UIApplicationStateInactive){
        //application was in background
    }
}

此外,如果应用程序位于前台 - 系统不显示警报,请勿更改徽章图标或播放声音 - 您应该完全自己处理通知