AppClips介紹及使用流程

一.簡(jiǎn)介

在 2020 年 6 月 23 日的 WWDC 大會(huì)中逸邦,蘋果預(yù)告了 App Clips 。

App Clip(官方翻譯:輕 App爬早;民間翻譯:「蘋果」小程序)捍掺,是主 app 輕量級(jí)的版本,旨在在特定場(chǎng)景為用戶提供快速便捷的體驗(yàn)靶擦。

如果你在上班路上經(jīng)過一家咖啡店想購買一杯咖啡腮考,但發(fā)現(xiàn)排隊(duì)下單付款的人很多,此刻你只需要使用 iPhone 自帶的掃碼工具掃描咖啡商店的 App Clip 二維碼或 NFC 標(biāo)簽玄捕,就可以購買一杯咖啡踩蔚,無需下載安裝咖啡商店的 app。
App Clip的啟動(dòng)需要由一個(gè)調(diào)用方調(diào)起枚粘,在iOS開發(fā)中寂纪,更專業(yè)點(diǎn)的術(shù)語叫invocation,invocation可以是多種形態(tài)的赌结,例如通過點(diǎn)擊基于位置信息的推薦Banner,點(diǎn)擊Sari的推薦或者通過掃描二維碼或NFC等孝冒。App Clip被invocation調(diào)起后柬姚,用戶可以通過它完成一件專注的任務(wù),當(dāng)用戶不再需要使用它時(shí)庄涡,它會(huì)自動(dòng)的被iPhone移除量承,這個(gè)過程對(duì)用戶來說是無感知的,因此App Clip也不會(huì)占用用戶的桌面空間穴店。

8350971-e9df5d600ec7760e.png

前面說過撕捍,App Clip的啟動(dòng)需要由invocation來觸發(fā),invocation包括如下5中場(chǎng)景:

通過NFC掃描來喚起
通過點(diǎn)擊Sari提供的基于地理位置的推薦
在地圖App上點(diǎn)擊指定的鏈接
點(diǎn)擊網(wǎng)頁上的智能推薦橫幅
通過Messages App分享的鏈接

20201203160053.jpg
20201203160107.jpg
20201203160123.jpg
20201203160315.jpg
20201203160330.jpg

如上圖泣洞,當(dāng)某個(gè)invocation觸發(fā)了App Clip時(shí)忧风,系統(tǒng)首先會(huì)檢查invocation關(guān)聯(lián)的URL,通過URL獲取用來展示預(yù)覽信息的數(shù)據(jù)球凰,預(yù)覽信息包括一個(gè)背景圖案狮腿,描述標(biāo)題與啟動(dòng)按鈕腿宰,用戶點(diǎn)擊啟動(dòng)按鈕后會(huì)打開App Clip。我們可以在App Clip啟動(dòng)時(shí)拿到傳遞進(jìn)來的URL缘厢,通過URL的參數(shù)進(jìn)行不同的邏輯處理吃度。

了解了App Clips的啟動(dòng)過程,我們知道實(shí)際上在啟動(dòng)App Clip之前贴硫,系統(tǒng)會(huì)先彈出一個(gè)預(yù)覽卡片椿每,這個(gè)卡片上的信息可以由開發(fā)者在iTunes Connect上自行定義。

在著手開發(fā)App Clips之前英遭,還有一些事情我們需要考慮间护。

A. 提供暢快的用戶體驗(yàn)

App Clips不會(huì)像通常的App那樣展示一個(gè)圖標(biāo)在主屏幕上,用戶不需要對(duì)App Clips進(jìn)行管理贪绘,不用下載也無需刪除兑牡,當(dāng)指定的App Clip一段時(shí)間不活躍后,系統(tǒng)會(huì)自動(dòng)對(duì)它們進(jìn)行清除税灌。因此均函,官方建議,App Clips提供的功能應(yīng)該是線性的菱涤,讓用戶一次性的完成任務(wù)苞也。

B. App Clips需要足夠小巧

App Clips應(yīng)該足夠的小巧,官方限定不可超過10M大小粘秆,只有足夠小如迟,在用戶需要使用的時(shí)候才能以更短的時(shí)間加載與展示。

C. 檢查可用的框架

在開發(fā)之前攻走,首先要確認(rèn)下App Clips可用的框架殷勘,大部分主App可用的框架在App Clips中都可以使用,但并不是所有昔搂,Assets Library, CallKit, CareKit, CloudKit, Contacts, Contacts UI, Core Motion, File Provider, File Provider UI, HealthKit, HomeKit, Media, Player, Messages, Message UI, PhotoKit, ResearchKit, SensorKit, Speech中是不被支持的,若使用了在編譯時(shí)不會(huì)報(bào)錯(cuò)玲销,而是在運(yùn)行時(shí)報(bào)錯(cuò)或者返回錯(cuò)誤的結(jié)果。

D. 保護(hù)用戶隱私

由于App Clips會(huì)以推薦或其他廣告的方式觸發(fā)摘符,因此保護(hù)用戶的隱私非常重要贤斜。在App Clips中,隱私保護(hù)會(huì)一直被啟用逛裤,例如對(duì)后臺(tái)定位權(quán)限的申請(qǐng)瘩绒,當(dāng)用戶同意后,次日的凌晨4點(diǎn)带族,這個(gè)權(quán)限會(huì)被重新關(guān)閉锁荔,如果再次啟用了App Clips,需要重新向用戶申請(qǐng)蝙砌。當(dāng)然堕战,還有一些權(quán)限在App Clips中是禁止獲取的坤溃,其中有:運(yùn)動(dòng)和健身數(shù)據(jù),音樂和多媒體文件嘱丢,通訊錄/信息/照片等文件薪介。除了其宿主App意外,App Clips也不可以和其他應(yīng)用共享數(shù)據(jù)越驻。

App Clips 的消息推送

微信小程序不能通過 Push 的方式觸達(dá)用戶曾讓開發(fā)者憂心忡忡汁政。而手機(jī)廠商推出的系統(tǒng)級(jí)應(yīng)用在這方便可以給開發(fā)者更多的底氣,不管是蘋果的 App Clips 還是國產(chǎn)手機(jī)生態(tài)的快應(yīng)用缀旁,服務(wù)的消息推送能力都是吸引開發(fā)者的重要能力记劈。

消息推送在 App Clip 的應(yīng)用分兩種場(chǎng)景:短時(shí)間內(nèi)推送和長(zhǎng)時(shí)間內(nèi)的推送。(官方文檔)

短時(shí)間內(nèi)推送

用戶在啟動(dòng) App Clip 后并巍,8 小時(shí)內(nèi)可以收到消息推送目木。比如用戶在 App Clip 購買了一杯咖啡后就退出了 App Clip,當(dāng)咖啡準(zhǔn)備好了懊渡,用戶就會(huì)收到一個(gè)「咖啡已準(zhǔn)備好」的推送刽射。這方式只需要在 Info.plist 屬性文件中添加 NSAppClip Key,并將 NSAppClipRequestEphemeralUserNotification 設(shè)置為 true剃执,就能默認(rèn)獲取消息推送的權(quán)限誓禁。

長(zhǎng)時(shí)間內(nèi)推送

用戶在 App Clip 完成一個(gè)任務(wù)后,可能過了幾天才會(huì)收到推送肾档。比如用戶在 App Clip 租了輛車摹恰,租期為 3 天,到期后會(huì)用戶收到「該還車了」的推送怒见。這種方式和普通 app 的消息推送一樣俗慈,都需要獲取用戶的推送授權(quán)。

二.實(shí)戰(zhàn)開發(fā)

前面講了很多開發(fā)App Clips的介紹遣耍,現(xiàn)在就讓我們上手創(chuàng)建一個(gè)App Clip體驗(yàn)一下姜盈。創(chuàng)建App Clip非常簡(jiǎn)單,首先其需要一個(gè)宿主App配阵,如果為已經(jīng)存在的一個(gè)完全應(yīng)用程序添加App Clip,就更加容易示血,我們只需要新建一個(gè)Target棋傍,選擇App Clip即可,通過File->New->target,選擇AppClip


截屏2020-12-03 上午9.39.57.png

难审,Xcode接下來會(huì)自動(dòng)給我們創(chuàng)建號(hào)一系列必須的文件瘫拣,并做好配置,這個(gè)時(shí)候我們可以直接選擇Clip的target進(jìn)行運(yùn)行告喊,只不過是一片空白麸拄。

前面說過派昧,App Clip的運(yùn)行需要invocation進(jìn)行調(diào)用,對(duì)于invocation的調(diào)用拢切,如果用戶安裝了完全的主App蒂萎,則會(huì)喚起主App來處理用戶任務(wù),如果用戶沒有安裝主App淮椰,則自動(dòng)調(diào)起App Clip五慈。無論通過哪種invocation來調(diào)起App Clip,我們都需要在App Clip的target中配置指定的域權(quán)限主穗。在target工程的設(shè)置頁面泻拦,找到Associated Domains選項(xiàng),在其中添加要調(diào)起App Clip的域名忽媒,需要找到這樣的格式:appclips:xxx.com争拐。這種配置方式與Deep link的邏輯基本一致。

20201203095555.jpg

服務(wù)器配置晦雨,在系統(tǒng)彈出 app clip 或允許 app clip 調(diào)用之前架曹,系統(tǒng)會(huì)驗(yàn)證 app clip 的配置和調(diào)用的URL。如果無法執(zhí)行驗(yàn)證金赦,則不會(huì)顯示app clip音瓷,也不會(huì)啟動(dòng)。配置方法跟UniversalLink一樣夹抗,在 server 的 App Site Association (通常是在網(wǎng)站 .well-known 下的 apple-app-site-association 文件) 中添加這個(gè)域名對(duì)應(yīng)的 appclips 條目:新增一個(gè)鍵值對(duì)绳慎,key為appclips,value為一個(gè)對(duì)象 "apps": ["bundle id.Clip"]

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "37PVRFWV9E.com.aihuishou.OPTapp.P",
                "paths": [ "*"]
            },
            {
                "appID": "889ZY53ZAF.com.aihuishou.OPTapp.J",
                "paths": [ "*" ]
            }
        ]
    },
    "appclips": {
        "apps": [ "37PVRFWV9E.com.aihuishou.OPTapp.P.Clip" ]
    }
}

一個(gè)能夠啟動(dòng)appClip的AppBanner形式如下:

<meta 
  name="apple-itunes-app" 
  content="app-id=myAppStoreID, app-clip-bundle-id=appClipBundleID
>

App clip card 顯示時(shí)漠烧,你的 app clip 就已經(jīng)開始下載了杏愤。App clip 的體積必須在 10MB 以內(nèi)。這樣已脓,大概率在用戶選擇打開你的 app clip 之前珊楼,就能下載完成,以提供良好體驗(yàn)度液。

用戶點(diǎn)擊 banner 或者 iMessage 鏈接厕宗,且繼續(xù)點(diǎn)擊打開按鈕后,app clip 的 user activity 關(guān)聯(lián)的生命周期函數(shù)將被調(diào)用堕担,swift中是

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        print(userActivity.webpageURL)
    }

上面webpageURL就是獲取到調(diào)用的鏈接已慢。也可以通過這個(gè)來區(qū)分不同的應(yīng)用場(chǎng)景。

在開發(fā)時(shí)霹购,可以通過設(shè)置 _XCAppClipURL 這個(gè)環(huán)境變量佑惠,并運(yùn)行 app clip target 來“模擬”通過特定 URL 點(diǎn)擊后的情況。當(dāng) Associated Domain 設(shè)置正確后,在 Xcode 中運(yùn)行 app clip膜楷,就可以拿到包含這個(gè)環(huán)境值的 NSUserActivity旭咽。這樣在 Beta 期間的本地開發(fā)就不需要依賴外部 server 環(huán)境了。
首先配置一下_XCAppClipURL:


20201203101704.jpg

特別說明一下赌厅,這個(gè)地址一般為了測(cè)試穷绵,是需要與你domain中設(shè)置的是一樣的,但是我們真正使用的時(shí)候不可能只是一個(gè)固定的地址察蹲,后面是可以跟參數(shù)请垛,因?yàn)檎{(diào)起鏈接的時(shí)候只會(huì)拿這個(gè)地址前綴部分,比如url是www.paijitang.com?orderNo=123456都是可以識(shí)別的洽议。
如果在本地測(cè)試的話還需要配置一下 Launch Experience宗收,即給 App Clip 配置一個(gè) URL 和 App Clip Card 信息。在開發(fā)階段可以直接配置 Local Experience 或者在 testflight 上進(jìn)行配置亚兄。App Clip 準(zhǔn)備發(fā)布時(shí)混稽,需要在 app store connect 上進(jìn)行配置。

1.首先將MyClip通過Xcode運(yùn)行起來
2.打開手機(jī)【設(shè)置】-【開發(fā)者】-【Local Experience】-【Register Local Experience】
3.填入 URL PREFIX审胚,打開任何以 URL PREFIX 為前綴的 URL匈勋,都會(huì)被當(dāng) 做打開 App Clip 來處理。
填入 Clip Bundle Id膳叨。
填入 Title洽洁、Subtitle,選擇一張圖片菲嘴,這些信息將會(huì)顯示在 App Clip Card 上饿自。


WechatIMG1.jpeg

特別說明,上面action有三個(gè)龄坪,Open,View,Play的區(qū)別就是打開卡片的時(shí)候昭雌,下面的按鈕分別是打開,查看健田,打開游戲烛卧,可以自己體驗(yàn)一下。
4.用步驟3中的URL PREFIX生成一個(gè)二維碼妓局。
5.使用控制面板的二維碼掃描器掃描总放,將會(huì)彈出APP Clip Card.不過前提是你的Clip已經(jīng)配置好真機(jī)運(yùn)行的證書文件,關(guān)于配置看下一步好爬。

WechatIMG2.jpg

配置證書

你可以切換到MyClip的target下查看局雄,它的bundle id其實(shí)就是它的宿主target的id后面加了一個(gè).Clip。
1.首先創(chuàng)建一個(gè)Identifiers:


截屏2020-12-03 上午10.38.26.png
截屏2020-12-03 上午10.38.36.png
截屏2020-12-03 上午10.38.46.png

接下來就是正常的配置Identifies的流程抵拘。但是比較重要的一點(diǎn)是必須要把Associated Domains這個(gè)給勾選上,不然真機(jī)運(yùn)行會(huì)報(bào)錯(cuò)型豁。


截屏2020-12-03 上午10.43.03.jpg

上面配置完成之后僵蛛,下面就需要?jiǎng)?chuàng)建對(duì)應(yīng)的描述文件即Profiles文件尚蝌,分別創(chuàng)建開發(fā)可發(fā)布證書。此過程不再詳細(xì)描述充尉。


20201203104724.jpg

之后回到項(xiàng)目里配置上相應(yīng)證書文件就行了飘言。

真機(jī)體驗(yàn)

1.運(yùn)行MyClip
2.掃描上面的二維碼
3.彈出卡片,點(diǎn)擊打開進(jìn)入驼侠。

WechatIMG3.jpg

這個(gè)時(shí)候可以查看我們上面那個(gè)func scene(_ scene: UIScene, continue userActivity: NSUserActivity)回調(diào)方法已經(jīng)被調(diào)用了姿鸿,這個(gè)就是為了平時(shí)測(cè)試使用。

發(fā)布App Clip

1.首先為MyClip配置一個(gè)icon,不然會(huì)上傳失敗倒源。
2.以下幾個(gè)位置需要與發(fā)布的target保持一致苛预。


20201203111445.jpg

3.這個(gè)Display Name需要選一個(gè)跟項(xiàng)目名不一致的名字,比如你的項(xiàng)目名是中華龍笋熬,你用中華龍輕應(yīng)用這個(gè)是不行的热某,提交appStore的時(shí)候會(huì)告訴你displayName or bundle Name已存在,所以需要起一個(gè)不一樣的名字胳螟。多試幾次就可以了昔馋。
4.當(dāng)你提交版本成功之后,那就需要在你的App store connnct中配置一下你的輕應(yīng)用糖耸,前提是你必須有一個(gè)包含輕應(yīng)用的包提交通過秘遏。然后你就可以在下圖中配置:


截屏2020-12-03 上午11.21.39.png

,你需要一張1800*1200的圖片嘉竟,然后配置一下副標(biāo)題和選擇一下操作邦危,這里的操作跟上面提到的Action是一個(gè)道理。
5.配置高級(jí)體驗(yàn)周拐。上面步驟4的配置完成之后铡俐,只能讓你在Safi瀏覽器和信息中體驗(yàn)輕App.高級(jí)體驗(yàn)則可以通過輕 App 碼(內(nèi)嵌網(wǎng)址和 NFC 標(biāo)簽)、二維碼以及“地圖”中的地點(diǎn)卡片調(diào)用妥粟。相關(guān)配置可以通過點(diǎn)擊編輯高級(jí)體驗(yàn)就可以設(shè)置审丘,比較簡(jiǎn)單。
6.如果你的app使用了TestFligh勾给,這個(gè)時(shí)候你就可以在手機(jī)testFligh App中查看剛才提交的版本滩报,會(huì)有一個(gè)輕App按鈕,點(diǎn)擊進(jìn)去就是你的輕App內(nèi)容播急。這里就可以測(cè)試你的功能了脓钾。

WechatIMG4.jpeg

上面基本就是一個(gè)輕應(yīng)用從測(cè)試到發(fā)布的基本流程。

代碼部分

關(guān)于代碼和資源的組織桩警。很大機(jī)率 main app 和 app clip 是需要共用代碼的可训,可以無腦地選擇將源碼放到 main app 和 app clip 兩個(gè) target 中,也可以選擇打成 framework 或者 local Swift Package。不管如何握截,這部分共用的 binary 都會(huì)同時(shí)存在于 main app bundle 和 app clip bundle 中飞崖。圖片等素材資源也類似。簡(jiǎn)單說谨胞,app clip 其實(shí)就是一個(gè)完整但尺寸有所限制固歪、并且和某個(gè)域名綁定,因此不需要用戶認(rèn)證 Apple ID 就可以下載的 app胯努。

部分 app clip 是“用完就走”的牢裳,但是也有部分 app clip 是為了導(dǎo)流到 main app∫杜妫可以通過 SKOverlay 或 SKStoreProductViewController 來顯示一個(gè)指向 main app 的推廣窗:

方式一:?jiǎn)?dòng)的時(shí)候就顯示
20201203162931.jpg

這個(gè)時(shí)候點(diǎn)擊打開按鈕會(huì)顯示如下圖所示


WechatIMG6.jpeg
方式二:代碼里點(diǎn)擊顯示
20201203163922.jpg

123456放你的應(yīng)用id,這個(gè)id可以在App Store Connect里面打開你的應(yīng)用蒲讯,然后看上面的網(wǎng)址中間有一串?dāng)?shù)字就是的,效果如下:

WechatIMG7.jpeg

另外恬汁,對(duì)于公用的代碼部分伶椿,如果要區(qū)分主App和輕App,可以通過添加宏的形式解決氓侧,這個(gè)就不在此贅述脊另。
好了,到這里基本一個(gè)輕App的創(chuàng)建到開發(fā)到發(fā)布的整個(gè)流程就很清晰了约巷,可以實(shí)戰(zhàn)應(yīng)用了偎痛。

參考資料:
1.https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA%3D%3D&idx=1&mid=2247484662&scene=21&sn=601cb10f17a9d4bb94fa4b911ed3586a#wechat_redirect
2.https://onevcat.com/2020/06/first-look-app-clips/
3.https://www.ifanr.com/minapp/1368393
4.https://developer.apple.com/documentation/app_clips/creating_an_app_clip_with_xcode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市独郎,隨后出現(xiàn)的幾起案子踩麦,更是在濱河造成了極大的恐慌,老刑警劉巖氓癌,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓谦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贪婉,警方通過查閱死者的電腦和手機(jī)反粥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疲迂,“玉大人才顿,你說我怎么就攤上這事∮容铮” “怎么了郑气?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腰池。 經(jīng)常有香客問我尾组,道長(zhǎng)忙芒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任讳侨,我火速辦了婚禮匕争,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爷耀。我一直安慰自己,他們只是感情好拍皮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布歹叮。 她就那樣靜靜地躺著,像睡著了一般铆帽。 火紅的嫁衣襯著肌膚如雪咆耿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天爹橱,我揣著相機(jī)與錄音萨螺,去河邊找鬼。 笑死愧驱,一個(gè)胖子當(dāng)著我的面吹牛慰技,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播组砚,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吻商,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了糟红?” 一聲冷哼從身側(cè)響起艾帐,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盆偿,沒想到半個(gè)月后柒爸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡事扭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捎稚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片句旱。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳藻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谈撒,到底是詐尸還是另有隱情腥泥,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布啃匿,位于F島的核電站蛔外,受9級(jí)特大地震影響蛆楞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夹厌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一豹爹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矛纹,春花似錦臂聋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至采够,卻和暖如春肄方,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬癌。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工权她, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逝薪。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓隅要,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親董济。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拾徙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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