ios UNNotificationServiceExtension app和extension的通信

前言:網(wǎng)上一搜這個關鍵詞【UNNotificationServiceExtension】敞恋,一片片的教程胃珍。但是每一個都特么轉(zhuǎn)載自【徐不同】耐薯,窩草,毫無更改徐许。只想淡淡吐槽一句MMPJ┟邸!

本文說的一種app和extension的通信問題雌隅。
需求:需要統(tǒng)計推送到達率翻默。再extension中進行數(shù)據(jù)上報處理操作缸沃。廢話不多提開始操作。

1修械、新建target(網(wǎng)上一坨趾牧,這里不贅述了)
image.png
image.png
2、斷點調(diào)試?衔邸G痰ァ!

這個問題MMP困擾了我好長時間蹦渣。

1運行app
2【Xcode】——【Debug】——【Attach to Process PID or Name】添加新建的target名字 如圖1.0,添加之后會出現(xiàn)NotificationService Waiting to Attach 如圖2.0
3 點擊工程哄芜,選擇target運行 如圖3.0
4 選擇自己的宿主app 如圖4.0

1.0.png
2.0.png
3.0.png
4.0.png
3、證書問題
image.png

NotificationService自動簽名柬唯,但代碼簽名身份iPhone開發(fā)人員:xxxxx已手動指定认臊。在build settings編輯器中為“iPhone開發(fā)人員”設置代碼簽名標識值,或者在項目編輯器中切換到手動簽名锄奢。

方法1 點擊Automatically manage siging 系統(tǒng)會幫你生成一個證書


image.png

方法2 app總會上架失晴,還是自己新建證書為好。手把手教你推送證書

4斟薇、用工具進行推送測試

工具1:SmartPush

工具2:Easy APNS Provider

推送格式:

{
    "aps": {
        "alert": "This is some fancy message.",
        "badge": 1,
        "sound": "default",
        "mutable-content": "1",
        "imageAbsoluteString": "http://upload.univs.cn/2012/0104/1325645511371.jpg"

    }
}

這里我們要注意一定要有"mutable-content": "1",以及一定要有Alert的字段师坎,否則可能會攔截通知失敗。(蘋果文檔說的)堪滨。

打個斷點胯陋,可以調(diào)試了!8は洹遏乔!

怎么通信呢?
在app Podfile里加入target 與app同級

target 'NotificationService' do
  pod 'xxx'
end

但是我引用的庫中使用了 [UIApplication sharedApplication] extexsion中是不允許這樣使用的发笔、
怎么辦盟萨?只能換方式

在默認情況下,iOS的應用是存在一個沙盒里面的了讨,不允許應用與應用直接進行數(shù)據(jù)的交互捻激。為此,蘋果提供了一項叫App Groups的服務前计,該服務允許開發(fā)者可以在自己的應用之間通過NSUserDefaults胞谭、NSFileManager或者CoreData來進行相互的數(shù)據(jù)傳輸。
下面介紹如何激活App Groups服務:

  • 首先要有一個獨立的AppID(帶通配符*號的AppID是不允許激活App Groups的)


    image.png
  • 然后打開容器應用的項目配置的Capabilities頁簽男杈,激活App Groups特性丈屹,如圖:

image.png
  • 點擊+號添加一個App Groups,點擊OK按鈕
image.png
  • 創(chuàng)建完成后伶棒,XCode會自動把應用添加到新建的分組中旺垒。如圖:
image.png
  • 上述步驟完成后彩库,容器程序的App Groups已經(jīng)算是設置完成。然后輪到Share Extension插件需要激活App Groups服務先蒋,設置步驟跟容器程序相同骇钦,唯一不同的是,插件不需要創(chuàng)建新的App Group竞漾,只要加入到容器程序剛才創(chuàng)建的Group即可(這里可以理解為司忱,哪些應用要實現(xiàn)共享數(shù)據(jù),那么他們必須在同一個Group里面)畴蹭。如圖:
image.png

至此,應用和擴展的App Groups服務都已經(jīng)啟動鳍烁,現(xiàn)在就要進行分享內(nèi)容的傳輸操作叨襟。下面分別介紹一下NSUserDefaults、NSFileManager以及CoreData三種方式是如何實現(xiàn)App Groups下的數(shù)據(jù)操作:

  • NSUserDefaults:要想設置或訪問Group的數(shù)據(jù)幔荒,不能在使用standardUserDefaults方法來獲取一個NSUserDefaults對象了糊闽。應該使用initWithSuiteName:方法來初始化一個NSUserDefaults對象,其中的SuiteName就是創(chuàng)建的Group的名字爹梁,然后利用這個對象來實現(xiàn)右犹,跨應用的數(shù)據(jù)讀寫,代碼如下:
//初始化一個供App Groups使用的NSUserDefaults對象
NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.cn.vimfung.ShareExtensionDemo"];

//寫入數(shù)據(jù)
[userDefaults setValue:@"value" forKey:@"key"];

//讀取數(shù)據(jù)
NSLog(@"%@", [userDefaults valueForKey:@"key"]);
  • NSFileManager:通過調(diào)用 containerURLForSecurityApplicationGroupIdentifier:方法可以獲得AppGroup的共享目錄姚垃,然后在此目錄的基礎上實現(xiàn)任意的文件操作念链。代碼如下:
//獲取分組的共享目錄
NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.cn.vimfung.ShareExtensionDemo"];
NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"demo.txt"];

//寫入文件
[@"abc" writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];

//讀取文件
NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
NSLog(@"str = %@", str);
  • CoreData:其實CoreData是基于NSFileManager取得共享目錄后來實現(xiàn)數(shù)據(jù)共享的。即在初始化CoreData時积糯,先使用NSFileManager取得共享目錄掂墓,然后再指定共享目錄為存儲數(shù)據(jù)文件的目錄(如存儲的sqlite文件)。代碼如下:
//獲取分組的共享項目
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.cn.vimfung.ShareExtensionDemo"];
NSURL *storeURL = [containerURL URLByAppendingPathComponent:@"DataModel.sqlite"];

//初始化持久化存儲調(diào)度器
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];

NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

[coordinator addPersistentStoreWithType:NSSQLiteStoreType
                          configuration:nil
                                    URL:storeURL
                                options:nil
                                  error:nil];

//創(chuàng)建受控對象上下文
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

[context performBlockAndWait:^{
    [context setPersistentStoreCoordinator:coordinator];
}];

我使用的是NSUserDefault然后在app中- (void)applicationDidBecomeActive:(UIApplication *)application中進行數(shù)據(jù)的讀取看成。

參考文章:
App Extension
iOS擴展開發(fā)攻略(一) - Share Extension

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末君编,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子川慌,更是在濱河造成了極大的恐慌吃嘿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梦重,死亡現(xiàn)場離奇詭異兑燥,居然都是意外死亡,警方通過查閱死者的電腦和手機忍饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門贪嫂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艾蓝,你說我怎么就攤上這事力崇《诽粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵亮靴,是天一觀的道長馍盟。 經(jīng)常有香客問我,道長茧吊,這世上最難降的妖魔是什么贞岭? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮搓侄,結果婚禮上瞄桨,老公的妹妹穿的比我還像新娘。我一直安慰自己讶踪,他們只是感情好芯侥,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乳讥,像睡著了一般柱查。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上云石,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天唉工,我揣著相機與錄音,去河邊找鬼汹忠。 笑死淋硝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的错维。 我是一名探鬼主播奖地,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赋焕!你這毒婦竟也來了参歹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤隆判,失蹤者是張志新(化名)和其女友劉穎犬庇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侨嘀,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡臭挽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咬腕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欢峰。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纽帖,到底是詐尸還是另有隱情宠漩,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布懊直,位于F島的核電站扒吁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏室囊。R本人自食惡果不足惜雕崩,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望融撞。 院中可真熱鬧盼铁,春花似錦、人聲如沸尝偎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冬念。三九已至,卻和暖如春牧挣,著一層夾襖步出監(jiān)牢的瞬間急前,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工瀑构, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裆针,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓寺晌,卻偏偏與公主長得像世吨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呻征,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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