系統(tǒng)推送的集成(五) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 調(diào)度和處理本地通知(三)

版本記錄

版本號(hào) 時(shí)間
V1.0 2018.07.10

前言

我們做APP很多時(shí)候都需要推送功能琢蛤,以直播為例,如果你關(guān)注的主播開(kāi)播了蜂嗽,那么就需要向關(guān)注這個(gè)主播的人發(fā)送開(kāi)播通知苗膝,提醒用戶去看播,這個(gè)只是一個(gè)小的方面植旧,具體應(yīng)用根據(jù)公司的業(yè)務(wù)邏輯而定辱揭。前面已經(jīng)花了很多篇幅介紹了極光推送,其實(shí)極光推送無(wú)非就是將我們客戶端和服務(wù)端做的很多東西封裝了一下病附,節(jié)省了我們很多處理邏輯和流程问窃,這一篇開(kāi)始,我們就利用系統(tǒng)的原生推送類(lèi)結(jié)合工程實(shí)踐說(shuō)一下系統(tǒng)推送的集成完沪,希望我的講解能讓大家很清楚的理解它域庇。感興趣的可以看上面幾篇。
1. 系統(tǒng)推送的集成(一) —— 基本集成流程(一)
2. 系統(tǒng)推送的集成(二) —— 推送遇到的幾個(gè)坑之BadDeviceToken問(wèn)題(一)
3. 系統(tǒng)推送的集成(三) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 本地和遠(yuǎn)程通知概覽(一)
4. 系統(tǒng)推送的集成(四) —— 本地和遠(yuǎn)程通知編程指南之你的App的通知 - 管理您的應(yīng)用程序的通知支持(二)

Scheduling and Handling Local Notifications - 調(diào)度和處理本地通知

本地通知可讓您在應(yīng)用可能未運(yùn)行時(shí)提醒用戶覆积。 您可以在應(yīng)用程序在前臺(tái)或后臺(tái)運(yùn)行時(shí)調(diào)度本地通知听皿。 在調(diào)度通知后,系統(tǒng)負(fù)責(zé)在適當(dāng)?shù)臅r(shí)間向用戶發(fā)送通知宽档。 您的應(yīng)用無(wú)需運(yùn)行即可讓系統(tǒng)發(fā)送通知尉姨。

如果您的應(yīng)用未運(yùn)行,或者它位于后臺(tái)雌贱,系統(tǒng)會(huì)直接向用戶顯示本地通知啊送。 系統(tǒng)可以通過(guò)警報(bào)面板或橫幅偿短,聲音或通過(guò)標(biāo)記應(yīng)用程序的圖標(biāo)來(lái)警告用戶。 如果您的應(yīng)用提供了通知內(nèi)容應(yīng)用擴(kuò)展程序馋没,系統(tǒng)甚至可以使用您的自定義界面提醒用戶昔逗。 如果您的應(yīng)用在通知到達(dá)時(shí)位于前臺(tái),系統(tǒng)會(huì)為您的應(yīng)用提供內(nèi)部處理通知的機(jī)會(huì)篷朵。

注意:僅在iOS勾怒,watchOS和tvOS中支持本地通知。 在macOS中声旺,應(yīng)用程序在后臺(tái)運(yùn)行時(shí)不需要本地通知來(lái)標(biāo)記其圖標(biāo)笔链,播放聲音或顯示警報(bào)。 AppKit框架已經(jīng)支持這些功能腮猖。


Configuring a Local Notification - 配置本地通知

配置本地通知的步驟如下:

在為通知?jiǎng)?chuàng)建內(nèi)容時(shí),請(qǐng)?zhí)顚?xiě)UNMutableNotificationContent對(duì)象的屬性项滑,以反映您希望與用戶進(jìn)行的交互類(lèi)型依沮。例如,如果要顯示警報(bào)枪狂,請(qǐng)?zhí)顚?xiě)titlebody屬性危喉。系統(tǒng)使用您提供的信息來(lái)確定與用戶交互的方式。處理已傳遞到應(yīng)用程序的本地通知時(shí)摘完,您還可以使用此對(duì)象中的數(shù)據(jù)姥饰。

創(chuàng)建通知內(nèi)容后,創(chuàng)建一個(gè)觸發(fā)器對(duì)象孝治,定義何時(shí)傳遞通知列粪。User Notifications框架提供基于時(shí)間和基于位置的觸發(fā)器。使用所需條件配置觸發(fā)器谈飒,并使用該對(duì)象和內(nèi)容來(lái)創(chuàng)建UNNotificationRequest對(duì)象岂座。

LIsting 3-1顯示了如何創(chuàng)建和配置與鬧鐘相關(guān)的本地通知。使用UNCalendarNotificationTrigger會(huì)導(dǎo)致通知在特定日期或時(shí)間傳遞杭措,在此示例中费什,下一次時(shí)鐘到達(dá)早上7:00。

// Listing 3-1Creating and configuring a local notification
// OC

UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
content.title = [NSString localizedUserNotificationStringForKey:@"Wake up!" arguments:nil];
content.body = [NSString localizedUserNotificationStringForKey:@"Rise and shine! It's morning time!"
        arguments:nil];
 
// Configure the trigger for a 7am wakeup.
NSDateComponents* date = [[NSDateComponents alloc] init];
date.hour = 7;
date.minute = 0;
UNCalendarNotificationTrigger* trigger = [UNCalendarNotificationTrigger
       triggerWithDateMatchingComponents:date repeats:NO];
 
// Create the request object.
UNNotificationRequest* request = [UNNotificationRequest
       requestWithIdentifier:@"MorningAlarm" content:content trigger:trigger];
// Swift
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey: "Wake up!", arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: "Rise and shine! It's morning time!",
                                                        arguments: nil)
 
// Configure the trigger for a 7am wakeup.
var dateInfo = DateComponents()
dateInfo.hour = 7
dateInfo.minute = 0
let trigger = UNCalendarNotificationTrigger(dateMatching: dateInfo, repeats: false)
 
// Create the request object.
let request = UNNotificationRequest(identifier: "MorningAlarm", content: content, trigger: trigger)

UNNotificationRequest對(duì)象提供標(biāo)識(shí)符為您提供了一種識(shí)別調(diào)度后的本地通知的方法手素。 您可以使用標(biāo)識(shí)符稍后查找待處理的請(qǐng)求鸳址,并在到達(dá)之前取消它們瘩蚪。 有關(guān)調(diào)度和取消請(qǐng)求的詳細(xì)信息,請(qǐng)參閱 Scheduling Local Notifications for Delivery稿黍。

1. Assigning Custom Actions to a Local Notification - 將自定義操作分配給本地通知

要在界面中顯示本地通知的自定義操作疹瘦,請(qǐng)?jiān)谂渲闷陂g將一個(gè)已注冊(cè)的類(lèi)別標(biāo)識(shí)符分配給UNMutableNotificationContent對(duì)象的categoryIdentifier屬性。 系統(tǒng)使用類(lèi)別信息來(lái)確定要包含在通知界面中的操作按鈕(如果有)巡球。 在安排通知請(qǐng)求之前言沐,必須為此屬性分配值。

Listing 3-2顯示了如何為本地通知指定類(lèi)別標(biāo)識(shí)符酣栈。 在此示例中险胰,TIMER_EXPIRED字符串表示在啟動(dòng)時(shí)定義的類(lèi)別,該類(lèi)別包括兩個(gè)自定義操作矿筝。 注冊(cè)此類(lèi)別的代碼如Listing 2-3所示起便。

// Listing 3-2Defining a category of actions for a local notification
// OC

UNNotificationContent *content = [[UNNotificationContent alloc] init];
// Configure the content. . .
 
// Assign the category (and the associated actions).
content.categoryIdentifier = @"TIMER_EXPIRED";
 
// Create the request and schedule the notification.
// swift

let content = UNMutableNotificationContent()
// Configure the content. . .
 
// Assign the category (and the associated actions).
content.categoryIdentifier = "TIMER_EXPIRED"
 
// Create the request and schedule the notification.

有關(guān)如何使用類(lèi)別注冊(cè)自定義操作的信息,請(qǐng)參閱Configuring Categories and Actionable Notifications跋涣。

2. Adding a Sound to the Notification Content - 向通知內(nèi)容添加聲音

如果您希望本地通知在傳遞時(shí)播放聲音缨睡,請(qǐng)為UNMutableNotificationContent對(duì)象的sound屬性指定值。 您可以使用UNNotificationSound對(duì)象指定聲音陈辱,該對(duì)象允許您播放自定義聲音或默認(rèn)通知聲音。 自定義聲音必須位于用戶設(shè)備本地才能播放细诸。 將通知的聲音文件存儲(chǔ)在應(yīng)用程序的主程序包中沛贪,或下載它們并將它們存儲(chǔ)在應(yīng)用程序容器目錄的Library / Sounds子目錄中。

要播放默認(rèn)聲音震贵,請(qǐng)創(chuàng)建聲音文件并將其指定給通知內(nèi)容利赋。 例如:

// OC
content.sound = [UNNotificationSound defaultSound];
// SWIFT
content.sound = UNNotificationSound.default()

指定自定義聲音時(shí),僅指定要播放的聲音文件的文件名猩系。 如果系統(tǒng)找到具有您提供的名稱的合適聲音文件媚送,則在發(fā)送通知時(shí)播放該聲音。 如果系統(tǒng)找不到合適的聲音文件寇甸,它將播放默認(rèn)聲音塘偎。

// OC
content.sound = [UNNotificationSound soundNamed:@"MySound.aiff"];
//SWIFT
content.sound = UNNotificationSound(named: "MySound.aiff")

有關(guān)支持的聲音文件格式的信息,請(qǐng)參閱UNNotificationSound Class Reference拿霉。


Scheduling Local Notifications for Delivery - 調(diào)度本地通知送達(dá)

要調(diào)度送達(dá)的本地通知吟秩,請(qǐng)創(chuàng)建UNNotificationRequest對(duì)象并調(diào)用UNUserNotificationCenteraddNotificationRequest:withCompletionHandler:方法。 系統(tǒng)異步調(diào)度本地通知绽淘,在調(diào)度完成或發(fā)生錯(cuò)誤時(shí)調(diào)用完成處理程序塊涵防。 Listing 3-3顯示了如何調(diào)度本地通知以進(jìn)行傳遞。 此示例中的代碼完成了Listing 3-1中創(chuàng)建的通知的調(diào)度沪铭。

// Listing 3-3Scheduling a local notification for delivery
// OC

// Create the request object.
UNNotificationRequest* request = [UNNotificationRequest
       requestWithIdentifier:@"MorningAlarm" content:content trigger:trigger];
 
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
   if (error != nil) {
       NSLog(@"%@", error.localizedDescription);
   }
}];
// SWIFT

// Create the request object.
let request = UNNotificationRequest(identifier: "MorningAlarm", content: content, trigger: trigger)
 
// Schedule the request.
let center = UNUserNotificationCenter.current()
center.add(request) { (error : Error?) in
    if let theError = error {
        print(theError.localizedDescription)
    }
}

調(diào)度的本地通知保持活動(dòng)狀態(tài)壮池,直到它們被系統(tǒng)取消調(diào)度或直到您明確取消它們?yōu)橹埂?除非通知的觸發(fā)器配置為重復(fù)偏瓤,否則系統(tǒng)會(huì)在發(fā)送后自動(dòng)取消計(jì)劃通知。 要在送達(dá)之前取消單個(gè)通知椰憋,或取消重復(fù)通知厅克,請(qǐng)調(diào)用UNUserNotificationCenterremovePendingNotificationRequestsWithIdentifiers:方法。 被取消的通知必須具有分配給其UNNotificationRequest對(duì)象的identifier熏矿。要取消所有掛起的本地通知已骇,無(wú)論它們是否具有請(qǐng)求標(biāo)識(shí)符,請(qǐng)調(diào)用removeAllPendingNotificationRequests方法票编。


Responding to the Delivery of Notifications - 響應(yīng)送達(dá)的通知

當(dāng)您的應(yīng)用未運(yùn)行或處于后臺(tái)時(shí)褪储,系統(tǒng)會(huì)使用您指定的交互自動(dòng)提供本地和遠(yuǎn)程通知。 如果用戶選擇某個(gè)操作慧域,或選擇其中一個(gè)標(biāo)準(zhǔn)交互鲤竹,系統(tǒng)會(huì)通知您的應(yīng)用用戶的選擇。 然后昔榴,您的代碼可以使用該選擇來(lái)執(zhí)行其他任務(wù)辛藻。 如果您的應(yīng)用在前臺(tái)運(yùn)行,則會(huì)將通知直接發(fā)送到您的應(yīng)用互订。 然后吱肌,您可以決定是安靜地處理通知還是提醒用戶。

要響應(yīng)通知的傳遞仰禽,您必須為單例UNUserNotificationCenter對(duì)象實(shí)現(xiàn)代理氮墨。 您的委托對(duì)象必須符合UNUserNotificationCenterDelegate協(xié)議,通知中心使用該協(xié)議向您的應(yīng)用程序發(fā)送通知信息吐葵。 如果您的通知包含自定義操作规揪,則需要委托。

重要:在應(yīng)用程序或應(yīng)用程序擴(kuò)展完成啟動(dòng)之前温峭,您必須將代理分配給單例UNUserNotificationCenter對(duì)象猛铅。 如果不這樣做,可能會(huì)阻止您的應(yīng)用正確處理通知凤藏。

有關(guān)如何實(shí)現(xiàn)代理對(duì)象的其他信息奸忽,請(qǐng)參閱UNUserNotificationCenterDelegate Protocol Reference

1. Handling Notifications When Your App Is in the Foreground - 處理您的應(yīng)用程序在前臺(tái)時(shí)的通知

如果在應(yīng)用程序位于前臺(tái)時(shí)收到通知清笨,您可以靜默該通知或告訴系統(tǒng)繼續(xù)顯示通知界面筷频。默認(rèn)情況下队伟,在前臺(tái)時(shí)系統(tǒng)會(huì)靜默通知谨设,并將通知的數(shù)據(jù)直接發(fā)送到您的應(yīng)用诊县。您可以使用通知數(shù)據(jù)直接更新應(yīng)用程序界面。例如,如果到達(dá)新的體育比分腌歉,您只需在界面中更新該信息即可蛙酪。

如果希望系統(tǒng)繼續(xù)顯示通知界面,請(qǐng)為UNUserNotificationCenter提供委托對(duì)象翘盖,并實(shí)現(xiàn)userNotificationCenter:willPresentNotification:withCompletionHandler:方法桂塞。您對(duì)此方法的實(shí)現(xiàn)仍應(yīng)處理通知數(shù)據(jù)。完成后馍驯,使用您希望系統(tǒng)使用的傳遞選項(xiàng)(如果有)執(zhí)行提供的完成處理程序塊阁危。如果未指定任何選項(xiàng),系統(tǒng)會(huì)使通知靜音汰瘫。Listring 3-4顯示了此方法的示例實(shí)現(xiàn)狂打,它告訴系統(tǒng)播放聲音。通知的有效負(fù)載payload標(biāo)識(shí)要播放的聲音混弥。

// Listing 3-4Playing a sound while your app is in the foreground
// OC
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
        willPresentNotification:(UNNotification *)notification
        withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
   // Update the app interface directly.
 
    // Play a sound.
   completionHandler(UNNotificationPresentationOptionSound);
}
//SWIFT
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
                            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    // Update the app interface directly.
    
    // Play a sound.
    completionHandler(UNNotificationPresentationOptions.sound)
}

當(dāng)您的應(yīng)用處于后臺(tái)或未運(yùn)行時(shí)趴乡,系統(tǒng)不會(huì)調(diào)用userNotificationCenter:willPresentNotification:withCompletionHandler:方法。 在這些情況下蝗拿,系統(tǒng)根據(jù)通知本身中的信息警告用戶晾捏。 您仍然可以使用UNUserNotificationCenter對(duì)象的getDeliveredNotificationsWithCompletionHandler:方法確定是否已發(fā)送通知。

2. Responding to the Selection of a Custom Action - 響應(yīng)自定義操作的選擇

當(dāng)用戶從通知界面中選擇自定義操作時(shí)哀托,系統(tǒng)會(huì)通知您的應(yīng)用用戶的選擇惦辛。對(duì)自定義操作的響應(yīng)打包在UNNotificationResponse對(duì)象中,并傳遞給應(yīng)用程序的共享UNUserNotificationCenter對(duì)象的委托仓手。要接收響應(yīng)裙品,您的委托對(duì)象必須實(shí)現(xiàn)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:方法。您對(duì)該方法的實(shí)施必須能夠處理您的應(yīng)用或應(yīng)用擴(kuò)展程序支持的所有自定義操作俗或。

如果收到回復(fù)后您的應(yīng)用或應(yīng)用擴(kuò)展程序未運(yùn)行,系統(tǒng)會(huì)在后臺(tái)啟動(dòng)您的應(yīng)用或應(yīng)用擴(kuò)展程序以處理響應(yīng)岁忘。使用提供的后臺(tái)時(shí)間更新數(shù)據(jù)結(jié)構(gòu)和應(yīng)用程序界面以反映用戶的選擇辛慰。請(qǐng)勿使用時(shí)間執(zhí)行與自定義操作處理無(wú)關(guān)的任務(wù)。

Listing 3-5顯示了具有多個(gè)類(lèi)別和自定義操作的計(jì)時(shí)器應(yīng)用程序的響應(yīng)處理程序方法的實(shí)現(xiàn)干像。該實(shí)現(xiàn)使用actioncategoryIdentifier屬性來(lái)確定適當(dāng)?shù)牟僮鬟^(guò)程帅腌。

// Listing 3-5Handling a custom notification action
// OC

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
           didReceiveNotificationResponse:(UNNotificationResponse *)response
           withCompletionHandler:(void (^)(void))completionHandler {
    if ([response.notification.request.content.categoryIdentifier isEqualToString:@"TIMER_EXPIRED"]) {
        // Handle the actions for the expired timer.
        if ([response.actionIdentifier isEqualToString:@"SNOOZE_ACTION"])
        {
            // Invalidate the old timer and create a new one. . .
        }
        else if ([response.actionIdentifier isEqualToString:@"STOP_ACTION"])
        {
            // Invalidate the timer. . .
        }
 
    }
 
    // Else handle actions for other notification types. . .
}
// SWIFT
// func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    if response.notification.request.content.categoryIdentifier == "TIMER_EXPIRED" {
        // Handle the actions for the expired timer.
        if response.actionIdentifier == "SNOOZE_ACTION" {
            // Invalidate the old timer and create a new one. . .
        }
        else if response.actionIdentifier == "STOP_ACTION" {
            // Invalidate the timer. . .
        }
    }
    
    // Else handle actions for other notification types. . .
}

3. Handling the Standard System Actions - 處理標(biāo)準(zhǔn)系統(tǒng)操作

在系統(tǒng)的通知界面中,用戶可以明確地關(guān)閉通知界面或啟動(dòng)您的應(yīng)用麻汰,而不是選擇您的一個(gè)自定義操作速客。關(guān)閉界面涉及點(diǎn)擊適用按鈕或直接關(guān)閉界面;忽略通知或輕彈通知橫幅并不代表明確的移除五鲫。觸發(fā)系統(tǒng)操作時(shí)溺职,用戶通知中心會(huì)將其報(bào)告給userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:代理方法。傳遞給該方法的響應(yīng)對(duì)象包含以下操作標(biāo)識(shí)符之一:

您可以像處理其他操作一樣處理標(biāo)準(zhǔn)系統(tǒng)操作乱灵。Listing 3-6顯示了userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:方法的模板用于檢查這些特殊的actions

// Listing 3-6Handling the standard system actions
// OC
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
          didReceiveNotificationResponse:(UNNotificationResponse *)response
          withCompletionHandler:(void (^)(void))completionHandler {
   if ([response.actionIdentifier isEqualToString:UNNotificationDismissActionIdentifier]) {
       // The user dismissed the notification without taking action.
   }
   else if ([response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
       // The user launched the app.
   }
 
   // Else handle any custom actions. . .
}
// SWIFT

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    if response.actionIdentifier == UNNotificationDismissActionIdentifier {
        // The user dismissed the notification without taking action
    }
    else if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
        // The user launched the app
    }
    
    // Else handle any custom actions. . .
}

后記

本篇主要講述了調(diào)度和處理本地通知七冲,感興趣的給個(gè)贊或者關(guān)注~~~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痛倚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澜躺,更是在濱河造成了極大的恐慌蝉稳,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掘鄙,死亡現(xiàn)場(chǎng)離奇詭異耘戚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)通铲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)毕莱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人颅夺,你說(shuō)我怎么就攤上這事朋截。” “怎么了吧黄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵部服,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拗慨,道長(zhǎng)廓八,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任赵抢,我火速辦了婚禮剧蹂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烦却。我一直安慰自己宠叼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布其爵。 她就那樣靜靜地躺著冒冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摩渺。 梳的紋絲不亂的頭發(fā)上简烤,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音摇幻,去河邊找鬼横侦。 笑死挥萌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丈咐。 我是一名探鬼主播瑞眼,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棵逊!你這毒婦竟也來(lái)了伤疙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辆影,失蹤者是張志新(化名)和其女友劉穎徒像,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蛙讥,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锯蛀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了次慢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旁涤。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖迫像,靈堂內(nèi)的尸體忽然破棺而出劈愚,到底是詐尸還是另有隱情,我是刑警寧澤闻妓,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布菌羽,位于F島的核電站,受9級(jí)特大地震影響由缆,放射性物質(zhì)發(fā)生泄漏注祖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一均唉、第九天 我趴在偏房一處隱蔽的房頂上張望是晨。 院中可真熱鬧,春花似錦舔箭、人聲如沸署鸡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至时捌,卻和暖如春怒医,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奢讨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工稚叹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓扒袖,卻偏偏與公主長(zhǎng)得像塞茅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子季率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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