iOS 个推透传机制

iOS本身没有透传推送机制,是否使用第三方并不会改变推送的机制,第三方只是帮你写好与APNS的交互,你只需设置要传送的消息就好。只要有推送过来就一定会显示推送弹窗,除非用户关闭通知。
个推的透传就走他们自己的透传方法的,分在线离线,离线就是后台或app未启动,在线就是app打开状态,如果是离线状态收到消息会走APNS(表现就是顶部弹框、通知栏弹框、角标变化,如果是静默推送,还会自动执行一个方法,最下面有写。普通推送不会走),但是打开app后就会走透传消息方法AAA(静默推送的话直接走透传方法AAA,普通推送的话,先走BBB/CCC,再走AAA),如果是在线状态就直接走透传消息,不走APNS。如果你是用透传消息推送的话,都在透传方法中处理就好了。
结合我们公司的App,之前有个疑问:发单的那一刻,我们公司后台走的是APNs还是透传呢? 现在可以肯定的回答:离线走APNs,在线走透传。

  • 透传消息方法AAA
    执行时间1:程序离线(在后台或者app未启动)收到推送时候,当由离线进入在线的时候会执行(此时offLine为YES)。如果一直是离线,那么肯定不会执行该方法。
    执行时间2:程序在线收到推送的时候会执行(此时offLine为NO)。
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

}

普通推送(收到推送,有声音有文字)

应用在后台收到通知的时候(不点开通知,也不打开APP哦),就不会执行如下代码

  • 在iOS 10之前,点通知,会调用如下方法BBB。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
  ...   
  做你想做的操作。例如更新UI,跳转界面,操作userInfo中的内容。
  ...
}
  • iOS 10 及以后版本,点击通知,会调用如下方法CCC
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler{
    
      ...
     做你想做的操作。例如更新UI,跳转界面,操作userInfo中的内容。
      ...

    NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
    // [ GTSdk ]:将收到的APNs信息传给个推统计
    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
    completionHandler();
    
}
静默推送(收到推送,没有声音没有文字)。应用在后台(应用被杀死或者应用未启动不满足静默推送)收到通知的时候(不点开通知,也不打开APP哦),就会立刻执行如下的代码。 部分iOS10+还是iOS10-
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
  ...   
做你想做的操作:这里我用苹果自带的文字转语音播放userInfo里面的指定内容
  ...
}

你可能感兴趣的:(iOS 个推透传机制)