2014-11-17 150 views
11

设备在iOS 8.1上运行iOS 8.1推送通知无声音

我正在使用xCode 6.1编译应用程序。

这是为推动

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
{ 
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 
    [application registerForRemoteNotifications]; 
} 
else 
{ 
    [application registerForRemoteNotificationTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; 
} 

它正常工作与服务器应用注册登记的代码。

PEM文件也正确完成,因为我可以使用沙盒APN将推送发送到我的设备。

当我打印我的JSON有效载荷从didReceiveRemoteNotification我得到这个:

{ 
    aps =  { 
     alert = "Test Push Message"; 
    }; 
} 

的问题是,当我收到我的push(即使在设备设置为响亮的),不能播放声音。

据我所知,如果你没有在JSON载荷中指定声音,它应该播放默认的OS声音。

在我手机上的应用程序通知设置中,声音默认启用,因为当我注册时,我指定UIUserNotificationTypeSound

任何人都遇到过这个问题?

+0

你不应该检测的版本,如:'如果([[[的UIDevice currentDevice] systemVersion]的floatValue]> = 8.0)'但像而检查类是可用的:'如果([ UIUserNotificationSettings类])' – rckoenes

回答

36

根据Apple's documentation需要指定default,如果你想默认的推送通知要播放:

在应用程序中捆绑了声音文件的名称。该文件中的声音是 作为警报播放。如果声音文件不存在或默认值为 指定为该值,则播放默认警报声。音频 必须是与系统声音兼容的音频数据格式之一;有关详细信息,请参阅准备自定义警报声音。

最终的JSON输出:

{ 
    "aps" :  { 
     "alert" : "Test Push Message", 
     "sound" : "default" 
    }; 
} 
+0

是的,我得到了声音和振动这种方式..但我只想声音。没有震动..我怎么办?预先感谢x ... –

+0

链接的文档不再存在。 – qqx

9

您应该修改服务器JSON输出到这一点。 default它是您手机上通知的声音类型。

{ 
    "aps": { 
     "alert": "test", 
     "sound": "default" 
    } 
} 
+0

是的,我得到了声音和振动这种方式..但我只想声音。没有震动..我怎么办?预先感谢x ... –

3

用于在我们的应用程序收到推送通知时播放声音您的json必须包含声音属性。所以JSON这样

{ 
    "aps":{ 
    "alert" :"your test message", 
    "sound":"default" 
     }; 
} 
+0

你应该格式化代码,以便它更好的可读性。 – etalon11

+0

@ etalon11我会记住的。谢谢。 –