无声通知

时间:2015-05-13 03:10:21

标签: ios parse-platform notifications push-notification apple-push-notifications

在使用远程通知(来自Parse.com)的iOS应用中,我遇到以下问题: 虽然人们常常看到一个小小的音符告诉用户新的东西已经到来, 有时候沉默会更受欢迎。 知道应用程序正在按预期工作(在后台),而不是被告知每个事件都是我们想要的。

我该如何实现?

浏览网页我在Info.plist中读到了有关UIBackgroundModes的内容;但是当我尝试时,我没有得到我希望得到的结果。 我想我必须使用错误的工具或者错过它。 我还读到,Apple在审核应用时可能会对这些UIBackgroundModes的使用感到挑剔。 所以我可以尽可能避免找麻烦。

为了避免误解我把下面的代码放在了正常工作中;除了它“嘈杂”的事实。这意味着应用程序很乐意接收通知(这是有效的);但是用户会很高兴不知道它,这意味着不要一直在手机上看“ABC”。

在云端:

function pushNotification()
{
    var pushQuery = new Parse.Query(Parse.Installation);
    pushQuery.equalTo(‘fieldXZY’, 'ios');

    Parse.Push.send({
                    where: pushQuery,
                    data: {
                    alert: “ABC"
                    }
                    }, {
                    success: function() {},
                    error: function(error) {
                    throw "Got an error " + error.code + " : " + error.message;
                    }
                    });
}

在应用内:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSString *notifString=[[userInfo valueForKey:@"aps"] valueForKey:@"alert"];

    if ([notifString isEqualToString:@“ABC"]) // The Notification has come.
        [self doTheWorkForABCNotif];
}

4 个答案:

答案 0 :(得分:3)

如果您不想接收通知的语音,请不要在aps中发送声音键。 aps 应与以下类似

aps = {
  alert = "You have received a message";
  badge = 3;
  "content-available" : 1,// this key will allow to receive payload data even if app is in background
};
如果您不想显示提醒,请

删除提醒。在自定义有效负载密钥中执行您想要的任务

答案 1 :(得分:0)

据我所知,没有api可以禁用本机代码中的推送通知声音。用户可以通过设置 - >通知 - >您的应用

禁用或启用它

但是我想可以通过自定义声音规范来实现这一点。如果您不知道,请查看此apple doc。为此,请放置一个完全不包含声音的自定义声音文件。然后,如果您不希望用户收到声音,只需在将其发送到Apple推送通知服务之前在JSON有效负载中指定声音文件

答案 2 :(得分:0)

如果您想在应用程序中触发某些内容(例如后台获取,数据库中的数据清除,更新同步日期等),则无提示通知非常有用。要成功实现此目的,您将需要三件事

1)背景模式

在您应用的Info.plist中,您需要添加 应用下载内容以响应推送通知 ,作为必需背景模式之一

2)委托回调

在您的app委托中,您需要实现

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
// Do your stuff here 
}

请注意附加

fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

阻止回调

并实施

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
// Run your background fetch here
}

3)通知有效负载

有效负载需要采用以下结构(除了任何自定义有效负载)

 {
        "aps" : {
            "content-available" : 1,
            "sound" : ""
        }
        "customPayloadKey":3,
        "additionalPayload": {
                               "customKey":"customValue"
                             }
    }

干杯!

答案 3 :(得分:0)

如果您正在使用Parse,他们可以选择通过JSON格式发送消息。

例如:{“message”:“Hello World”,“badge”:“1”,“sound”:“silent.mp3”}

您可以将音频文件添加到应用包中,该文件名为silent.mp3。这个音频文件可能只是一个空录音。

但是,这需要您将应用程序更新到商店,因为您必须将音频文件添加到您的软件包中。当您发送上述JSON时,它会尝试在您的文件中找到名为silent.mp3的音频文件应用程序捆绑并播放该文件作为通知声音。

由于音频文件只是一个静音录音,因此不会有任何通知声音。您可以在捆绑中添加各种音频文件,并在发送推送通知时通过Parse控制它。

我希望这为您提供了一种解决方法。