iOS 使用友盟推送集成静默推送(双推送策略)

有语音播报相关需求现不建议使用该方式,可移步iOS 收款推送消息语音播报


注:静默推送苹果是不保证真正到达率的,后台成功只是消息已到达苹果服务器!!!
【开发背景】
  公司做的第三方支付,App是B端使用的,需要在收款后获得语音播报,之前使用普通推送的广播方式,iPhone无法在锁屏状态下获得语音播报,查询相关资料后我选择了静默推送(也叫推送唤醒,远程推送通知,Silent Remote Notification)。
  【优点】可在锁屏状态下获得语音播报,无需任何操作。
  【缺点】收到推送之后没有提示声音,没有通知栏提醒。
  因此我的项目中采用了双推送策略,即使用静默推送获取语音播报,使用普通推送获取提示声音和通知栏提醒。

1、静默推送需要在推送后台改变传参的方式:

{
     "appkey":"your appkey",
     "production_mode":"false",
     "timestamp":1474340669558,
     "device_tokens":"your devicetoken",
     "type":"unicast",
     "payload":{
         "aps":{
             "content-available" : 1
        }   
      "yourInfo" : ...
    }
}

【注意】
  1)需要在didRegisterForRemoteNotificationsWithDeviceToken:里面获取token并传给Server;
  2)production_mode为true是推送正式环境,false为测试环境;
  3)content-available静默推送必须为1!!!
  4)yourInfo是你自定义的一些参数,比如交易信息,也就是语音播报的内容。

iOS 使用友盟推送集成静默推送(双推送策略)_第1张图片
image.png

  这里第一行不勾上,普通推送没有声音,没有声音,没有声音!!!
Background Fetch,如果不需要在后台播放音频文件,最好关掉,否则苹果霸霸会打回的!!!

  最后附上语音播报的相关代码(网上很多包括友盟官方文档说如果实现了didReceiveRemoteNotification:fetchCompletionHandler:方法,performFetchWithCompletionHandler:方法不会再被调用,但是我注掉该方法后,静默推送就无法收到)

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    //  若发现无法收到deviceToken,可以加上此方法
    [application registerForRemoteNotifications];
}
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // 系统会根据UIBackgroundFetchResult来判断后台处理的有效性,如果后台处理效率较低,会延迟发送后台推送通知
    completionHandler (UIBackgroundFetchResultNewData);
}
/**
 *  已经接收到后台远程通知后调用 
 *
 *  @param application       应用对象
 *  @param userInfo          推送信息
 *  @param completionHandler 完成回调
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    NSDictionary *info = [self dictionaryWithUserInfo:userInfo];
    if (!info || info.count <= 0) {
        return;
    }
    //  这里添加语音播报的内容
    ...
    // 系统会根据UIBackgroundFetchResult来判断后台处理的有效性,如果后台处理效率较低,会延迟发送后台推送通知
    completionHandler(UIBackgroundFetchResultNewData);
}

你可能感兴趣的:(iOS 使用友盟推送集成静默推送(双推送策略))