iMessage extension 使用總結(jié)

iMessage extension 是ios10才能支持的新特性,發(fā)布于2016年2月的WWDC蘋果發(fā)布會官方資料,有兩種方式創(chuàng)建,第一可以單獨寫一個iMessage application 發(fā)布到iMessage App Store(在iMessage app看到的那個App Store),但是這樣只能在iMessage App Store上看到,在main App Store(平時使用的app store) 上看不到,第二種可以在原有的項目中加入iMessage extension,這樣在兩處的app store 都可以看到,無論從哪個app store安裝,安裝其中一個,另一個就會附帶被安裝,因此在app中加入iMessage extension對應(yīng)用的推廣有一定的幫助,單獨發(fā)布imessage extension并沒有優(yōu)勢(除非是做表情)。下面先寫一個demo,然后說一下遇到的坑。

我用的是xcode8.2.1,左上角file-->new-->target-->iMessage extension,創(chuàng)建完成后,在MessagesViewController中自定義一些界面,具體怎么做很簡單,貼一篇別人寫的文章iOS10中Messages獨立應(yīng)用與擴展插件詳析,講的很詳細了,現(xiàn)在我主要講在主app中加入imessage extension和從imessage 跳到主app注意事項。

1.使用URLSchemes的方式跳轉(zhuǎn)到主app。在主app中定義一個URLSchemes:選中主app的TARGET-->info-->URL Type,添加一個URL Type,identify隨便保證唯一就好,URL Schemes也保證唯一,比如extensionURLSchemes。

2.在MessagesViewController類中,重寫幾個方法:

? -(void)didSelectMessage:(MSMessage *)message conversation:(MSConversation *)conversation{

[self.extensionContext openURL:[NSURL URLWithString:[NSString stringWithFormat:@"extensionURLSchemes://"]] completionHandler:nil];

}

其中extensionURLSchemes后的冒號和斜杠一定要有,當(dāng)點擊imesage時就能跳到主app了,但是第二次點擊同一條imessage時就跳不了,原因是第一次跳過去后,imessage app就已經(jīng)退出了(很容易就退出了,界面消失就退出),因此第二次點擊imessage時不會調(diào)用-(void)didSelectMessage:(MSMessage *)message conversation:(MSConversation *)conversation方法,而是調(diào)用-(void)willBecomeActiveWithConversation:(MSConversation *)conversation方法,因此也要在這個方法中做跳轉(zhuǎn)邏輯

(void)willBecomeActiveWithConversation:(MSConversation *)conversation{

if (conversation.selectedMessage) {

[self.extensionContext openURL:[NSURL URLWithString:[NSString stringWithFormat:@"extensionURLSchemes://"]] completionHandler:nil];

}

}

3.IMessage extension 和主app通信一般使用NSUserDefaults的方式:capabilityes-->App Group,添加一個group,名字唯一即可,并且鉤上,在IMessage extension中也加入到同一個group中,現(xiàn)在兩個target在同一個group中可以通信了,比如group的名字是extensionGroup,比如可以這樣存取數(shù)據(jù)

NSUserDefaults *group = [[NSUserDefaults alloc]initWithSuiteName:@"extensionGroup"];

[group setObject:@"我的extension" forKey:@"groupKey"];//存值

[group synchronize];//一定要記得

NSString *value = [group objectForKey:@"groupKey"];//取值

4.IMessage extension 可以和主app共享代碼:選擇.m文件,在右邊欄target membership中勾選上,所有關(guān)聯(lián)到的文件都必須選上;還可以通過 frameWork共享代碼:file-->new-->target-->cocoa touch framework ,然后選擇新建的framework,在Build Phase-->compile sources中加入需要共享的代碼,然后在別的target的Build Phase-->compile sources中刪掉加入framework的.m文件,在Build Phase-->Link Binary With Binaries 中加入framework,就可以共享代碼了,但是cocoa touch framework是iOS8才有的,如果主app支持版本低于iOS8,最好不要用cocoa touch framework做代共享,還有pod進來的第三方框架,直接

target '我是extensiontarget' do

pod? 'SDWebImageWebP',? '8.0.12'

.........

end

這樣就可以了,上面'我是extensiontarget'不能是cocoa touch framework

大概就是這么多,有什么問題可以加我QQ交流:1529075810

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容