概述
不说废话,进入主题。
一:推送实现的原理:每个设备都会有唯一的设备标识: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];
}
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"deviceToken:%@",deviceToken);
/// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
}
3.处理推送消息
[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接入的详细讲解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复