iOS 應(yīng)用之間的跳轉(zhuǎn)(OC&Swift)

一乎芳、應(yīng)用間跳轉(zhuǎn)介紹

  • 1.1蘸际、什么是應(yīng)用間跳轉(zhuǎn),有什么作用? 如下
    • <1>、使用第三方用戶登錄箍铭,需要用戶授權(quán)绎晃,還需要"返回到調(diào)用的程序蜜唾,同時(shí)返回授權(quán)的用戶名"
    • <2>、應(yīng)用程序推廣箕昭,設(shè)置-推薦應(yīng)用-有很多應(yīng)用程序圖標(biāo)如果本機(jī)已經(jīng)安裝過(guò)灵妨,會(huì)直接跳轉(zhuǎn)到另外一個(gè)應(yīng)用程序, 軟件的廣告,我們?cè)诙兑艋蛘哌M(jìn)入頭條都可以看到很多的點(diǎn)擊事件進(jìn)去其他的app或者去下載appstore下載app
    • <3>落竹、平時(shí) 支付寶和微信 的支付 等等
  • 1.2泌霍、如何實(shí)現(xiàn)應(yīng)用程序間跳轉(zhuǎn) ?
    • <1>述召、跳轉(zhuǎn)appstore進(jìn)入自己的app: 在我們自己的app里面有時(shí)候我們會(huì)有更新提醒朱转,其實(shí)也就是打開我們自己 app 的 url,以 itms-apps://https://開頭的應(yīng)用詳情頁(yè)鏈接积暖,跳轉(zhuǎn)到AppStore,如下,其中url要進(jìn)行轉(zhuǎn)碼藤为,下面我就不再轉(zhuǎn)碼了
      OC 版本:

      NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id1129144823"];
      
      // 注意: 跳轉(zhuǎn)之前, 可以使用 canOpenURL: 判斷是否可以跳轉(zhuǎn)
      if (![[UIApplication sharedApplication]canOpenURL:url]) {
              // 不能跳轉(zhuǎn)就不要往下執(zhí)行了
              return;
      }
      
      if (@available(iOS 10.0, *)){
      
            [[UIApplication sharedApplication]openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey:@YES} completionHandler:^(BOOL success) {
        
                  if (success) {
                       NSLog(@"10以后可以跳轉(zhuǎn)url");
                  }else{
                      NSLog(@"10以后不可以跳轉(zhuǎn)url");
                  }
            }];
       }else{
      
           BOOL success = [[UIApplication sharedApplication]openURL:url];
      
           if (success) {
               NSLog(@"10以前可以跳轉(zhuǎn)url");
           }else{
               NSLog(@"10以前不可以跳轉(zhuǎn)url");
           }
      }
      

      Swift 版本:

      let url = URL(string: "itms-apps://itunes.apple.com/app/id1129144823")
      
      // 注意: 跳轉(zhuǎn)之前, 可以使用 canOpenURL: 判斷是否可以跳轉(zhuǎn)
      if !UIApplication.shared.canOpenURL(url!) {
           // 不能跳轉(zhuǎn)就不要往下執(zhí)行了
           return
      }
      
      if #available(iOS 10.0, *) {
        
            UIApplication.shared.open(url!, options: [:]) { (success) in
                 if (success) {
                      print("10以后可以跳轉(zhuǎn)url")
                 }else{
                      print("10以后不能完成跳轉(zhuǎn)")
                 }
             }
      } else {
             // Fallback on earlier versions
             let success = UIApplication.shared.openURL(url!)
             if (success) {
                   print("10以下可以跳轉(zhuǎn)")
             }else{
                   print("10以下不能完成跳轉(zhuǎn)")
             }
       }
      
    • <2>、打電話:tel://電話號(hào)碼夺刑,代碼和上面的一樣

    • <3>缅疟、發(fā)短信:sms://電話號(hào)碼,代碼和上面的一樣

    • <4>遍愿、發(fā)郵件:mailTo://郵箱號(hào)存淫,代碼和上面的一樣

    提示:itms-apps、https沼填、tel桅咆、sms、mailTo 都是協(xié)議坞笙,app之間跳轉(zhuǎn)的協(xié)議是:Scheme岩饼,如果想要跳轉(zhuǎn)到不同app,就要打開對(duì)應(yīng)的 URL(協(xié)議是:scheme), scheme是一個(gè)具體的字符串荚虚,并不是scheme這幾個(gè)字母,在下面會(huì)詳細(xì)的介紹

  • 1.3籍茧、URL : 統(tǒng)一資源定位符
    • <1>版述、我們以淘寶網(wǎng)的一個(gè)鏈接為例:https://www.taobao.com/markets/bao/xiangbao?spm=a21bo.2017.201867-main.5.5af911d9blzLlJ
      Swift版本

      let url = URL(string: "https://www.taobao.com/markets/bao/xiangbao?spm=a21bo.2017.201867-main.5.5af911d9blzLlJ")
      print("協(xié)議=",url!.scheme ?? "","IP或者是域名=",url!.host ?? "","路徑=",url!.path ,"參數(shù)=",url!.query ?? "")
      

      打印結(jié)果:協(xié)議= https IP或者是域名= www.taobao.com 路徑= /markets/bao/xiangbao 參數(shù)= spm=a21bo.2017.201867-main.5.5af911d9blzLlJ
      OC版本

      NSURL *url = [NSURL URLWithString:@"https://www.taobao.com/markets/bao/xiangbao?spm=a21bo.2017.201867-main.5.5af911d9blzLlJ"];
      NSLog(@"協(xié)議=%@ IP或者是域名=%@ 路徑=%@ 參數(shù)=%@",url.scheme,url.host,url.path,url.query);
      

      打印結(jié)果和上面的一樣

    • <2>、一個(gè) url 分為以下部分

      協(xié)議:https
      IP或者是域名:www.taobao.com
      路徑:/markets/bao/xiangbao
      參數(shù):spm=a21bo.2017.201867-main.5.5af911d9blzLlJ
      

二硕糊、應(yīng)用間跳轉(zhuǎn)實(shí)現(xiàn)

  • 2.1院水、我們先以自己創(chuàng)建的app實(shí)現(xiàn)來(lái)回的跳轉(zhuǎn):Test1Test2 兩個(gè)項(xiàng)目

  • 2.2、給Test2項(xiàng)目設(shè)置一個(gè) URL Scheme简十,用來(lái)其他的app跳轉(zhuǎn)到 Test2

    給Test2項(xiàng)目設(shè)置一個(gè) `URL Scheme`檬某,用來(lái)其他的app跳轉(zhuǎn)到 `Test2`

    提示:設(shè)置 URL Scheme時(shí), 不要加 ://,比如上面直接設(shè)置:test2 一個(gè)字符串就好

    • 再說(shuō)一下不一定根據(jù) URL Scheme進(jìn)入不同的界面的,也可以在Scheme后拼接參數(shù)螟蝙,比如:test2://1234
    • URL scheme 的作用:我們可以將應(yīng)用“綁定”到一個(gè)自定義 URL scheme 上恢恼,該 scheme 用于從瀏覽器或其他應(yīng)用中啟動(dòng)本應(yīng)用,同時(shí)跳轉(zhuǎn)時(shí)也可以傳遞參數(shù)胰默。比如场斑,可以在網(wǎng)頁(yè)上添加一個(gè)鏈接,點(diǎn)擊這個(gè)鏈接后會(huì)自動(dòng)打開對(duì)應(yīng)的APP上牵署÷┮或者從一個(gè) APP 跳轉(zhuǎn)到另一個(gè) APP,用的也是 URL scheme奴迅。比如微博或者微信的登錄或者分享之類的青责。在選擇登錄時(shí)就會(huì)跳到微信或者微博里,等登錄了以后就可以跳轉(zhuǎn)回去取具。
  • 2.3脖隶、在Test1項(xiàng)目里面設(shè)置白名單

    • <1>、解釋一下什么是白名單:其實(shí)白名單是在 iOS9.0 以后提出的,它就是一個(gè)數(shù)組暇检,里面放的是其他app的URL Scheme名字,在iOS9以前是不需要設(shè)置的产阱,可以直接用canOpenURL判斷是否可以跳轉(zhuǎn),但是在iOS9.0之后如果不添加白名單块仆, openURL 是無(wú)法判斷判斷是否可以跳轉(zhuǎn)的构蹬。

      提示:不想添加白名單是可以的,其他的app分享到微信悔据,它確信你的app存在庄敛,就不需要在白名單添其他app的URL Scheme,也就是不需要使用 canOpenURL判斷是否可以跳轉(zhuǎn) 是否可以跳轉(zhuǎn)

    • <2>、設(shè)置白名單蜜暑,如果你要跳轉(zhuǎn)其他的app铐姚,就要在自己的app的 info.plist 設(shè)置白名單策肝,添加其他app的URL Scheme,白名單的字段是:LSApplicationQueriesSchemes,下面我們?cè)?Test1添加白名單

      白名單的設(shè)置

  • 2.4肛捍、在Test1項(xiàng)目跳轉(zhuǎn)到Test2項(xiàng)目測(cè)試隐绵,代碼如下

    我們把上面 1.2中的<1>里面的url換為下面,在同一個(gè)手機(jī)上運(yùn)行 Test1 和 Test2 兩個(gè)項(xiàng)目


    跳轉(zhuǎn)效果
    • OC 版本:后面的代碼都是 1.2中的<1>里面的代碼

      NSURL *url = [NSURL URLWithString:@"test2://"];
      // 注意: 跳轉(zhuǎn)之前, 可以使用 canOpenURL: 判斷是否可以跳轉(zhuǎn)
      if (![[UIApplication sharedApplication]canOpenURL:url]) {
           // 不能跳轉(zhuǎn)就不要往下執(zhí)行了
           return;
      }
      ------后面的代碼都是  1.2中的<1>里面的代碼
      
    • Swift 版本:后面的代碼都是 1.2中的<1>里面的代碼

      let url = URL(string: "test2://")
      // 注意: 跳轉(zhuǎn)之前, 可以使用 canOpenURL: 判斷是否可以
      if !UIApplication.shared.canOpenURL(url!) {
          // 不能跳轉(zhuǎn)就不要往下執(zhí)行了
          return
      }
      -----后面的代碼都是  1.2中的<1>里面的代碼
      

    拓展:看到上面效果,我們就簡(jiǎn)單的完成了app之間的跳轉(zhuǎn)拙毫,這也是一些三方在分享的時(shí)候要求我們app設(shè)置白名單依许,你要分享到哪些平臺(tái),你就要添加其他平臺(tái)的 URL Scheme,這個(gè)不是隨便填寫的缀蹄,其他平臺(tái)設(shè)置的URL Scheme是什么峭跳,就在白名單就要添加什么,可不是自己隨意寫的

  • 2.5缺前、如果你想在Test2app再返回到Test1app,其實(shí)也就是反過(guò)來(lái)蛀醉,在 Test2 的白名單里面添加Test1URL Scheme,在跳轉(zhuǎn)Test1的使用根據(jù)Test1的schmem用openURL返回衅码,記得先用 canOpenURL判斷一下

    提示:在做分享的時(shí)候我們會(huì)檢測(cè)微信是不是安裝了拯刁,跳到微信后把微信給的URL Scheme也帶了過(guò)去,在從微信返回的時(shí)候不用再判斷 自己的app是否安裝了逝段,直接用OpenURL返回即可垛玻,添加白名單的目的是為了檢測(cè)其他的app是否安裝,可不可以跳轉(zhuǎn)奶躯;在自己的app跳轉(zhuǎn)其他的app的一定要用canOpenURL檢測(cè)一下帚桩,微信不在白名單添加其他app的URL Scheme的原因是它確信你的app存在,不需要用canOpenURL判斷

  • 2.6嘹黔、常用白名單字段(更多的白名單字段在mob平臺(tái)iOS開發(fā)文檔查看)

    • 新浪

      sinaweibo,
      sinaweibohd,
      sinaweibosso,
      sinaweibohdsso,
      weibosdk,
      weibosdk2.5
      
    • 微信

      wechat,
      weixin
      
    • 支付寶

      alipay,
      alipayshare
      
    • QQ

      mqqOpensdkSSoLogin,
      mqqopensdkapiV2,
      mqqopensdkapiV3,
      wtloginmqq2,
      mqq,
      mqqapi
      timapi
      

    提示:微信账嚎,新浪,QQ它們?cè)O(shè)置很多的Scheme的原因是要根據(jù)這些不同的Scheme做什么操作,比如根據(jù)Scheme跳轉(zhuǎn)到不同的界面等等

三参淹、怎樣跳轉(zhuǎn)到不同界面?

  • 3.1醉锄、再建立一個(gè)項(xiàng)目 Test3 ,給它添加一個(gè) URL Scheme浙值,再給Test3添加兩個(gè)控制器 ViewController2ViewController3

    再建立一個(gè)項(xiàng)目Test3恳不,給它添加一個(gè)Url Scheme

    提示: 一個(gè)項(xiàng)目可以添加多個(gè) URL Scheme,舉個(gè)例子开呐,你在用支付寶支付烟勋,支付寶會(huì)給你一個(gè) URL Scheme字符串,讓你添加到自己URL Types 里面,到時(shí)候你在調(diào)用支付寶支付,在支付寶界面返回的時(shí)候用這個(gè)支付寶給你的 URL Scheme 返回筐付;同樣卵惦,微信也會(huì)給你一個(gè)URL Scheme字符串,當(dāng)你跳轉(zhuǎn)到微信里面瓦戚,微信里面根據(jù)微信給你的URL Scheme返回到你的app沮尿;

    • 再解釋一下:為什么微信或者支付寶會(huì)給一個(gè)唯一的URL Scheme字符串,其目的是為了防止,從他們的應(yīng)用返回到自己的應(yīng)用時(shí)出錯(cuò)畜疾,根據(jù)URL Scheme字符串返回到自己的app的赴邻,如果手機(jī)里面有兩個(gè)程序都有相同的一個(gè) URL Scheme字符串,那么就出問(wèn)題了啡捶,它就不知道返回哪個(gè)app了,其實(shí)如果遇到相同的URL Scheme姥敛,誰(shuí)的app先安裝的,就返回到誰(shuí)的app,這個(gè)我測(cè)試了
  • 3.2瞎暑、在Test3處理其他Test1(或者其他的app通過(guò)openURL)進(jìn)來(lái)的判斷

    • OC 版本
    // 即將過(guò)期,不建議使用(建議把這3個(gè)方法同時(shí)實(shí)現(xiàn))
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        [self dealopenURL:url];
        return YES;
    }
    
    -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    
        [self dealopenURL:url];
        return YES;
    }
    
    -(void)dealopenURL:(NSURL *)url{
    
        NSLog(@"協(xié)議=%@ IP或者是域名=%@ 路徑=%@ 參數(shù)=%@",url.scheme,url.host,url.path,url.query);
    
        // 1.獲取主控制器
        UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
        // 拿到棧底的控制器
        ViewController *mainVc = [rootNav.childViewControllers firstObject];
        // 返回主控制器彤敛,防止多次進(jìn)入錯(cuò)亂
        [rootNav popToRootViewControllerAnimated:NO];
    
        // 利用 URL : 統(tǒng)一資源定位符來(lái)判斷
        if ([url.path isEqualToString:@"/vc2"]) {
    
             ViewController2 *vc2 = [ViewController2 new];
             vc2.urlString = url.host;
             [mainVc.navigationController pushViewController:vc2 animated:YES];
         } else if ([url.path isEqualToString:@"/vc3"]) {
      
             ViewController3 *vc3 = [ViewController3 new];
             vc3.urlString = url.host;
             [mainVc.navigationController pushViewController:vc3 animated:YES];
         }
    }
    
  • Swift 版本

    // 最新的
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
     
          dealopenURL(url: url as NSURL)
          return true
    }
    
    // 被遺棄的(最好兩個(gè)都用)
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
     
          dealopenURL(url: url as NSURL)
          return true
    }
    
    // MARK:跳轉(zhuǎn)的處理
    func dealopenURL(url:NSURL){
     
          let nav: UINavigationController! = window?.rootViewController as? UINavigationController
     
          nav.popToRootViewController(animated: false)
     
          let rootVC = nav.children[0]
     
          if url.path == "/vc2" {
         
               let vc2 = ViewController2()
               vc2.urlString = url.host
               rootVC.navigationController?.pushViewController(vc2, animated: true)
         
           }else if url.path == "/vc3"{
         
               let vc3 = ViewController3()
               vc3.urlString = url.host
               rootVC.navigationController?.pushViewController(vc3, animated: true)
           }
     
    }
    

    提示:上面跳轉(zhuǎn)是利用 URL的path(統(tǒng)一資源定位符)來(lái)判斷,我是把 帶過(guò)來(lái)的 URL Scheme 放到了 IP或者是域名 的位置

  • 3.3、在Test1里面的跳轉(zhuǎn)代碼

    • OC 版本
    // 跳轉(zhuǎn)Test3的ViewController2
    [self jumpUrl:@"test3://test1/vc2"];
    // 跳轉(zhuǎn)Test3的ViewController3
    [self jumpUrl:@"test3://test1/vc3"];
    
    -(void)jumpUrl:(NSString *)urlStr{
    
          NSURL *url = [NSURL URLWithString:urlStr];
    
          // 注意: 跳轉(zhuǎn)之前, 可以使用 canOpenURL: 判斷是否可以跳轉(zhuǎn)
          if (![[UIApplication sharedApplication]canOpenURL:url]) {
                return;
          }
    
          if (@available(iOS 10.0, *)){
      
                [[UIApplication sharedApplication]openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey:@YES} completionHandler:^(BOOL success) {
          
                    if (success) {
                            NSLog(@"10以后可以跳轉(zhuǎn)url");
                    }else{
                            NSLog(@"10以后不可以跳轉(zhuǎn)url");
                    }
                }];
           }else{
      
                BOOL success = [[UIApplication sharedApplication]openURL:url];
      
                 if (success) {
                     NSLog(@"10以前可以跳轉(zhuǎn)url");
                 }else{
                    NSLog(@"10以前不可以跳轉(zhuǎn)url");
                 }
            }
    }
    
  • Swift 版本

    jumpUrl(url: NSURL(string: "test3://test1/vc2")!)
    jumpUrl(url: NSURL(string: "test3://test1/vc3")!)
    
    func jumpUrl(url:NSURL){
     
         if !UIApplication.shared.canOpenURL(url as URL) {
              return
         }
     
         if #available(iOS 10.0, *) {
         
              UIApplication.shared.open(url as URL, options: [:]) { (success) in
             
                  if (success) {
                       print("10以后可以跳轉(zhuǎn)url")
                  }else{
                       print("10以后不能完成跳轉(zhuǎn)")
                  }
              }
         } else {
         // Fallback on earlier versions
              let success = UIApplication.shared.openURL(url as URL)
              if (success) {
                   print("10以下可以跳轉(zhuǎn)")
              }else{
                   print("10以下不能完成跳轉(zhuǎn)")
              }
         }
    }
    

四了赌、總結(jié)

  • 4.1墨榄、實(shí)現(xiàn)兩個(gè)app之間跳轉(zhuǎn)的步驟

    • <1>、在各自的app里面設(shè)置 URL scheme
    • <2>勿她、在各自app的info.plist里面添加字段LSApplicationQueriesSchemes渠概,類型為數(shù)組,數(shù)組中添加對(duì)方的 scheme 字符串(白名單的作用僅僅是iOS9.0方法canOpenURL要求的嫂拴,因?yàn)槲覀冊(cè)谔D(zhuǎn)前需要檢查下設(shè)備有沒(méi)有安裝將要跳轉(zhuǎn)的應(yīng)用)
    • <3>播揪、通過(guò)openURL 跳轉(zhuǎn)對(duì)方的 URL Scheme 即可
  • 4.2、在最后我重復(fù)一下很多app跳轉(zhuǎn)到微信筒狠、支付寶猪狈、微博等等后,它們是怎么做到再回到我們的app的辩恼,首先我們知道這些app里面的白名單肯定是沒(méi)有我們的 URL Scheme
    答:首選我們?cè)谄渌脚_(tái)注冊(cè)自己的應(yīng)用的時(shí)候雇庙,都會(huì)給我們一個(gè) URL Scheme 字符串,這個(gè)字符串我們需要添加到我們的 URL Scheme里面灶伊,想必大家也知道了疆前,我們需要添加多個(gè)URL Scheme,因?yàn)槲⒉⑿牌溉Ц秾毝紩?huì)給我們一個(gè)唯一的 URL Scheme 字符串竹椒,唯一是為了防止我們跳轉(zhuǎn)到他們的app后再返回的時(shí)候出錯(cuò),還有其他設(shè)備的 URL Scheme與我們的一樣就會(huì)造成返回錯(cuò)亂的情況米辐;再說(shuō)支付寶微信在返回我們的app的時(shí)候他們不去白名單里面添加我們的 URL Scheme胸完,那是因?yàn)樗麄冎牢覀兊脑O(shè)備肯定有我們的app,不然怎么會(huì)進(jìn)入到微信和支付寶的翘贮?又有人說(shuō)了我先進(jìn)到微信赊窥,在彈出返回自己app和留在微信的界面彈出,我進(jìn)入后臺(tái)去把自己的app卸載狸页,再去微信點(diǎn)擊返回自己的app,其實(shí)我也是這么測(cè)試的锨能,但是只要離開微信,返回自己app和留在微信的按鈕就會(huì)消失,所以微信返回其他的app是不需要在白名單添加其他app的 URL Scheme址遇。

測(cè)試的demo

到此結(jié)束這篇文章叔收,希望你能夠通過(guò)這篇博客徹底知道 URL Scheme作用和白名單是什么以及如何在app之間跳轉(zhuǎn)。有不理解的地方寫下你的評(píng)論傲隶,看到后我會(huì)第一時(shí)間回答。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窃页,一起剝皮案震驚了整個(gè)濱河市跺株,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脖卖,老刑警劉巖乒省,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異畦木,居然都是意外死亡袖扛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門十籍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛆封,“玉大人,你說(shuō)我怎么就攤上這事勾栗〔依椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵围俘,是天一觀的道長(zhǎng)砸讳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)界牡,這世上最難降的妖魔是什么簿寂? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宿亡,結(jié)果婚禮上常遂,老公的妹妹穿的比我還像新娘。我一直安慰自己挽荠,他們只是感情好烈钞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坤按,像睡著了一般毯欣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臭脓,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天酗钞,我揣著相機(jī)與錄音,去河邊找鬼。 笑死砚作,一個(gè)胖子當(dāng)著我的面吹牛窘奏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葫录,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼着裹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了米同?” 一聲冷哼從身側(cè)響起骇扇,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎面粮,沒(méi)想到半個(gè)月后少孝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熬苍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年稍走,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柴底。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婿脸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柄驻,到底是詐尸還是另有隱情盖淡,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布凿歼,位于F島的核電站褪迟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏答憔。R本人自食惡果不足惜味赃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虐拓。 院中可真熱鬧心俗,春花似錦、人聲如沸蓉驹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)态兴。三九已至狠持,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻润,已是汗流浹背喘垂。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工甜刻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人正勒。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓得院,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親章贞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祥绞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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