APPLE WATCH 中文手册:通知--自定义通知界面

1417060569412909

自定义通知界面含有两个独立的界面:一个静态界面,一个动态界面。动态界面显示了完整的自定义通知内容样式,并且它可以包含由 WatchKit 扩展提供的定制内容和图形。静态界面是一个简单的界面,它仅仅只含有通知的提示信息,以及您在设计时配置的静态图像以及文本信息。

当您在 storyboard 文件中添加新的通知界面控制器的时候,Xcode 将会创建一个独立的 storyboard 场景,其中包含有一个动态界面和一个静态界面,如图15-1所示。静态界面是必需的,如果需要的话您可以删除动态界面。如果静态界面已经可以显示您想要的全部信息,那么您就可以删除动态界面。动态界面和静态场景都和相同的通知类型相关联,而这个通知类型可以用来指定使用何种通知类别来关联静态界面。

图15-1 静态界面和动态界面

1417059875679389

当合适类型的通知抵达时,WatchKit便尝试显示动态界面。如果您并未提供静态界面,或者出于某些原因您的动态界面不可用,那么Apple Watch 将会用静态界面来代替。Apple Watch 同样也会在您明白告知使用静态场景时显示静态界面。配置动态界面需要调用didReceiveRemoteNotification:withCompletion:didReceiveLocalNotification:withCompletion:方法。如果 这些方法使用WKUserNotificationInterfaceTypeDefault常量来调用完成处理程序的话,那么 Apple Watch将会显示静态场景。

配置自定义界面的通知类型

每个通知界面必须分配一个通知类型,以告知 Apple Watch 何时使用它。到来的通知可以在消息载体中包含类别值。Apple Watch 使用这些类别值来决定显示何种通知场景。如果到来的通知并未包含类别值,那么Apple Watch会展示一个类型被设定为`default`的通知界面。

要给通知界面分配通知类型,请在 storyboard 中配置和场景对应的通知类别(Notification Catagory)对象。该对象的属性检查器含有一个Name 属性,如图15-2所示。在这个属性中输入通知类型的类别名称。您同样也可以使用该对象来指定窗扇的颜色。每个通知场景的Name 属性不能相同。

图15-2 配置通知类型信息

1417059972304890

当生成远程通知时,您的服务器要通过在其`aps`字典中包含category键的值来指定通知类型。`category`的键值要和您在 iOS 应用以及您在通知类别对象中的 Name 属性指定的一样。例如,在图15-2中,类别文本是`MeetingInvite`。

提示:类别字符串同样定义了被添加到通知界面末端的操作按钮(如果存在的话)。欲了解关于支持自定义按钮动作的更多信息,请参阅Adding Action Buttons to Notifications

配置静态通知界面

使用静态通知界面来定义一个自定义通知界面的基本样式。使用静态界面的目的是在 WatchKit 扩展不能及时配置动态界面的时候,提供一个回退界面。创建静态界面的规则如下:

· 所有的图像必须驻留在 Watch 应用包中

· 界面不能包含控件、表格、地图,以及其他交互元素

· 界面的`notificationAlertLabel`输出口必须与某个标签相关联。标签的文本设置为通知的警告信息。其他的标签文本不变,并且只能够在设计时设置。

图15-3显示了在一个日历应用当中的静态和静态场景,其使用了自定义通知界面。通知箭头指向了静态场景,其中包含了自定义图标和两个标签。“Message”标签和`notificationAlertLabel`输出口连接,因此它将在运行时接收通知的警告信息。

图15-3 单一通知类型的静态和动态场景

1417060062362348

除了和`notificationAlertLabel`输出口相连的标签外,在静态通知场景中的标签和图像是不能够改变的。当您在设计界面时请记住这条准则,并确保每个标签的文本是合适的。

配置动态通知界面

动态通知界面给用户提供了一个更丰富的通知体验。借助动态界面,您可以显示很多的内容。您可以添加额外的信息,配置多个标签,动态地生成内容,等等。

实现动态通知界面需要创建一个自定义的WKUserNotificationInterfaceController子类。该子类的实现代码负责在通知需要显示时配置界面。

设计动态界面

配置动态界面和配置其他界面控制器场景十分相似。

您可以在子类中包含标签、图像以及场景中的其他对象,并使用这些输出口以在运行时配置场景的内容。单击通知界面将启动应用,因此通知界面不应当包含交互控制。

· 可在绝大多数界面上使用标签、图像、组以及分隔符。

· 您可能想要在需要的时候使用表格和地图。

· 不要包含有按钮、开关,或者其他交互控件。

在运行时配置动态界面

界面初始化之后,WatchKit将负载数据传输到通知界面控制器的不同方法中。对于远程通知来说,WatchKit 调用didReceiveRemoteNotification:withCompletion:方法。对于本地通知来说,它调用didReceiveLocalNotification:withCompletion:方法。请使用接受到的数据来配置您的通知界面。界面配置完成后,您必须要调用所提供的完成处理代码块来让 WatchKit 知道您的界面已经准备就绪。图15-4显示了处理远程通知的初始化和配置进程。

图15-4 显示自定义通知界面

1417060244348853

始终选择使用 didReceiveRemoteNotification:withCompletion:didReceiveLocalNotification:withCompletion:方法来配置您的通知界面。当实现完这两个方法后,尽快运行所提供的完成处理方法来配置界面。然后尽快运行这个代码块。如果您等待了太长时间,那么Ale Watch将会使用静态界面。

代码表15-1显示了`didReceiveRemoteNotification:withCompletion:`方法的实现例程。这个方法被一个发送远程通知的虚构日历应用所实现,用来提示某个新的会议邀请。这个方法从远程通知负载中获取数据,然后使用这个数据来设置通知界面的标签值。为了简便,这个示例假定服务器发送的键值中都有合适的对应值,但是您自己的代码应该执行必要的错误检查,来保证复杂数据是由有效的。在配置完标签后,这个方法将调用完成处理器,来让 WatchKit 知晓自定义界面已经就绪。

代码表15-1 配置远程通知的自定义界面

// Standard remote notification payload keys.
NSString* apsKeyString = @"aps";
NSString* titleKeyString = @"title";
 
// Payload keys that are specific to the app.
NSString* customDataKey = @"cal";
NSString* invitationDateKey = @"date";
NSString* invitationLocationKey = @"loc";
NSString* invitationNotesKey = @"note";
 
- (void)didReceiveRemoteNotification:(NSDictionary *)remoteNotification withCompletion:(void(^)(WKUserNotificationInterfaceType interface)) completionHandler {
    // Get the aps dictionary from the payload.
    NSDictionary* apsDict = [remoteNotification objectForKey:apsKeyString];
 
    // Retrieve the title of the invitation.
    NSString* titleString = [apsDict objectForKey:titleKeyString];
    [self.titleLabel setText:titleString];
 
    // Extract the date and time from the custom section of the payload.
    // The date/time information is stored as the number of seconds since 1970.
    NSDictionary* customDataDict = [remoteNotification objectForKey:customDataKey];
    NSNumber* dateValue = [customDataDict objectForKey:invitationDateKey];
    NSDate* inviteDate = [NSDate dateWithTimeIntervalSince1970:[dateValue doubleValue]];
 
    // Format the date and time strings.
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 
    // Call a custom method to get the localized date format string for the user.
    // The default date format string is "EEE, MMM d".
    dateFormatter.dateFormat = [self dateFormatForCurrentUser];
    NSString *formattedDateString = [dateFormatter stringFromDate:inviteDate];
 
    // Call a custom method to get the localized time format string for the user.
    // The default time format string is "h:mm a".
    dateFormatter.dateFormat = [self timeFormatForCurrentUser];
    NSString *formattedTimeString = [dateFormatter stringFromDate:inviteDate];
 
    // Set the date and time in the corresponding labels.
    [self.dateLabel setText:formattedDateString];
    [self.timeLabel setText:formattedTimeString];
 
    // Set the location of the meeting.
    NSString* locationString = [customDataDict objectForKey:invitationLocationKey];
    [self.locationLabel setText:locationString];
 
    // Set the invitation's notes (if any).
    NSString* notesString = [customDataDict objectForKey:invitationNotesKey];
    [self.notesLabel setText:notesString];
 
    // Tell WatchKit to display the custom interface.
    completionHandler(WKUserNotificationInterfaceTypeCustom);
}

当调用完成处理代码块时,如果你想 WatchKit 要显示静态界面的话,请指定WKUserNotificationInterfaceTypeDefault的内容。

测试您的自定义界面

当您准备在模拟器测试您的自定义界面时,如果您还没有确定扩展已制作完成的话,请创建一个自定义编译方案来运行您的通知。使用 Xcode 模板提供的`RemoteNotificationPayload.json`文件来指定您的负载数据。要了解更多关于设置编译方案以及配置负载数据的内容,请参阅The Build, Run, Debug Process

原创文章,作者:ioued,如若转载,请注明出处:https://www.iamue.com/6238/

(0)
iouedioued
上一篇 2015-06-15 09:55
下一篇 2015-06-15 09:59

相关推荐

  • Axure RP软件安装教程

    Axure RP各种版本软件安装教程及下载地址:链接:https://pan.baidu.com/s/1AUHDQmeQejc9OMg7t2gmzQ密码:n29o

    2018-04-29
  • 用户体验的创新设计和研究

    2018年全国两会期间,全国政协委员叶友达教授向大会提交了《关于鼓励基于用户体验的设计创新,加速科技创新成果转化的提案》,建议加大对基于用户体验的设计创新的宣传力度,建立全国或区域用户体验研究机构,促进科技创新成果快速、高效落地。长期以来,用户体验的“以用户为中心设计”(User-Centered Design, UCD)的理念一直冲击着传统的“以技术驱动设计”的理念。有研究表明,美国两个世纪以来著名的53位创新者的创新过程,从电话到互...

    微信热点 2018-03-27
  • 在你重新设计网页的时候考虑好用户体验

    在过去的几年中,网页设计和在线营销有一些奇妙的转变,具体来说,就是网页设计风格从很重的内容和关键字塞满的网页 转为 简约的设计,让用户视觉能更集中的体验。

    2017-05-27
  • Axure RP入门第五篇——全局变量实现不同窗口加载

    产品经理入门:Axure RP入门第五篇——全局变量实现不同窗口加载

    2018-03-04
  • 产品经理|交互设计专场

    产品经理走上交互之路3月31日深圳线下分享会2018PMTalk春节后带来的第一场深圳线下产品经理活动,一场以交互设计主题的产品经理线下深圳交流会,PMTalk产品经理社区将带头又一次与大家见面!01一场值得产品经理学习成长的分享会本次分享会,在经历Pmtalk发起人几位小伙伴利用业余时间,在深圳成立这个产品组织后,我们将首次也推出PMTalk社区会员、产品经理合作周边等服务!具体的就在倒计时7天更新!本次沙龙我们邀请的深圳产品大咖(持...

    2018-03-15
  • 阿里设计专家深度解读:全链路设计师和设计增值再现

    分享嘉宾:汪方进(1688UED设计总监) 点评嘉宾:高峰(阿里巴巴国际UED B2B总监)、周敏青(阿里巴巴国际UED AliExpress总监)   前些日子的美国大选,特朗普胜出了,这个结果让很多小伙伴惊呆了!他竞选口号是:M…

    交互专题 2017-09-11
  • 不懂这几个交互原则,你一定是假的UED设计师

    如果你对这个题目很陌生,那请赶紧登上这辆末班车,来不及解释了。在日常工作中,我们总是会遇到产品或者开发对你发问“这个按钮为什么要放在这里”,“这里显示的信息条目为什么只剩这几个”blablabla之类。不管是为了在对接流程中更加有理有据,也为了使自己的设计更人性更好用,了解这几条基本原则,也是非常必要的。除非有更好的选择,否则就遵从标准。交互设计之父 Alan Cooper最为人熟知的或许就是这句“除非有更好的选择,否则就遵从标准”了,...

    2018-03-15
  • 交互体验,是最好的科普教育——天宁小学参观丽水市科技馆活动随记

    点击上方“莲都区教育局”可以关注哦充分利用身边的公共科普资源,激发学生的科学探究兴趣,享受交互体验式的科普教育,增强学生的科技创新意识,这是我们安排学生走进科学馆进行参观体验的根本目的。这次天宁小学的孩子们真的是赚到了!面前的这个机器人可不简单,它的中文名叫阿尔法。2016年央视猴年春晚上,540台阿尔法机器人与歌手孙楠共同演绎歌曲《冲向巅峰》,那气场堪比国庆大阅兵。工作人员对阿尔法机器人作简要介绍:阿尔法是一款仿人型智能机器人,可直立...

    2018-01-30
  • 【用户体验.春节特辑】我拿什么记住你(总第268期)

    亦可访问www.koushutianxia.com了解详情编家谱   修家史   留视频建祠堂   亲互动   传万代总第268期时间是这个世界上最锋利的武器,没有任何事物能够阻挡。所有的一切,人、物、事都随着时间的磨砺逐渐模糊、逐渐消逝。父亲的突然去世,一直是我心中最深切的痛,他的离去是那样的突然,突然到我完全无法接受他已经永远离去的事实。总觉得父亲依然还在,总会幻想我下班回家,父亲还会像往常一样在门口笑眯眯的看着我说:“回来啦,儿子...

    2018-02-19
  • Daydream产品设计案例 - YouTube VR

    每年这个季节都盼着来自北方的冷空气能早些把这个城市吹干、吹冷。这世上,又湿又温暖的地方未必都是好地方。 随着Daydream头显和Pixel手机的发布上市,Google官方的各路VR app也陆续上线。我个人还没有机会、没有…

    2016-12-08