iOS-widget-Today 擴展

今天要分享的是通知中心擴展中的-Today擴展(ios8推出),ios目前可以使用的擴展有:today擴展(widget-即通知欄的今天一欄)、鍵盤自定義、文件管理晤愧、照片編輯擴展、通知擴展(推送)蛉腌、分享擴展等官份。擴展與擁有這個擴展主應用的生命周期是獨立的。他們是兩個獨立的進程烙丛。

一舅巷、目標:

  我項目是希望在widget中添加一個H5的頁面方便以后的自定義。點擊對應按鈕去到相應界面河咽,我也不知道這樣算不算濫用widget钠右,因為之前看見過有人的應用被蘋果拒絕就是因為濫用widget導致的。

二忘蟹、實現(xiàn):

1.因為widget是一個單獨的進程所以需要創(chuàng)建一個target:


首先 2016-07-24 23.01.34.png
然后 2016-07-24 23.01.13.png

2.代碼

- (void)viewDidLoad {
    [super viewDidLoad];
    // 調(diào)整Widget的高度
    self.preferredContentSize = CGSizeMake(0, 200);
    // 1飒房、創(chuàng)建UIWebView:
    UIWebView *mWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)];
    // 2、設(shè)置屬性:
    mWebView.scalesPageToFit = YES;// 自動對頁面進行縮放以適應屏幕
    // 檢測所有數(shù)據(jù)類型  設(shè)定電話號碼媚值、網(wǎng)址狠毯、電子郵件和日期等文字變?yōu)殒溄游淖?    [mWebView setDataDetectorTypes:UIDataDetectorTypeAll];
    mWebView.delegate = self;
    // 打開URL
    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    [mWebView loadRequest:request];
    [self.view addSubview:mWebView];
    
    [self makeButtonWithTitle:@"返回" frame:CGRectMake(0, 0, 80, 64) button:_backBtn];
    [self makeButtonWithTitle:@"前進" frame:CGRectMake(self.view.frame.size.width - 80, 0, 80, 64) button:_forWardBtn];
    [self makeButtonWithTitle:@"刷新" frame:CGRectMake(100, 0, 80, 64) button:_refreshBtn];
    
}
// 取消widget默認的inset,讓應用靠左
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
    return UIEdgeInsetsZero;
}
- (void)makeButtonWithTitle:(NSString *)title frame:(CGRect)frame button:(UIButton *)btn {
    btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTitle:title forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(skip:) forControlEvents:UIControlEventTouchUpInside];
    [btn setFrame:frame];
    
    if ([title isEqualToString:@"返回"]) {
        btn.tag = 101;
    } else if([title isEqualToString:@"前進"]) {
        btn.tag = 102;
    }else {
        btn.tag = 103;
    }
    [self.view addSubview:btn];
}
- (void)skip:(UIButton *)button
{
    if (button.tag == 101) {
        [self.extensionContext openURL:[NSURL URLWithString:@"iOSWidgetApp://action=GotoHomePage"] completionHandler:^(BOOL success) {
            NSLog(@"101   open url result:%d",success);
        }];
    }
    else if(button.tag == 102) {
        [self.extensionContext openURL:[NSURL URLWithString:@"iOSWidgetApp://action=GotoOtherPage"] completionHandler:^(BOOL success) {
            NSLog(@"102    open url result:%d",success);
        }];
    }else {
        [self.extensionContext openURL:[NSURL URLWithString:@"iOSWidgetApp://action=GotoOtherPages"] completionHandler:^(BOOL success) {
            NSLog(@"102    open url result:%d",success);
        }];
    }
}

運行與結(jié)果展示:


運行 2016-07-24 23.02.28.png
效果圖 2016-07-25 09.55.44.png

擴展與主程序的交互-數(shù)據(jù)共享

這就要涉及擴展與應用之間的數(shù)據(jù)共享了-App Groups.

  1. 首先在主應用的target > Capabilities下 打開App Groups 點擊+ 在group.后面輸入標識符褥芒,


    Snip20160725_1.png

    再去擴展的target下進行相同的操作嚼松,記得group.后的標識符要一致。

  2. 代碼:
    在上面的擴展代碼里面已經(jīng)定義了點擊事件锰扶,這里主要是主應用接收到信息后進行判斷和處理献酗。
    在這之前還需要先配置URL schems,在主程序的plist里面:


    plist 2016-07-25 10.40.15.png
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    NSString* prefix = @"iOSWidgetApp://action=";
    
    UIWebView *webView = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    webView.backgroundColor = [UIColor clearColor];
    webView.delegate = self;
    [webView setUserInteractionEnabled:YES];//是否支持交互
    [webView setOpaque:NO];//opaque是不透明的意思
    [webView setScalesPageToFit:YES];//自動縮放以適應屏幕
    webView .scrollView.bounces = NO;// 禁止UIWebView下拉拖動效果
    NSString *path;
    if ([[url absoluteString] rangeOfString:prefix].location != NSNotFound) {
        NSString* action = [[url absoluteString] substringFromIndex:prefix.length];
        if ([action isEqualToString:@"GotoHomePage"]) {
            path = [[NSBundle mainBundle] pathForResource:@"help" ofType:@"html"];
        }
        else if([action isEqualToString:@"GotoOtherPage"]) {
            path = [[NSBundle mainBundle] pathForResource:@"setting" ofType:@"html"];
        }else {
            path = [[NSBundle mainBundle] pathForResource:@"healthyArticle" ofType:@"html"];
        }
        NSURL *urll = [NSURL fileURLWithPath:path];
        NSURLRequest* request = [NSURLRequest requestWithURL:urll] ;
        [webView loadRequest:request];
        [self.rootView.view addSubview:webView];
        self.rootView.view.backgroundColor = [UIColor whiteColor];
    }
    return  YES;
}

因為我是需要到對應的H5頁面所以是添加的H5頁面。

注意:

1.當程序內(nèi)存不足時坷牛,蘋果優(yōu)先會殺死擴展罕偎,因此需要注意內(nèi)存的管理。

2.在配置team是賬號需要一致(我測試的時候免費賬號好像還不行漓帅,需要付費的賬號)

3.在iOS10上面還可以從左滑主頁面和鎖屏進入widget锨亏。

4.today只有在下拉的時候才會更新,通知欄兩邊的更新機制是不一樣的忙干。

5.一般更新路徑:viewDidLoad->viewWillAppear,但是如果你下拉過于頻繁就只會執(zhí)行viewWillAppear里面的浪藻,因此更新代碼最好放在viewWillAppear里面捐迫。

如有錯誤地方,萬望指出爱葵,謝謝施戴!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末反浓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赞哗,更是在濱河造成了極大的恐慌雷则,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肪笋,死亡現(xiàn)場離奇詭異月劈,居然都是意外死亡,警方通過查閱死者的電腦和手機藤乙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門猜揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坛梁,你說我怎么就攤上這事而姐。” “怎么了划咐?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵拴念,是天一觀的道長。 經(jīng)常有香客問我褐缠,道長政鼠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任送丰,我火速辦了婚禮缔俄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘器躏。我一直安慰自己俐载,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布登失。 她就那樣靜靜地躺著遏佣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揽浙。 梳的紋絲不亂的頭發(fā)上状婶,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音馅巷,去河邊找鬼膛虫。 笑死,一個胖子當著我的面吹牛钓猬,可吹牛的內(nèi)容都是我干的稍刀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼账月!你這毒婦竟也來了综膀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤局齿,失蹤者是張志新(化名)和其女友劉穎剧劝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抓歼,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡讥此,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锭部。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂论。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拌禾,靈堂內(nèi)的尸體忽然破棺而出取胎,到底是詐尸還是另有隱情,我是刑警寧澤湃窍,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布闻蛀,位于F島的核電站,受9級特大地震影響您市,放射性物質(zhì)發(fā)生泄漏觉痛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一茵休、第九天 我趴在偏房一處隱蔽的房頂上張望薪棒。 院中可真熱鬧,春花似錦榕莺、人聲如沸俐芯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧史。三九已至,卻和暖如春唠雕,著一層夾襖步出監(jiān)牢的瞬間贸营,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工岩睁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钞脂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓捕儒,卻偏偏與公主長得像芳肌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肋层,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容