经常说安卓怎么苦逼,现在终于轮到IOS苦逼了。
安卓的应用在前台和后台一样像播放音乐就播放音乐,没人鸟你。
IOS像后台播放声音就很苦逼了,因为IOS的应用切换到后台,应用会被挂起,非特别的应用不能在播放声音。经过不泄的努力终于找到3种解决方案.
1.把你的应用后台播放程序,新的XCODE勾选就可以,老版本的XCODE只有在*.plist文件中加属性值了。这个苹果审核很严,非后台播放程序,你设置了不会让你通过的。
使用后台播放声音测试:
当你的应用在正播放音乐时进入后台后,继续播放音乐。
当你的应用进入后台前不播放声音,那么你的应用在后台播放声音,对不起你的应用没有任何屁放出。
看来后台播放声音就为了播放器专做的,你的应用没事开启这个功能徒增被驳回的风险。阿门,好危险,赶紧远离它。
2.服务通过APNS推送过来的消息中包含有小的声音文件。你的应用收到后会播放这个声音。APNS是针对整个手机的,就是你的手机关机,只要应用不解绑定和服务的PUSH连接,那么你的手机也能收道通知。
通过APNS推送过来的消息中设置的大都是default,所以收到的都是一样的声音,你可以修改发送的声音文件的名称,但是它肯定不支持.mp3(已经测试过)。若通过APNS发送声音文件的方式,收到响应超延迟不是一般的大,延迟几分钟也有可能,必定你的声音经过一大圈传输。再加上APNS本来就有漏包率,通过个推丢失和延迟更大些。若你受得了这种延迟可以采用这种方式。
如:
更多细节,请参考 Apple Push Notification Service Programming Guide。 载体(payload)是 JSON 字符串(最长 256 字节),封装了你发送给 iOS 应用的信息。这是一个 payload 的例子: { "aps": { "alert" : "Yougot a new message!" , "badge" : 5, "sound" : "beep.wav"}, "acme1" : "bar", "acme2" : 42 }
3.弹出本地通知,并在本地通知中播放音乐。
这种通知的场景有三种:
第一种场景:客户端(可能在前台,也可能在后台)轮询向服务发了HTTP请求,服务收到请求后给予正确的响应,你需要给用户(不确定是前台或后台)播放一段音乐来提醒用户。
第二种场景:用户在前台的操作没有完成所有处理而切换到后台,导致在向服务器发了HTTP请求,服务器收到请求后给予正确的响应,客户端(可能在前台,也可能在后台)需要给用户(不确定是前台或后台)播放一段音乐来提醒用户。
第三中场景:服务器和客户端有socket长连接,服务器通过长连接发送过来订单通知,客户端在收到订单通知,用户可能在后台,像立刻想播放一段音乐来通知用户有新订单了,要求0延迟。
UILocalNotification *notification=[[UILocalNotification alloc] init];
if (notification!=nil) {
NSDate *now=[NSDate new];
notification.fireDate=[now dateByAddingTimeInterval:0];//立即通知
notification.repeatInterval=0;//循环次数,
notification.timeZone=[NSTimeZone defaultTimeZone];
notification.applicationIconBadgeNumber=0; //应用的红色数字
notification.soundName= UILocalNotificationDefaultSoundName;//声音,可以换成alarm.soundName = @”myMusic.caf”
//去掉下面2行就不会弹出提示框
notification.alertBody=@”通知内容”;//提示信息 弹出提示框
notification.alertAction = @”打开”; //提示框按钮
//notification.hasAction = NO; //是否显示额外的按钮,为no时alertAction消失
// NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"]; //notification.userInfo = infoDict; //添加额外的信息 [[UIApplication sharedApplication] scheduleLocalNotification:notification]; }