一步一步教你做ios推送 pem證書(shū)制作 php推送

一步一步教你做ios推送

分類(lèi):ios2013-03-03 21:483385人閱讀評(píng)論(8)收藏舉報(bào)

ios推送客戶端服務(wù)器

最近在研究ios的推送問(wèn)題迫靖,遇到了一些問(wèn)題,最終整理了一下。放在這里和大家分享

APNS的推送機(jī)制

首先我們看一下蘋(píng)果官方給出的對(duì)ios推送機(jī)制的解釋杯聚。如下圖

Provider就是我們自己程序的后臺(tái)服務(wù)器,APNS是Apple Push Notification Service的縮寫(xiě),也就是蘋(píng)果的推送服務(wù)器衬横。

上圖可以分為三個(gè)階段:

第一階段:應(yīng)用程序的服務(wù)器端把要發(fā)送的消息、目的iPhone的標(biāo)識(shí)打包终蒂,發(fā)給APNS蜂林。

第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中,查找有相應(yīng)標(biāo)識(shí)的iPhone拇泣,并把消息發(fā)送到iPhone噪叙。

第三階段:iPhone把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知霉翔。

APNS推送通知的詳細(xì)工作流程

下面這張圖是說(shuō)明APNS推送通知的詳細(xì)工作流程:

根據(jù)圖片我們可以概括一下:

1睁蕾、應(yīng)用程序注冊(cè)APNS消息推送。

2债朵、iOS從APNS Server獲取devicetoken惫霸,應(yīng)用程序接收device token。

3葱弟、應(yīng)用程序?qū)evice token發(fā)送給程序的PUSH服務(wù)端程序壹店。

4、服務(wù)端程序向APNS服務(wù)發(fā)送消息芝加。

5硅卢、APNS服務(wù)將消息發(fā)送給iPhone應(yīng)用程序。

準(zhǔn)備工作

首先要有一臺(tái)蘋(píng)果的設(shè)備藏杖,模擬器是不支持推送的将塑,所以你需要一臺(tái)iphone,ipod touch或者ipad蝌麸。

我們的客戶端與蘋(píng)果服務(wù)器之間和我們自己的服務(wù)器與蘋(píng)果服務(wù)器之間都需要證書(shū)來(lái)進(jìn)行鏈接点寥。下面我們來(lái)開(kāi)始進(jìn)入證書(shū)的制作過(guò)程。

一 CSR文件

首先我們要有生成一個(gè)Certificate Signing Request(也就是CSR)的請(qǐng)求文件来吩。

在應(yīng)用程序里的使用工具中找到鑰匙串訪問(wèn)敢辩。

選擇從證書(shū)頒發(fā)機(jī)構(gòu)請(qǐng)求證書(shū)

填上你的郵箱和常用名,常用名要記一下弟疆,一會(huì)會(huì)用到戚长。然后選擇保存到磁盤(pán),繼續(xù)

保存位置在桌面怠苔,點(diǎn)擊存儲(chǔ)同廉。

到這里點(diǎn)擊完成后我們會(huì)在桌面上看到一個(gè)CertificateSigningRequest.certSigningRequest的請(qǐng)求文件,也就是我們說(shuō)的CSR文件。在我們生成CSR文件的同時(shí)迫肖,會(huì)在鑰匙串訪問(wèn)中生成一對(duì)秘鑰锅劝,名稱(chēng)為剛才我們填寫(xiě)的常用名

二 下載開(kāi)發(fā)證書(shū)和發(fā)布證書(shū)

(這里我為了大家能看清楚,已經(jīng)把之前的證書(shū)事先吊銷(xiāo)了)

https://developer.apple.com/devcenter/ios/index.action登錄后,在右側(cè)的ios Developer Program里點(diǎn)擊iOS Provisioning Portal蟆湖。

進(jìn)入下一級(jí)頁(yè)面后在左側(cè)選擇Certificates

點(diǎn)擊紅色的部分生成一個(gè)開(kāi)發(fā)證書(shū)

點(diǎn)擊選擇文件故爵,選擇剛才我們生成到桌面的CSR請(qǐng)求文件。

注意帐姻,如果你在后面測(cè)試的時(shí)候出現(xiàn)了問(wèn)題稠集,請(qǐng)檢查一下這里,這里的CSR請(qǐng)求文件必須是我們剛才生成的那個(gè)

選擇完成后點(diǎn)擊Submit提交

提交完成后返回頁(yè)面饥瓷。頁(yè)面會(huì)是這樣的剥纷,然后我們刷新一下頁(yè)面

刷新后會(huì)出現(xiàn)一個(gè)下載按鈕,我們點(diǎn)擊下載∧孛現(xiàn)在我們的開(kāi)發(fā)證書(shū)已經(jīng)配置并下載好了晦鞋,發(fā)布證書(shū)的配置過(guò)程和開(kāi)發(fā)證書(shū)是一致的,不再贅述棺克。下載完后雙擊悠垛,會(huì)跳到鑰匙串訪問(wèn)里。這就是我們之后要進(jìn)行測(cè)的證書(shū)

三 配置AppID娜谊,配置并下載SSL證書(shū)

點(diǎn)擊左側(cè)的App IDs确买,找到我們要做推送功能的程序的id(如果沒(méi)有的話要先New一個(gè)。注意纱皆,這里的App ID必須不能是通配的湾趾,通配的不可以做推送)。點(diǎn)擊Configure

進(jìn)入后默認(rèn)推送功能是關(guān)閉的派草,我們需要把推送功能打開(kāi)

選中打開(kāi)后搀缠,點(diǎn)擊右邊灰色的Configure按鈕

這里的文件同樣的,還是選擇我們生成在桌面上的CSR請(qǐng)求文件

然后點(diǎn)擊繼續(xù)

出現(xiàn)了我們需要的SSL證書(shū)近迁,我們點(diǎn)擊下載后點(diǎn)擊Done完成艺普。

Status狀態(tài)變成了綠色可用了。這里右邊的下載和上一步的下載是一樣的鉴竭,如果在上一步中下載了證書(shū)歧譬,便無(wú)需再次下載。此時(shí)我們有了一個(gè)名字叫aps_development.cer的SSL證書(shū)拓瞪,同樣缴罗,我們把他放在桌面。雙擊后會(huì)跳到鑰匙串訪問(wèn)祭埂,出現(xiàn)我們的SSL推送證書(shū)

同樣的,發(fā)布的SSL證書(shū)的步驟也是一樣的。

四 下載Provisioning證書(shū)

在左側(cè)選擇Provisioning

配置好后點(diǎn)擊提交(注意App ID要與我們剛的程序?qū)?yīng))

之后變回出現(xiàn)下載按鈕蛆橡,我們點(diǎn)擊下載舌界。下載后雙擊,并將我們的設(shè)備上的描述文件更新一下(最好把之前的全部刪除泰演,然后再安裝呻拌,防止出錯(cuò))。

五 從鑰匙串訪問(wèn)中導(dǎo)出秘鑰

打開(kāi)鑰匙串訪問(wèn)睦焕,找到我們的專(zhuān)用秘鑰(專(zhuān)用秘鑰的名稱(chēng)就是我們?cè)谧铋_(kāi)始生成CSR請(qǐng)求的時(shí)候填寫(xiě)的常用名)

右鍵選擇導(dǎo)出

導(dǎo)出的文件名我們叫做Push

在這里需要輸入一個(gè)密碼來(lái)對(duì)文件進(jìn)行加密藐握。這里我們選擇abcabc,當(dāng)然你也可以自己選擇是什么垃喊,但是這個(gè)密碼必須要銘記猾普,切記!

然后輸入你電腦的密碼本谜,點(diǎn)擊允許初家。

這樣我們就在桌面上生成了一個(gè)Push.p12文件。

到此為止乌助,我們?cè)谧烂嫔弦还采闪巳齻€(gè)文件溜在。一個(gè)是CSR請(qǐng)求文件,一個(gè)是aps_development .cer的SSL證書(shū)文件他托,還有一個(gè)剛才生成的Push.p12秘鑰文件掖肋。

現(xiàn)在我們的準(zhǔn)備工作已經(jīng)做完了。要開(kāi)始對(duì)生成的文件進(jìn)行處理了赏参。原因上面已經(jīng)解釋過(guò)志笼,因?yàn)槲覀兊姆?wù)鏈接蘋(píng)果服務(wù)器也是需要證書(shū)的,但是我們直接生成的證書(shū)windows系統(tǒng)(我們一般的服務(wù)器都是win系統(tǒng)的)是不識(shí)別的登刺,所以我們需要生成一個(gè)后綴為pem的帶證書(shū)帶秘鑰的文件籽腕。

六 處理證書(shū)

下面我們打開(kāi)終端(位置:應(yīng)用程序à實(shí)用工具à終端)。

cd到桌面纸俭,我們那三個(gè)文件所在的位置

1皇耗、把.cer的SSL證書(shū)轉(zhuǎn)換為.pem文件,執(zhí)行命令:

openssl x509 -inaps_development.cer-inform der -out PushChatCert.pem

在桌面上會(huì)生成一個(gè)PushChatCert.pem文件

2揍很、把私鑰Push.p12文件轉(zhuǎn)化為.pem文件:

openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12

這里需要我們輸入密碼郎楼,這個(gè)密碼也就是我們導(dǎo)出p12文件時(shí)的密碼,也就是我們上面設(shè)置的abcabc。然后,需要我們對(duì)生成的pem文件設(shè)置一個(gè)密語(yǔ)陶夜,這里我們推薦還是用上面這個(gè)abcabc,防止混亂(當(dāng)然你也可以設(shè)置成別的更有意義的密語(yǔ))定页,這里的密語(yǔ)是要告訴我們服務(wù)器的。這樣絮爷,桌面上又會(huì)生成一個(gè)PushChatKey.pem文件

3翼雀、對(duì)生成的這兩個(gè)pem文件再生成一個(gè)pem文件而姐,來(lái)把證書(shū)和私鑰整合到一個(gè)文件里:

cat PushChatCert.pem PushChatKey.pem > ck.pem

生成ck.pem文件

這樣膘融,我們的文件就制作完了芙粱。下面進(jìn)入測(cè)試階段

為了測(cè)試證書(shū)是否工作,執(zhí)行下面的命令

telnet gateway.sandbox.push.apple.com 2195

它將嘗試發(fā)送一個(gè)規(guī)則的氧映,不加密的連接到APNS服務(wù)春畔。如果你看到上面的反饋,那說(shuō)明你的MAC能夠到達(dá)APNS岛都。按下Ctrl+C關(guān)閉連接律姨。如果得到一個(gè)錯(cuò)誤信息,那么你需要確保你的防火墻允許2195端口臼疫。一般這里都不會(huì)出現(xiàn)什么問(wèn)題择份。

下面我們要使用我們生成的SSL證書(shū)和私鑰來(lái)設(shè)置一個(gè)安全的鏈接去鏈接蘋(píng)果服務(wù)器:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

執(zhí)行完這一句命令后需要我們輸入密語(yǔ)

Enter pass phrase for PushChatKey.pem:

我們輸入abcabc按回車(chē)

你會(huì)看到一個(gè)完整的輸出,讓你明白OpenSSL在后臺(tái)做什么多矮。如果鏈接是成功的缓淹,你可以隨便輸入一個(gè)字符,按下回車(chē)塔逃,服務(wù)器就會(huì)斷開(kāi)鏈接讯壶,如果建立連接時(shí)有問(wèn)題,OpenSSL會(huì)給你返回一個(gè)錯(cuò)誤信息湾盗。

當(dāng)你在最后的時(shí)候你看到這樣說(shuō)明你已經(jīng)成功了:

CONNECTED(00000003)

depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C

verify error:num=20:unable to get local issuercertificate

verify return:0

---

Certificate chain

0s:/C=US/ST=California/L=Cupertino/O=Apple Inc./OU=iTMSEngineering/CN=gateway.sandbox.push.apple.com

i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C

1s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C

i:/O=Entrust.net/OU=www.entrust.net/CPS_2048incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.netCertification Authority (2048)

---

Server certificate

-----BEGIN CERTIFICATE-----

MIIFGzCCBAOgAwIBAgIETBz90jANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC

……省略……

fMGbLqkGn8YogdPqe5T1

-----END CERTIFICATE-----

subject=/C=US/ST=California/L=Cupertino/O=AppleInc./OU=iTMS Engineering/CN=gateway.sandbox.push.apple.com

issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C

---

No client certificate CA names sent

---

SSL handshake has read 2731 bytes and written 2165 bytes

---

New, TLSv1/SSLv3, Cipher is AES256-SHA

Server public key is 2048 bit

Secure Renegotiation IS supported

Compression: NONE

Expansion: NONE

SSL-Session:

Protocol? : TLSv1

Cipher??? : AES256-SHA

Session-ID:

Session-ID-ctx:

Master-Key:C7A47EED5E1F5……省略……369D4

Key-Arg?? : None

Start Time:1361862882

Timeout?? : 300 (sec)

Verify return code: 0 (ok)

---

在這里提醒一下伏蚊,也許你會(huì)看到像我這樣的提示:verify error:num=20:unable to get local issuercertificate

verify return:0

其實(shí)是沒(méi)問(wèn)題的。

七 項(xiàng)目測(cè)試

建立我們的推送的項(xiàng)目(注意BundleIdentifier必須和我們推送應(yīng)用的App id一致)

在AppDelegate里didFinishLaunchingWithOptions函數(shù)里寫(xiě)

- (BOOL)application:(UIApplication?*)applicationdidFinishLaunchingWithOptions:(NSDictionary?*)launchOptions

{

……

//推送的形式:標(biāo)記格粪,聲音躏吊,提示

[[UIApplication?sharedApplication]?registerForRemoteNotificationTypes:?UIRemoteNotificationTypeBadge?|UIRemoteNotificationTypeSound?|?UIRemoteNotificationTypeAlert];

return?YES;

}

- (void)application:(UIApplication?*)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData?*)pToken {

NSLog(@"regisger success:%@",pToken);

//注冊(cè)成功,將deviceToken保存到應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)中

}

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{

//處理推送消息

NSLog(@"userinfo:%@",userInfo);

NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);

}

- (void)application:(UIApplication?*)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError?*)error {

NSLog(@"Registfail%@",error);

}

我們運(yùn)行程序的時(shí)候會(huì)有提示帐萎,說(shuō)我們的程序要發(fā)送推送通知

下面我們把php服務(wù)器代碼和生成的ck.pem文件放在統(tǒng)一文件夾下面(這里我們還是統(tǒng)一放在桌面上)比伏。

用Xcode打開(kāi)(其他工具也可以)php服務(wù)器端的代碼,把deviceToken改成我們現(xiàn)在要進(jìn)行測(cè)試的iphone的deviceToken(獲得方法疆导,:在Xcode的頂部工具欄點(diǎn)擊windowàOrganizer赁项,在左側(cè)選中我們的iphone后,右邊的Identifier后面的就是了)澈段,密語(yǔ)改成我們之前設(shè)置的abcabc悠菜。然后保存。

然后在終端運(yùn)行命令(如果剛才你關(guān)閉了終端的話败富,最好ls一下悔醋,看看當(dāng)前是不是在桌面),執(zhí)行命令:

php pushMe.php

然后回車(chē)(pushMe為服務(wù)器文件名稱(chēng))

如果出現(xiàn)這樣的提示說(shuō)明成功了兽叮,然后在iphone上芬骄,我們期待已久的推送消息終于來(lái)了猾愿。

以下是推送的幾種效果:

常見(jiàn)問(wèn)題:

1、在用證書(shū)和秘鑰鏈接服務(wù)器時(shí)出現(xiàn)提示:

Error opening client certificate private key filePushChatKey.pem

20839:error:02001002:system library:fopen:No such file ordirectory:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:356:fopen('PushChatKey.pem','r')

20839:error:20074002:BIO routines:FILE_CTRL:systemlib:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:358:

unable to load client certificate private key file

解決:

文件路徑不對(duì)德玫。cd到生成的pem文件路徑下再進(jìn)行鏈接

2匪蟀、前期測(cè)試沒(méi)有問(wèn)題椎麦,將ck.pem給服務(wù)器宰僧,通過(guò)服務(wù)器進(jìn)行推送時(shí)推送不成功,提示鏈接APNS失敗观挎。

解決:一琴儿,看一下證書(shū)的名稱(chēng),密語(yǔ)是否正確嘁捷;二造成,路徑是否正確;然后檢查一下庫(kù)雄嚣,OpenSSL和libssl晒屎;此外apache還要開(kāi)啟OpenSSL權(quán)限,確被荷可以訪問(wèn)pem

3鼓鲁、APNS地址

測(cè)試地址gateway.sandbox.push.apple.com:2195

發(fā)布地址gateway.push.apple.com:2195

測(cè)試的地址用的是沙盒,發(fā)布地址是不同的港谊。發(fā)布軟件的時(shí)候記得改過(guò)來(lái)

4骇吭、要注意順序問(wèn)題,一定要按照這個(gè)順序來(lái):

生成鑰匙串請(qǐng)求 -->配置下載開(kāi)發(fā)證書(shū)-->??配置App ID 歧寺,配置燥狰、下載SSL證書(shū)-->Provisioning證書(shū)

5、多注意一下紅色字體部分

在此感謝曾經(jīng)為此而努力過(guò)的前輩們斜筐,尤其是感謝楊大哥的幫助龙致。

在這里附上楊大哥的帖子:http://www.cocoachina.com/bbs/read.php?tid=102110&page=1

另外附上幾個(gè)關(guān)于推送的不錯(cuò)的帖子:

http://zxs19861202.iteye.com/blog/1532460

一篇很不錯(cuò)的帖子,老外寫(xiě)的

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

中文翻譯

http://article.ityran.com/archives/194

在過(guò)程中如果有疑問(wèn)可以新浪或騰訊微博@showhilllee雖然本人是菜鳥(niǎo)一個(gè)顷链,也許不能為你把問(wèn)題解決掉目代,但是會(huì)本著菜鳥(niǎo)精神去幫你解決

轉(zhuǎn)帖請(qǐng)注明出處:http://blog.csdn.net/showhilllee/article/details/8631734

php服務(wù)器代碼pushMe.php:http://vdisk.weibo.com/s/zw-xeocHvZSgv

本文若有問(wèn)題,歡迎大家斧正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蕴潦,一起剝皮案震驚了整個(gè)濱河市像啼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌潭苞,老刑警劉巖忽冻,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異此疹,居然都是意外死亡僧诚,警方通過(guò)查閱死者的電腦和手機(jī)遮婶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)湖笨,“玉大人旗扑,你說(shuō)我怎么就攤上這事〈仁。” “怎么了臀防?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)边败。 經(jīng)常有香客問(wèn)我袱衷,道長(zhǎng),這世上最難降的妖魔是什么笑窜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任致燥,我火速辦了婚禮,結(jié)果婚禮上排截,老公的妹妹穿的比我還像新娘嫌蚤。我一直安慰自己,他們只是感情好断傲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布脱吱。 她就那樣靜靜地躺著,像睡著了一般艳悔。 火紅的嫁衣襯著肌膚如雪急凰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天猜年,我揣著相機(jī)與錄音抡锈,去河邊找鬼。 笑死乔外,一個(gè)胖子當(dāng)著我的面吹牛床三,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杨幼,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撇簿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了差购?” 一聲冷哼從身側(cè)響起四瘫,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欲逃,沒(méi)想到半個(gè)月后找蜜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稳析,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年洗做,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弓叛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诚纸,死狀恐怖撰筷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畦徘,我是刑警寧澤毕籽,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站旧烧,受9級(jí)特大地震影響影钉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掘剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奈虾。 院中可真熱鬧夺谁,春花似錦、人聲如沸肉微。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碉纳。三九已至勿负,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劳曹,已是汗流浹背奴愉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铁孵,地道東北人锭硼。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜕劝,于是被迫代替她去往敵國(guó)和親檀头。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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