收到推送通知时,在应用程序中添加警报视图

时间:2014-03-12 20:51:07

标签: ios push-notification parse-platform

您好我正在开发一个应用程序,我已激活推送通知。我使用parse.com。到目前为止,我已经完成了工作,我可以发送通知,设备会收到它,我也会在应用程序上获得徽章。但当我打开时,没有任何事情发生,徽章也不会消失。我已经在我的appdelegate.m中设置了它,因此解析正在处理推送通知。下面是一些使用的代码:

- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken {
// Store the deviceToken in the current installation and save it to Parse.
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:newDeviceToken];
[currentInstallation saveInBackground];
}

还有:

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
[PFPush handlePush:userInfo];
}

由于

好的但是如何在警报视图中显示推送通知的内容?或者这不是问题我只需要配置没有文本的警报视图吗?

2 个答案:

答案 0 :(得分:2)

有两种情况:

应用已关闭

当应用关闭并且用户点按通知时,就像点击应用图标一样。该应用从application:didFinishLaunchingWithOptions:开始。要知道应用是否正常打开(点击图标)或通知,只需检查字典launchOptions以获取密钥UIApplicationLaunchOptionsRemoteNotificationKey

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
        NSDictionary * pushDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

        if (pushDictionary)
        {
            //AlertView
        }
}

应用程序已打开

当应用程序打开时,有两种可能的情况

后台应用UIApplicationStateInactive

应用程序位于前景UIApplicationStateActive

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
        if (application.applicationState == UIApplicationStateInactive)
        {
            //AlertView
        }
        else if (application.applicationState == UIApplicationStateActive)
        {
            // AlertView
        }
}

pushDictionaryuserInfo与代表通知的字典完全相同。

修改1

推送通知是iOS自动转换为NSDictionary的JSON文件。标准配置是:

{"aps":
 {
   "alert":"Text message",
   "sound":"default",
   "badge":"1" //the number shown on the app's icon
 }
}

在此基础上,您可以扩展JSON并将其放入您自己的内容中。例如

{"aps":
  {
    "alert":"Text message",
    "sound":"default",
    "badge":"1" //the number shown on the app's icon
  },
 "Name":"Fry"
}

现在您可以用这种非常简单的方式检索名称:

NSString * name = userInfo[@"Name"];

并在警报中显示。

修改2

要显示UIAlertView中的推送内容,请执行以下操作:

    UIAlertView *av = [[UIAlertView alloc] initWithTitle:name
                                                 message:name
                                                delegate:self 
                                       cancelButtonTitle:nil
                                       otherButtonTitles:@"Ok", nil];
    [av show];

答案 1 :(得分:0)

如果您在应用未激活(被杀)时收到推送通知

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

不会被触发。而不是你必须使用来自UIApplicationLaunchOptionsRemoteNotificationKey字典

内的键launchOptions的对象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions