无警报推送通知

Posted

技术标签:

【中文标题】无警报推送通知【英文标题】:Push Notifications without alert 【发布时间】:2011-02-27 06:45:54 【问题描述】:

我可以在没有警报视图的情况下获得推送通知吗? 关于游戏服务将发送通知作为更改游戏状态的响应的想法(可能是游戏状态将存储在数据库中),如果这是不可能的,您可以建议我如何将新游戏状态发送到每个连接的游戏客户端作为响应改变游戏状态。

游戏将为 iPad 开发。

谢谢, 罗马

【问题讨论】:

是的,我们可以做到(截至目前)。看到这个问题:***.com/questions/15225677/… ios7 中添加了新的推送通知类型,用户看不到任何警报,但可以在后台唤醒应用程序以从服务器获取数据。还没有看到实际效果 【参考方案1】:

对我来说@Ajay 的答案不正确(抱歉)。

通过推送通知,您可以在三个用户选项之间进行选择:短信(警报)、声音和徽章。每个推送通知都可以包含一个或多个这些选项,因此您可以发送例如带有声音和徽章的通知,但没有消息,在这种情况下会显示任何警报。

请注意,您甚至可以将私有字典中的隐藏选项传递给您的应用程序。

【讨论】:

虽然这是真的,但他的目标不是提醒用户,而是希望传递一个游戏状态。他无法通过警报声或徽章编号传递游戏状态。此外,他似乎想要的是源源不断的数据流进入他的应用程序,最好通过服务器端脚本提供。此外,如果显示警报声或徽章,他的应用程序在后台不会唤醒,他的游戏状态将无法按时交付。【参考方案2】:

使用内容可用属性:

aps 字典也可以包含 content-available 属性。值为 1 的 content-available 属性让远程通知充当“静默”通知。当静默通知到达时,iOS 会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行后台信息处理。用户不会被告知因静默通知而产生的新信息或更改信息,但他们可以在下次打开您的应用时了解这些信息。

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

【讨论】:

完美!正是我想要的。比旧答案好得多。但请注意,此属性仅适用于 iOS7 及更高版本。【参考方案3】:

为什么不呢!

您可以在没有任何警报、横幅或声音的情况下发送隐藏的推送通知。

php 代码

没有文字:

$payload['aps'] = array('badge'=> 0, 'sound' => 'default');

没有文字和声音

$payload['aps'] = array('badge'=> 0);

在您的 ios 端,您可以为此设置条件:

//Receiving a Push Notification
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

    NSMutableDictionary *pushNotiFicationDict = [userInfo objectForKey:@"aps"];
    NSLog(@":%@", pushNotiFicationDict);

    if([pushNotiFicationDict objectForKey:@"alert"])
    
        // when push notification has text
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"MESSAGE" message:[pushNotiFicationDict objectForKey:@"alert"]
                                                        delegate:nil
                                               cancelButtonTitle:@"ok"
                                               otherButtonTitles:nil];
        [alert show];
    
    else
    
        // when push notification does not have text
    

但我认为如果应用程序未运行在后台运行,您将无法执行任何操作。

【讨论】:

【参考方案4】:

不,推送通知将始终显示通知,因为它需要用户同意才能唤醒或启动您的应用程序。但是,如果您的应用程序处于前台并正在运行,则不会出现推送通知,并且您的应用程序可以处理推送通知所包含的消息。上述所有内容同样适用于本地通知。

我不知道你所说的游戏状态是什么意思。但只需让您的应用程序监听服务器上的脚本,该脚本会将信息传递给您的应用程序。编辑:或者就像我上面所说的,如果您的应用程序在前台打开,推送通知不会出现在屏幕上,您可以通过这种方式发送信息。但是,如果您想在后台执行此操作,那么无论如何都是不可能的,除非您是真正的多任务处理(GPS、VOIP、音乐),或者您通过推送通知获得用户同意。

【讨论】:

在 iOS7 中添加了新的推送通知类型,用户看不到任何警报,但可以在后台唤醒应用程序以从服务器获取数据。还没有看到实际效果 @AZ_ 你在说什么?我想每 24 小时在后台运行一些代码,即使应用程序在后台。我该怎么做?【参考方案5】:

您可以在应用程序中处理通知并将数据存储在数据库中,或者在应用程序未运行时显示一条消息。

【讨论】:

【参考方案6】:

我同意@MacTeo。您可以使用仅包含一个属性(声音、警报(或消息)和徽章)的有效负载发送推送通知。

根据您的要求,在用户打开和关闭应用程序(前台和后台)时跟踪服务器上的用户设备。如果发生了什么事,那么您可以在服务器上查看设备的状态。然后,您可以根据设备的最后报告状态决定如何构建通知(如果有必要)。

只是吐口水:

如果您愿意(但是,这不是 APNs 的设计目的),您可以发送一个只有徽章计数 = 0 的推送通知,并传递一些额外的字典数据。这不会提醒用户,如果它在前台,可以在应用程序中处理。

【讨论】:

以上是关于无警报推送通知的主要内容,如果未能解决你的问题,请参考以下文章

推送通知徽章清除警报

控制“允许推送通知”警报

如何清除状态栏上的推送通知警报 - android

更改推送通知警报消息

推送通知显示自定义警报

推送通知警报处理