iOS APNS推送 离线语音播报,仿支付宝收款到账提醒

本文详细介绍了在iOS应用中实现推送消息接收,包括音频播放、语音播报功能,涉及友盟推送集成、NotificationServiceExtension配置以及处理不同场景下的消息接收。同时,指出了关键配置和测试要点。

 之前做这块内容时,查阅了很多博客,实现过程中做过很多坑,希望记录下来帮助更多的开发者避免踩坑,白白浪费大好时光。

需求

1. 收到推送消息播放音频,支持合成;

2. 离线:用户未打开APP或者杀死程序,可接收推送消息;

3. 息屏:用户启动APP在锁屏状态下,可接收推送消息;

4. 是语音播报消息时,不展示推送弹窗;

前期准备

1.配置证书

创建项目的推送证书、APP Groups(语音文件数据共享);

2.友盟集成

集成友盟推送(或者极光推送)本文使用的是友盟推送;

3.项目中配置

a.主程序配置如图

 b扩展服务配置如图

 4.重点配置友盟推送消息

a.payload 消息JSON结构
{
    "aps" : {
        "alert" : {
            "title" : "Game Request", // 标题
            "body" : "Bob wants to play poker", //内容
        },
        "badge" : 5, //角标
        "sound" : "binggo.caf", //声音
        "content-available" : 1,
        "mutable-content" : 1, //一定要配置,否则扩展收不到消息
    },
}
b. 测试友盟推送时一定要带配置"mutable-content" : 1 ,并且位置一定要写对;

友盟语音播报推送消息一定要配置在内容链接那个位置,否则UNNotificationServiceExtension收不到推送消息;

语音播报功能实现

1. 注册通知及获取设备号

AppDelegate.m 文件

///设备号获取
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // 友盟注册推送
    [UMessage registerDeviceToken:deviceToken];
    [UMessage setBadgeClear:NO];
    //Xcode11打的包,iOS13获取Token有变化
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 13) {
        if (![deviceToken isKindOfClass:[NSData class]]) {
            //记录获取token失败的描述
            return;
        }
        const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
        NSString *strToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                              ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                              ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                              ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
        ZFLog(@"deviceToken= %@", strToken);
        [ZFDevice Instance].device = strToken;
        if (strToken.length==64) {
            [ZFUserDefaults setObject:strToken forKey:kPHONE_DEVICE_TOKEN];
            [ZFUserDefaults synchronize];
        }
    } else {
        NSString *token = [NSString
                       stringWithFormat:@"%@",deviceToken];
        token = [token stringByReplacingOccurrencesOf
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code科技狂热者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值