我是靠谱客的博主 机智铅笔,最近开发中收集的这篇文章主要介绍iOS JPUSH接入的详细讲解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

不说废话,进入主题。

一:推送实现的原理:每个设备都会有唯一的设备标识:deviceToken,推送时就是通过这个deviceToken来进行精准推送。

这个图大家了解一下就好了。初学者没必要去深究。



二.接入JPUSH。注册应用,证书的问题。在这里不讲,如果有这方面的问题可以私信我。

  1.在程序入口:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


在这个方法里注册JPUSH。现在iOS10出来后注册要处理的远程通知类型又有变化。我的建议是建一个delegate的分类文件,提高代码的的易读性。

- (void)setUpJPushWithOptions:(NSDictionary *)launchOptions{

    

    //Required

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {

        JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

        entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;

        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

    }

    else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {

        //可以添加自定义categories

        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |

                                                          UIUserNotificationTypeSound |

                                                          UIUserNotificationTypeAlert)

                                              categories:nil];

    }

    else {

        //categories 必须为nil

        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

                                                          UIRemoteNotificationTypeSound |

                                                          UIRemoteNotificationTypeAlert)

                                              categories:nil];

    }

    

    [JPUSHService setupWithOption:launchOptions appKey:jPushAppKey  //这个是你的appid

                          channel:channel  //这个是发布渠道。我的猜测就是判别是iOS还是安卓,我一般写“APPSTORE”

                 apsForProduction:isProduction  //这个是标明是开发模式(NO)还是发布模式(YES)。

            advertisingIdentifier:nil];

}

apsForProduction:如果遇到推送无法接收到的时候,保证证书没有问题的话,就要检查一下,这个参数跟你推送的模式是否一致。可以去控制台测试。如果控制台发出可以收到,但后台发出无法收到。可以叫你们后台检查一下,他们那边对JPUSH的配置:apns_production,这个参数就是后台配置的推送模式,跟我们的这个字段的意义是一样的。

2.注册DeviceToken

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSLog(@"deviceToken:%@",deviceToken);

    /// Required - 注册 DeviceToken

    [JPUSHService registerDeviceToken:deviceToken];

}


3.处理推送消息


- ( void )application:( UIApplication  *)application  didReceiveRemoteNotification:( NSDictionary  *)userInfo {

    

    [JPUSHService handleRemoteNotification:userInfo];

}


#pragma mark - iOS10处理后台收到通知方法

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{

    AppDelegate *appdelegate = [[AppDelegate alloc]init];

    [appdelegate userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];

}


#pragma mark - iOS10处理前台收到通知方法

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

    AppDelegate *appdelegate = [[AppDelegate alloc]init];

    [appdelegate userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler];

}


#pragma mark - iOS10以下处理前后台收到通知方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

{

    [self application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];//这个方法就是我建的delegate的分类里面的方法。去处理通知消息

}


如果你不需要对推送的内容做处理,只是简单的展示的话。这样就可以了。是不是很简单。


三.如何使用JPUSH精确的推送给某一个用户,或某一个用户群。

JPUSH提供有设置tag(标签),alias(设备别名),其实就是给这个devicetoken对应的设备打上个标记便于区分的方法。其实就是给这个device token对应的设备,打个标签,


[JPUSHService setTags:set alias:[UserDefaultsUtils valueWithKey:@"mobile"] fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {

            NSLog(@"%@---%@",iAlias,iTags);

        }];

iAlias,iTags);

        }];

Tags:这是一个集合,比如你的APP的用户有多种类型:用户,师傅,公司。你就可以根据不同的用户类型传入不同的值。也可以根据用户的其他不同情况自己定制

alias:这个参数建议传入该用户的唯一标识,可以区分每一个用户:比如userid


第一次写,写的不好,不详细的地方,欢迎各位大牛、老司机、新手上路指正。谢谢!!!







最后

以上就是机智铅笔为你收集整理的iOS JPUSH接入的详细讲解的全部内容,希望文章能够帮你解决iOS JPUSH接入的详细讲解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部