无警示的推送通知

5
我可以收到推送通知却不显示弹窗吗? 如果游戏状态发生改变(可能会存储在数据库中),服务端会将通知发送给游戏客户端。如果这是不可能的,您能提供什么建议来响应更改游戏状态并将新的游戏状态发送给每个连接的游戏客户端。 该游戏将开发为iPad版本。 谢谢, Roman

1
是的,我们现在可以做到(截至目前)。请参阅此SO问题:https://dev59.com/IWUp5IYBdhLWcg3whn1z - S.Philip
在iOS7中,新增了一种新类型的推送通知,用户不会看到任何警报,但应用程序可以在后台唤醒以从服务器获取数据。尚未看到其实际效果。 - AZ_
6个回答

18

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

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

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


虽然这是真的,但他的目标不是警报用户,而是想传递游戏状态。他无法通过警报声或徽章号码传递游戏状态。此外,他似乎希望应用程序获得持续的数据流,最好通过服务器端脚本提供服务。如果警报声或徽章显示,他的应用程序在后台时将无法唤醒,导致游戏状态无法及时传递。 - Ajay

8

使用content-available属性:

aps字典还可以包含content-available属性。将值设置为1的content-available属性使远程通知作为“静默”通知。当静默通知到达时,iOS会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行后台信息处理。用户不会被告知由静默通知导致的新的或更改的信息,但他们可以在下一次打开您的应用程序时发现它。

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


太棒了!正是我想要的。比之前的答案好多了。但请注意,此属性仅适用于iOS7及以上版本。 - Tim

5

为什么不呢!

您可以发送一个隐藏的推送通知,而不会有任何警报、横幅或声音。

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
    }
}

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

3
不,推送通知总是需要用户同意才能唤醒或启动您的应用程序,并显示通知。但是,如果您的应用程序在前台运行,则推送通知将不会出现,您的应用程序可以处理推送通知的消息。所有前面提到的内容也适用于本地通知。
我不知道你所说的游戏状态是什么意思。但是,您可以让应用程序监听服务器上的脚本,该脚本将向您的应用程序传递信息。编辑:或者像我上面说的那样,如果您的应用程序在前台打开,推送通知将不会出现在屏幕上,您可以通过这种方式发送信息。但是,除非您真正进行多任务处理(GPS、VOIP、音乐)或经过用户同意通过推送通知,否则无论如何都无法在后台执行此操作。

在iOS7中,新增了一种新类型的推送通知,用户不会看到任何警报,但应用程序可以在后台唤醒以从服务器获取数据。尚未看到其实际效果。 - AZ_
@AZ_ 你在说什么?我想要每24小时在后台运行一些代码,即使应用程序在后台也是如此。我该怎么做? - abhimuralidharan

0

我同意@MacTeo的观点。您可以通过包含一个属性(声音、警报(或消息)和徽章)的有效负载来传递推送通知。

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

只是随便想想:

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接