新普金娱乐网址


雨齐游记 疯行天下(十六)

加解密详解

地理回忆去冰岛旅行,不扣红玩家攻略怎行!

  • 十二月 20, 2018
  • 地理
  • 没有评论

iOS10翻新之后,推送也是开了有些小修改,下面我哪怕叫大家精心说说。希望看了我之当即首著作,对我们持有助。

前言

一律、简单可门篇—看了便好略适配完了

绝对简单的推送证书与环境之题目,我就无在此地说啊,我以此间说之,是凭借原工程的适配。

1.第一我们用开拓下边的开关。所有的推送平台,不管是极光仍旧什么的,要想接受推送,这么些是须打开的哎~

QQ20160914-4.png

尔后,系统会转变一个咱先不曾见了的文本,如图:

地理 1

QQ20160918-0.png-5.8kB

地理 2

QQ20160918-1.png-26.3kB

可能出的题目:从前起意中人反映了,将开环境由 development 变成
production ,在开关这里会生出错误,如图:

地理 3

QQ20160918-2.png-26.4kB

而我们点击Fix issue之后,会惊叹之意识,APS Environment由
production 又变成 development 了。

     
远离陆地的有点岛屿,有冰和火之色彩冲击,有华的神奇极光,有世界上太纯粹的空气与历届,以及最好好的温泉。神秘莫测看起颇老之国家,人与自然那么近,乘客主旨的出境游圣地!于是,寻平段子空闲时段,攒足一点积蓄,就这样背包包、带上相机,起始了自的冰岛之一起!

解决办法:我之指出是无做任何修改。

通过自家之测试,打包之后,生成的ipa包内,是未曾此.entitlements
文件之。经过测试,我意识是好正常收到推送音信的。测试的计如下,我们吧得以测试一下。

1冰岛知识贴

测试方法:打包之后安装ipa文件,然后拔取极光推送,采取生条件,推送,即可。

透过地点的操作,你便会晤惊讶的发现,推送已经适配完毕了,iOS10底系统,已经可以正常接收通告了。

(1)基本音信:冰岛位于北大西洋和大西洋之交界处,北欧五国某某,首都是塔尔萨,也是冰岛的顶要命城市,首都附近的西南地区人口占全国之三分之二。冰岛85.4%底人信奉基督教路德教派。冰岛人数对旁人友善,饮食习惯与北美洲故里相近,大之商旅及旅馆烹饪和南美洲艺术一样,西餐为主。

二、中级篇

这里我会被我们讲话同样语iOS10之推送,怎么样注册,通过什么代理,哪些方法可以据此,哪些措施无得以为此。

(2)地理信息:冰岛地处大西洋洋中脊上,地处高纬,受控于北印度洋暖流与西风带,形成了特别之温带海洋性气候。虽处于北极圈相邻,而冬季气温并无低,平均温度—零下2℃左右,冬日气温全岛以7顶20℃之间。无论什么令,都起或下雨和降雪。

1.系统自带方法

世家不论是运用三方平台的推送,依旧系统自带的推送,都先应该通晓下系自带方法,如何落实远程布告之落实。

  • 首先步导入#import <UserNotifications/UserNotifications.h>
    犹一旦遵守<UNUserNotificationCenterDelegate>的商谈,在Appdelegate.m中。
    这边要留意,我们最好写成这种样式

#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
  • 亚步我们得在
    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions遇注册通告,代码如下:

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

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
        //iOS10特有
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        // 必须写代理,不然无法监听通知的接收与点击
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                // 点击允许
                NSLog(@"注册成功");
                [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
                    NSLog(@"%@", settings);
                }];
            } else {
                // 点击不允许
                NSLog(@"注册失败");
            }
        }];
    }else if ([[UIDevice currentDevice].systemVersion floatValue] >8.0){
        //iOS8 - iOS10
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil]];

    }else if ([[UIDevice currentDevice].systemVersion floatValue] < 8.0) {
        //iOS8系统以下
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
    }
    // 注册获得device Token
    [[UIApplication sharedApplication] registerForRemoteNotifications];

中间,拿到Device Token的法子是未曾改变的。

// 获得Device Token
 - (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);
}
// 获得Device Token失败
- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

这一次iOS10连串的换代,苹果被了我们2个代理方来处理通报之吸收及点击事件,这有限独办法在<UNUserNotificationCenterDelegate>的商谈中,我们好翻下。其它,苹果将本地通告和远程通告合二也同一。区分本地文告及远程通告之好像是UNPushNotificationTrigger.h类中,UNPushNotificationTrigger的品类是新扩大的,通过她,我们可博得有通知的触及条件,在使用时,大家无应当一直使用那些近乎,应当以它的子类。

  • 自概括点说

  • 1.UNPushNotificationTrigger (远程公告) 远程推送的通报类型

  • 2.UN提姆eIntervalNotificationTrigger (本地布告)
    一定时间后,重复或不还推送通告。大家可设置timeInterval(时间距离)和repeats(是否再次)。

  • 3.UNCalendarNotificationTrigger(本地通告)
    一定日期未来,重复或无重复推送通告例如,你每一日8点推送一个公告,只要dateComponents为8,如若您想每一天8点都推送者公告,只要repeats为YES就可以了。

  • 4.UNLocationNotificationTrigger (本地通告)地理地方的一样种通告,
    当用户进入或离开一个地理区域来打招呼。在CLRegion标识符必须是绝无仅有的。因为如若相同之标识符来标识不同区域之UNNotificationRequests,会导致不确定的所作所为。

接到布告的代码如下:

// iOS 10收到通知
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
    NSDictionary * userInfo = notification.request.content.userInfo;
    UNNotificationRequest *request = notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容
    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        NSLog(@"iOS10 前台收到远程通知:%@", [self logDic:userInfo]);

    }
    else {
        // 判断为本地通知
        NSLog(@"iOS10 前台收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo);
    }
    completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置
}

脚的代码则是通的点击事件:

// 通知的点击事件
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{

    NSDictionary * userInfo = response.notification.request.content.userInfo;
    UNNotificationRequest *request = response.notification.request; // 收到推送的请求
    UNNotificationContent *content = request.content; // 收到推送的消息内容
    NSNumber *badge = content.badge;  // 推送消息的角标
    NSString *body = content.body;    // 推送消息体
    UNNotificationSound *sound = content.sound;  // 推送消息的声音
    NSString *subtitle = content.subtitle;  // 推送消息的副标题
    NSString *title = content.title;  // 推送消息的标题
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);

    }
    else {
        // 判断为本地通知
        NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo);
    }

    // Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called.
    completionHandler();  // 系统要求执行这个方法

}

当点击事件受到,固然大家无写completionHandler()以此艺术,可能会报一下底荒唐,希望我们留意下~
Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called.

末最后,大家要我们补充一下,旧本子的有些法,方便我们扩大iOS10之通报之打招呼,不影响原有逻辑。

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"iOS6及以下系统,收到通知:%@", [self logDic:userInfo]);
}

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

    NSLog(@"iOS7及以上系统,收到通知:%@", [self logDic:userInfo]);
    completionHandler(UIBackgroundFetchResultNewData);
}

冰岛特色西餐**

2.极光推送(需要下载最新的本子)

假如用到三正值的一些平台,做推送就相会更加简单。

1.登记文告的代码如下

if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif
  } 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];
  }

登记成功后,我们虽需投入极光推送更新后,新在的2个章程,这半个道在<JPUSHRegisterDelegate>代理方中。

/*
 * @brief handle UserNotifications.framework [willPresentNotification:withCompletionHandler:]
 * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
 * @param notification 前台得到的的通知对象
 * @param completionHandler 该callback中的options 请使用UNNotificationPresentationOptions
 */
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger options))completionHandler;
/*
 * @brief handle UserNotifications.framework [didReceiveNotificationResponse:withCompletionHandler:]
 * @param center [UNUserNotificationCenter currentNotificationCenter] 新特性用户通知中心
 * @param response 通知响应对象
 * @param completionHandler
 */
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler;

拔取时,只待在下面的代码中增长极光的处理办法就足以了,具体以如下图:

if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    // 这个方法,不管是收到通知代理还是点击通知的代理,如果使用极光推送,我们都是需要增加这个方法的。
    [JPUSHService handleRemoteNotification:userInfo];

    NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);
    [rootViewController addNotificationCount];
  }
  else {
    // 判断为本地通知
    NSLog(@"iOS10 收到本地通知:{\\\\nbody:%@,\\\\ntitle:%@,\\\\nsubtitle:%@,\\\\nbadge:%@,\\\\nsound:%@,\\\\nuserInfo:%@\\\\n}",body,title,subtitle,badge,sound,userInfo);
  }

由此者的章,相信咱们都足以起来询问新本子的推送,要什么样处理啊~

稍后,我会更新以下的情节,希望我们援助:
UNNotificationContentExtension – 文告内容扩充
UNNotificationService(Service)Extension- 布告服务扩大
UNNotificationAction – 布告响应的形式
UNErrorCode – 通告错误
UNNotificationAttachment – 附件通知
稍后自家还会合落得传demo路径。

比方你欢喜自的著作,不要遗忘关注自身,谢谢我们了~
除此以外假使你假使转载,希望可以表明出处,我会写有更多更好的章,来回馈我们~

地理,(3)最佳游览日:5月——2月、二月——三月。12月至3月首冰岛会现身极昼现象,几乎从不夜晚,可长帐篷露营活动,夜间行车也老有益于。同时1月17日是冰岛独立日,也是本土过的国庆日。八月及7月凡圈极光、溜冰、冰钓的好时节,另外,还好尝尝雪地机车、越野狩猎等刺激移动。

运动类型

2冰岛必游景点

微信号:o2trip

蓝湖温泉——世界头号疗养胜地

金子瀑布——黄金圈基本

间隙泉——黄金圈必看

神瀑布——壮美梦幻

冰河湖——时间好像截至以那一刻

3集体推荐

     
 对于喜好自由行的伴儿等,在旅行出发前挑选一个凭借谱的旅游集团安名次程异常关键。一方面可以节省时间办理签注保险等作业,另一方面对于游戏地方与体系能来肯定的学问储备准备。自由行最讲究的是高枕无忧以及可靠,游玩时的劳务和体验,相对来说,安全保障下性价比更强当然是豪门最好盼望之。

     
 在既往底自由行游玩经历着,对冰岛的记忆最为深厚,冰及火、灵动与壮丽、魔幻与私、惊险和震撼,真的是百年的记得。近期国内做出境游的小卖部广大,提出大家选取时差不多较。大商店未必然能服务到各一样员,小店无自然产品无齐。相应的专门做定向天,如冰岛、土耳其、法国首都游的商家再一次值得的挑三拣四,我个人通常喜欢以天猫上查找,发现氧气旅行提供的花色以及价位还很OK。

4签注保险等准备

     
 一般的话,你控制去冰岛玩,最好提前3个月准备,因为冰岛是申根国家,所以自由行办理签证而提早准备。这边有一样首还不易的有关冰岛签证的干货,网址是:http://dwz.cn/2aKVIx(提议复制网址在浏览器被开辟),内容多很详细了。

5生活用品准备

洗漱用品:亚洲大酒馆是因为环保意识往往没牙刷、牙膏、拖鞋等五回性消费品,最好自带也整洁福利。

充电设备:亚洲电源依然220伏,插座都是圆孔的,自带充电器等电器时,要自带易插座。

手机网络:引导手机出国需要以动身前至当地电信局办理开通国际意义手续,同时要起国际随身WIFI也提出市一个,以便让网络使用方便和免费。在报旅游公司涉足运动类型的时,大部分时光会免费赠与车载WiFi。

身上医药:鉴于在南美洲的药房买药要管医务卫生人员的处方,且医疗费昂贵,指出随身带上常用药(高烧药、肠胃药、创口贴等),以备不时之需。

人民币兑:去冰岛一定要提早换一些加元,并随身带达有的有些额新币钞票,以便去本地兑换冰岛克朗。

录像者:假定假诺带胶卷、数码、单反相机类相机,胶圈最好拔取ISO400、电池采纳铅酸电池要可充电电池,以及丰富的存储卡。

6住宿及安全方面

     
不任去哪游玩,一定要留心旅途的安,护照、机票、钱和贵重物品必须贴身指点。离开游览车、宾馆、餐厅时,将贵重物品随身带在,这一个都是主导的本人安全保障。

     
当然去交冰岛后,会来温泉、游船、骑马、冰川徒步和部分自驾环岛游,这里人密度相比较小,相对还相当安全的。

北极光

尾记

     
 作为同称好逛山玩水、追求旅行带来为我之刺激和深度思考,计划协会一个素描团队二零一七年又失划一巡冰岛,拍摄不同主旨的肖像。假设您也本着旅行感兴趣,你吗想去冰岛,不妨在到大家的协会。

      穿越世界,我们甘愿开自然美景的意识者、记录者。

       关于冰岛,关于这同一会冰和火之视觉盛宴,自己去押,感受最真切!

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图