iOS:Today Extension

PS:此文仅作对TodayExtension的一些简单的使用,且大多参看前辈文章所写,作者目前水平尚水….

学无止境,多多指教

Extension是iOS8引入的一个非常重要的新特性,主要是为了改善iOS沙盒机制对应用间通信限制,让app之间的数据交互成为可能,用户可以在app中使用其他应用提供的功能,而无需离开当前的应用。

iOS 8系统有6个支持扩展的系统区域(也称为扩展点),

今日(Today)-在下拉通知的“今天”的界面中添加一个小插件

分享(Share)-点击分享按钮后,将网站或者图片通过应用分享

操作(Action)-点击Action按钮后发送内容到应用

图片编辑(Photo Editing)-在系统的照片应用中提供编辑的功能

文档管理(Document Provider)-提供和管理文件内容

自定义键盘(Custom keyboard)-自定义键盘和输入法

iOS 9新增了4个扩展点:

音频单元(Audio Unit)-为音乐App提供扩展功能,例如GarageBand

Spotlight索引(Spotlight Index)- Spotlight搜索扩展

共享的链接(Shared Links)-Safair共享的连接扩展

广告拦截(Content Blocker)-Safair广告拦截扩展

-----------------------------------------搜了一段----------------------------------------------

本次主要是介绍Today Extension的应用吧:

1、创建

ps:扩展点不能独立存在,所以应创建于原有工程基础上

在原用工程中,点击Xcode菜单的File->New->Target,选择iOS中的ApplicationExtension的Today Extension。

填写Today名字之后出现一个alert;这个选择无关要紧、因为我们可以自己在scheme中更改

选择Activate之后:

当然也可以自己改回来

选择此种方式只是方便调试罢了,区别WidegetsDemo这个scheme只是不用把通知栏了拉下来罢了.......

检查一下我们工程,发现多出4个文件

点击storyBoard、我修改了一下原有label的文字

command + R选择Today点击run就可以看到文章首图片的效果

当然,在扩展中我们的名字可以与应用不一:

还记得我们新增添的文件吧?提醒到这估计大家都会明白了,直接在新增plist文件中修改Bundle display name即可

当然,widget的高度是可调整的

尝试了下在storyBoard中修改VC的view属性,SB中显示是作出了修改的,但是模拟器跑出来的却依然高度为默认值(得再找找在SB上修改高度的方法)

在代码区写入[self setPreferredContentSize:CGSizeMake(0, 100)];则成功地修改了widget的高度

PS:如果在SB下修改的话,最好写在awakeFromNib中啦,当然也可以随时修改wideget的高度只要在手势或者是target-action中添加即可(可以以此做一些伸缩动画)。

如果选择代码布局工程的话,就把SB删掉吧…同时配置plist文件的字段:

将NSExtensionMainStoryboard删除掉

使用NSExtensionPrincipalClass替代之

嗯,之后我们就可以沉浸在代码的海洋里啦~~~你想怎么搞就怎么搞…

细心的同学肯定发现我上面label中怎么是不居中而是有一定的偏移的呢?给了VC属性view一个颜色却发现其存在一定的缩进

此外打印台出现了一个警告、这是设置了背景颜色之后才出现的,取消则消失:

相信很多同学都已经发现是VC是遵循NCWidgetProviding协议的,那么在里面能否找我我们心仪的方法呢!

打开

发现里面有仨方法

//今日扩展的刷新设置,内容刷新完调用

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResultresult))completionHandler {

    // If an error is encountered, use NCUpdateResultFailed

    // If there's no update required, use NCUpdateResultNoData

    // If there's an update, use NCUpdateResultNewData

    [self updateWithCurrencyData];

    completionHandler(NCUpdateResultNewData);

}

//界面左侧的偏移量

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets{

        return UIEdgeInsetsZero;//使左侧默认留白区域被填充

}

//实现vibrancy特效 (还是不清楚这里是怎么用...)

+ (UIVibrancyEffect *)notificationCenterVibrancyEffect;

那么在这里我们就是用第二方法,

调用后成功是的界面的缩进量减为0

加量个button试了下、确实可以响应

接下来、如何做到点击widget就能点进去应用呢?

需要使用Open URL的方式打开

首先在容器APP的plist文件上添加

在容器APP的AppDelegate中添加如下代码:

然后在TodayExtension那边的一个button的事件中加入

来跑一个?OK,这样我们就成功进入到APP

前面都可以说是一些简单的小菜吧。

下面来正题:探讨下与容器APP之间的数据的共享

方式:通过AppGroup来共享数据,同属于一个group的App可以共同访问并修改某个数据。

到容器APP中target位置点击Capabilities创建一个group,同时也在targets中的TodayExtension中加入到这个group中,这样我们就可进行数据的共享了。(此处是没有申请证书的……)

详细的流程为:

Shared User Defaults:

创建一个app group流程

选中Host App Target -> Capabilities,找到App Groups,设置为ON。这时,Xcode会连接developer.apple.com,自动到我的开发者账号中寻找app group,过一会儿就会列出所有曾经创建过的app group。点击加号创建一个新的。命名方式:group.TE/*名字最好具体一点*/。Xcode会自动把新创建的app group添加到开发者账号中。

在Extension中重复以上步骤(不需要创建新的),在列表中选中刚刚创建的就好。

注意:打开了app group之后,Xcode会自动创建一个entitlements文件,在工程的根目录下。在Build Settings -> Code Signing -> Code Signing Entitlements中,也能看到这个文件名。因为多了这个entitlements,所以,相应的Provisioning Profile也需要重新生成,生成的步骤和以前相同。

且据说这俩证书是收费的,如果没有去申请的话,一个帐号可免费测试10个证书,容器APP一个,TodayExtension扩展点一个,也就是说一个带Today扩展的应用需要俩证书。

容器APP VC处

TodayExtensionVC处

成功地收到容器APP的数据。

Failed to inheritCoreMedia permissions from439: (null)

又是小警告,真不知道是什么鬼。。。有大神说用command+shift+K   clean一下项目可是用了后连打印台都不工作了。。。再command+R还是出现这样的错误(再看看吧~~~)

当然,上面只是一个小小的数据共享演示,一般的话我还是会运用归档和解档去进行数据的共享的。

另外:如果想要在容器APP中控制TodayExtension的话可以在容器APP中如下操作(实质上我们在依在Today直接edit处理掉…)

#import <NotificationCenter/NotificationCenter.h>

[[NCWidgetControllerwidgetController]setHasContent:NO/*YES为显示NO为隐藏*/forWidgetWithBundleIdentifier:@"wizet.WidgetsDemo.TodayExtension"];

最后附上几篇参考文章:

http://wangchao0802.blog.163.com/blog/static/5022249920151221338677/

http://www.hmttommy.com/2014/11/02/widget/#u4E0A_u4F20_u6CE8_u610F_u4E8B_u9879

http://www.cnblogs.com/xdream86/p/3855932.html

http://www.cocoachina.com/ios/20141023/10027.html

http://www.tuicool.com/articles/UfI7vy6

http://www.jianshu.com/p/e669daa714b2

http://www.cocoachina.com/ios/20150417/11597.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容