Facebook InstantGame API v4.1 說明

如果您需要 SDK 對應(yīng)的 jsd.ts 文件舰始,可以在這個 Github 倉下載 FBInstantGameDTS

FBInstant

Instant Games SDK 的頂級命名空間.

player

包含當(dāng)前用戶信息的一些方法和屬性

getID()

玩家的唯一標(biāo)識ID氛堕。一個Facebook用戶的id是不會改變的挽铁。同一個Facebook的用戶双戳,在不同的游戲里會有不用的id益楼。
注意择葡,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。

代碼示例:

// 該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var playerID = FBInstant.player.getID();

返回值:string击你,用戶的唯一ID

getSignedPlayerInfoAsync( )

獲取玩家的唯一ID和一個簽名玉组,簽名用來驗(yàn)證該 ID 來自 Facebook ,沒有被篡改丁侄。該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里惯雳。

參數(shù)

? requestPayload String 一個由開發(fā)者指定的信息,包含在已簽名的響應(yīng)消息里鸿摇。

代碼示例

該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里石景。
// resolves.
FBInstant.player.getSignedPlayerInfoAsync('my_metadata')
  .then(function (result) {
    // ID和簽名的驗(yàn)證應(yīng)放在服務(wù)器端處理。
    SendToMyServer(
      result.getPlayerID(), // 和 FBInstant.player.getID() 相同
      result.getSignature(),
      'GAIN_COINS',
      100);
  });

? Throws INVALID_PARAM

? Throws NETWORK_FAILURE

? Throws CLIENT_REQUIRES_UPDATE

返回值: Promise<SignedPlayerInfo> 一個帶有 signedplayerinfo 對象的 Promise.

getName()

用戶的名字拙吉。
注意潮孽,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。

代碼示例:

//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里筷黔。
var playerName = FBInstant.player.getName();

返回值:string往史,用戶的名字

getPhoto()

用戶頭像的鏈接地址。頭像的圖片始終為正方形佛舱,尺寸最小為200x200椎例。建議在游戲中使用的時候挨决,先將圖像縮放到所需的大小。
注意订歪,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里脖祈。
警告:由于跨域的問題,在 canvas 里使用圖片會有問題刷晋。要防止此情況盖高,請將圖像的 cross-origin 屬性設(shè)置為 "anonymous"

代碼示例:

//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。
var playerImage = new Image();
playerImage.crossOrigin = 'anonymous';
playerImage.src = FBInstant.player.getPhoto();

返回值:string眼虱,用戶的頭像的鏈接地址

getDataAsync()

取回當(dāng)前用戶在FB平臺儲存的數(shù)據(jù)

參數(shù)
? keys Array <String> 一個用來檢索數(shù)據(jù)的key的數(shù)組

代碼示例:

FBInstant.player
  .getDataAsync(['achievements', 'currentLife'])
  .then(function(data) {
     console.log('data is loaded');
     var achievements = data['achievements'];
     var currentLife = data['currentLife'];
});
  • Throws INVALID_PARAM
  • Throws NETWORK_FAILURE
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise <Object> 如果發(fā)送的Key存在喻奥,則通過Promise 返回儲存的數(shù)據(jù)對象.

setDataAsync()

把當(dāng)前用戶的數(shù)據(jù)儲存在FB平臺上。每個用戶可以在每個游戲里儲存1MB的數(shù)據(jù)蒙幻。
代碼示例:
參數(shù)
? data Object 需要儲存的數(shù)據(jù)映凳,包含key-value的數(shù)據(jù)對象胆筒。對象只能包含可以序列化的值邮破,任何不可序列化的值都會導(dǎo)致儲存失敗。

代碼示例:

FBInstant.player
  .setDataAsync({
    achievements: ['medal1', 'medal2', 'medal3'],
    currentLife: 300,
  })
  .then(function() {
    console.log('data is set');
});
  • Throws INVALID_PARAM
  • Throws NETWORK_FAILURE
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise 當(dāng)數(shù)據(jù)提交了以后會返回一個 promise仆救。 注意:這個promise 并不意味著這個數(shù)據(jù)已經(jīng)被成功保存抒和。它只是驗(yàn)證了數(shù)據(jù)的有效性,并且隨后會被保存彤蔽〈菝В可以保證的是,在調(diào)用 player.getDataAsync 方法時顿痪,這些設(shè)定的數(shù)據(jù)會生效镊辕。

flushDataAsync()

將用戶的數(shù)據(jù)立刻更新到云存儲。這個方法是開銷很大蚁袭,應(yīng)該主要用于關(guān)鍵的更改征懈。非關(guān)鍵的更改應(yīng)該依賴于平臺來將它們儲存到后臺。注意: 當(dāng)該方法未完成時揩悄,調(diào)用 player.setDataAsync 這個方法會被拒絕.

代碼示例:

FBInstant.player
  .setDataAsync({
    achievements: ['medal1', 'medal2', 'medal3'],
    currentLife: 300,
  })
  .then(FBInstant.player.flushDataAsync)
  .then(function() {
    console.log('Data persisted to FB!');
});
  • Throws INVALID_PARAM
  • Throws NETWORK_FAILURE
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise 數(shù)據(jù)儲存成功會返回一個promise卖哎,如果保存失敗則返回拒絕

getConnectedPlayersAsync()

獲取和當(dāng)前玩家有關(guān)聯(lián)的玩家列表信息(即好友列表)。

代碼示例:

var connectedPlayers = FBInstant.player.getConnectedPlayersAsync()
  .then(function(players) {
    console.log(players.map(function(player) {
      return {
        id: player.getID(),
        name: player.getName(),
      }
    }));
  });
// [{id: '123456789', name: 'Paul Atreides'}, {id: '987654321', name: 'Duncan Idaho'}]

  • Throws NETWORK_FAILURE
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise <Object<ConnectedPlayer>返回一個promise删性,包含了關(guān)聯(lián)用戶對象的數(shù)據(jù)

context

包含當(dāng)前游戲環(huán)境的一些方法和屬性

getID()

當(dāng)前游戲來源的唯一id亏娜。它代表了當(dāng)前游戲是在哪玩的(例如:是在 messenger 的對話里還是 facebook 的網(wǎng)頁里)。如果是在獨(dú)立頁面玩的游戲蹬挺,這個id值為 null维贺。只有在 FBInstant.startGameAsync 方法被調(diào)用后,這個結(jié)果才能保證是正確的巴帮。

代碼示例:

//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里溯泣。
var contextID = FBInstant.context.getID();

返回值 string群发,當(dāng)前游戲環(huán)境的id。

getType()

當(dāng)前游戲的環(huán)境類型发乔。

代碼示例:

//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里熟妓。
var contextType = FBInstant.context.getType();

返回值 ("POST" | "THREAD" | "GROUP" | "SOLO") 當(dāng)前游戲環(huán)境的類型。

isSizeBetween()

這個方法決定了當(dāng)前游戲環(huán)境中游戲參與者的數(shù)量是否介于指定的最小值和最大值之間栏尚。
如果其中一個邊界為空起愈,則只對另一個邊界進(jìn)行檢查。在當(dāng)前游戲中第一次調(diào)用后译仗,以后永遠(yuǎn)返回這個結(jié)果抬虽,不管參數(shù)如何改變。直到游戲環(huán)境發(fā)生改變纵菌,才會重置查詢結(jié)果阐污。

參數(shù)
? minSize number 要查詢的環(huán)境值的最小值。
? maxSize number 要查詢的環(huán)境值的最大值咱圆。

代碼示例:

console.log(FBInstant.context.isSizeBetween(3, 5)); //(Context size = 4)
// {answer: true, minSize: 3, maxSize: 5}
console.log(FBInstant.context.isSizeBetween(5, 7)); //(Context size = 4)
// {answer: false, minSize: 5, maxSize: 7}
console.log(FBInstant.context.isSizeBetween(2, 10));// (Context size = 3)
// {answer: true, minSize: 2, maxSize: 10}
console.log(FBInstant.context.isSizeBetween(4, 8));// (Still in same context)
// {answer: true, minSize: 2, maxSize: 10}
console.log(FBInstant.context.isSizeBetween(3, null)); //(Context size = 4)
// {answer: true, minSize: 3, maxSize: null}
console.log(FBInstant.context.isSizeBetween(null, 3)); (Context size = 4)
// {answer: false, minSize: null, maxSize: 3}
console.log(FBInstant.context.isSizeBetween("test", 5)); (Context size = 4)
// null
console.log(FBInstant.context.isSizeBetween(0, 100)); (Context size = null)
// null

返回值 ContextSizeResponse笛辟。

switchAsync()

請求切換到指定的游戲環(huán)境。如果玩家沒有進(jìn)入該環(huán)境的權(quán)限序苏,或者玩家沒有提供進(jìn)入游戲的許可手幢,該方法都會被拒絕。如果成功切換到指定游戲環(huán)境忱详,將會返回一個 promise.

參數(shù)

? id string 想要進(jìn)入的環(huán)境ID

代碼示例:

console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
  .switchAsync('1234567890')
  .then(function() {
    console.log(FBInstant.context.getID());
    // 1234567890
  });
  • Throws INVALID_PARAM
  • Throws SAME_CONTEXT
  • Throws NETWORK_FAILURE
  • Throws USER_INPUT
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise 當(dāng)游戲切換到指定環(huán)境围来,返回一個 promise,失敗會被拒絕匈睁。

chooseAsync()

為玩家打開一個游戲環(huán)境選擇列表监透。如果玩家選擇了一個可用的環(huán)境,客戶端將嘗試切到那個環(huán)境航唆,如果成功胀蛮,返回 resolve。如果玩家退出菜單佛点,或者客戶端未能切換到新環(huán)境醇滥,返回 reject.

參數(shù)

? options Object 提供可選擇的環(huán)境對象。

? options.filters Array<ContextFilter>設(shè)置一組應(yīng)用于環(huán)境對象的過濾器.

? options.maxSize number 理想情況下超营,環(huán)境對象的最大值

? options.minSize number 理想情況下鸳玩,環(huán)境對象的最小值

代碼示例:

console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
  .chooseAsync()
  .then(function() {
    console.log(FBInstant.context.getID());
    // 1234567890
  });
console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
  .chooseAsync({
    filters: ['NEW_CONTEXT_ONLY'],
    minSize: 3,
  })
  .then(function() {
    console.log(FBInstant.context.getID());
    // 1234567890
  });
  • Throws INVALID_PARAM
  • Throws SAME_CONTEXT
  • Throws NETWORK_FAILURE
  • Throws USER_INPUT
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise 當(dāng)游戲切換到指定環(huán)境,返回一個 promise演闭,失敗會返回reject(例如不跟,用戶取消了對話框)

createAsync()

在當(dāng)前玩家和指定玩家之間,嘗試創(chuàng)建或切換一個環(huán)境米碰。如果指定玩家不能玩這個游戲窝革,或者玩家決絕進(jìn)入新環(huán)境购城,則返回 recject。如果成功切換到新游戲的環(huán)境時虐译,則返回 resolve瘪板。

參數(shù)

? playerID string 用戶的 ID

代碼示例:

console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
  .createAsync('12345678')
  .then(function() {
    console.log(FBInstant.context.getID());
    // 5544332211
  });
  • Throws INVALID_PARAM
  • Throws SAME_CONTEXT
  • Throws NETWORK_FAILURE
  • Throws USER_INPUT
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE

返回值 Promise 當(dāng)游戲成功切換到指定環(huán)境,返回一個 promise 的 resolve漆诽,失敗會返回reject

getPlayersAsync()

獲取當(dāng)前環(huán)境中正在玩游戲的玩家列表侮攀,它可能包含當(dāng)前玩家的信息。

代碼示例:

var contextPlayers = FBInstant.context.getPlayersAsync()
  .then(function(players) {
    console.log(players.map(function(player) {
      return {
        id: player.getID(),
        name: player.getName(),
      }
    }));
  });
// [{id: '123456789', name: 'Luke'}, {id: '987654321', name: 'Leia'}]
  • Throws NETWORK_FAILURE
  • Throws CLIENT_REQUIRES_UPDATE
  • Throws INVALID_OPERATION

返回 Promise <Array<ContextPlayer>>

getLocale()

獲取用戶的地域信息厢拭。 例如 zh_CN兰英、 en_US
全部的地域信息數(shù)據(jù),請看此鏈接 https://www.facebook.com/translations/FacebookLocales.xml 供鸠。使用這個值用來確定游戲中應(yīng)該顯示那種語言畦贸。
該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。

代碼示例:

// 該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var locale = FBInstant.getLocale(); // 'en_US'

返回值 string楞捂,當(dāng)前地域信息薄坏。

getPlatform()

當(dāng)前游戲運(yùn)行在哪個平臺。該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里

代碼示例:

該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var platform = FBInstant.getPlatform(); // 'IOS'

返回值 string泡一,當(dāng)前游戲運(yùn)行的平臺("IOS" | "ANDROID" | "WEB" | "MOBILE_WEB")

getSDKVersion()

獲取SDK的版本號,用字符串來表示觅廓。

代碼示例:

var sdkVersion = FBInstant.getSDKVersion(); // '4.1'

返回值 string杈绸,SDK 的版本號帖蔓。

initializeAsync()

初始化SDK,應(yīng)當(dāng)在所有其他的API使用前調(diào)用瞳脓。
代碼示例:

FBInstant.initializeAsync().then(function() {
  // 在初始化完成之前,下面這些屬性都是無法得到的埋酬。必須要放在這個回調(diào)方法里。
  var locale = FBInstant.getLocale(); // 'en_US'
  var platform = FBInstant.getPlatform(); // 'IOS'
  var sdkVersion = FBInstant.getSDKVersion(); // '4.1'
  var playerID = FBInstant.player.getID();
});
  • Throws INVALID_OPERATION

返回值 Promise當(dāng)sdk 初始化完成后會返回 promise

setLoadingProgress()

通知平臺游戲初始化資源加載的進(jìn)度

參數(shù)

? percentage number 0到100之間的數(shù)字

代碼示例:

FBInstant.setLoadingProgress(50); // 50%的資源被加載了

返回值 void

getSupportedAPIs()

提供當(dāng)前客戶端支持的 API 函數(shù)列表烧栋。

代碼示例:

//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
FBInstant.getSupportedAPIs();
// ['getLocale', 'initializeAsync', 'player.getID', 'context.getType', ...]

返回值 Array<string> 返回客戶端支持的 API 函數(shù)列表

getEntryPointData()

返回與游戲啟動的入口點(diǎn)相關(guān)的數(shù)據(jù)對象写妥。

對象的內(nèi)容是開發(fā)人員定義的审姓,并且可以在不同平臺的入口點(diǎn)觸發(fā)。在老的移動客戶端上會返回 null扎筒。如果特定的入口點(diǎn)沒有數(shù)據(jù)時,也會返回 null奥溺。

代碼示例:

//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
const entryPointData = FBInstant.getEntryPointData();

返回值 Object 與當(dāng)前入口點(diǎn)相關(guān)的數(shù)據(jù)骨宠。

setSessionData()

為當(dāng)前環(huán)境設(shè)置游戲的數(shù)據(jù)。
每當(dāng)游戲想要更新當(dāng)前會話的數(shù)據(jù)時壶唤,可以調(diào)用該方法棕所。
參數(shù)

? sessionData Object 一個任意的數(shù)據(jù)對象琳省,必須小于1000個字符

代碼示例:

FBInstant.setSessionData({coinsEarned: 10, eventsSeen: ['start', ...]});

返回值 void

startGameAsync()

這表明游戲已經(jīng)加載完資源,可以開始玩了击费。當(dāng)返回 promise 的 resolve 時桦他,環(huán)境信息將會更新。

代碼示例:

FBInstant.startGameAsync().then(function() {
  myGame.start();
});
  • Throws INVALID_PARAM
  • Throws CLIENT_REQUIRES_UPDATE
    返回值 Promise當(dāng)游戲應(yīng)當(dāng)開始玩的時候會返回 promise

shareAsync()

這將啟動一個對話框圆仔,讓用戶共享指定的內(nèi)容蔫劣,可能是一個 Messenger 里的消息,或者是用戶時間線上的一個帖子歪沃。一個blob數(shù)據(jù)可以附加在分享上嫌松,當(dāng)游戲通過分享啟動時豆瘫,可以通過 FBInstant.getEntryPointData() 方法獲取。這個數(shù)據(jù)必須少于1000個字符育灸。用戶可以選擇取消分享,或者關(guān)閉對話框儿子,但不論用戶是否真的分享了內(nèi)容砸喻,都會返回 promise 的 resolve。

參數(shù)

? payload SharePayload 要分享的內(nèi)容愉适,請看示例代碼

代碼示例:

FBInstant.shareAsync({
  intent: 'REQUEST',
  image: base64Picture,
  text: 'X is asking for your help!',
  data: { myReplayData: '...' },
}).then(function() {
  // 繼續(xù)游戲
});
  • Throws INVALID_PARAM
  • Throws NETWORK_FAILURE
  • Throws PENDING_REQUEST
  • Throws CLIENT_REQUIRES_UPDATE
  • Throws INVALID_OPERATION

返回值 Promise 不管分享成功或失敗维咸,都會返回 promise 的 resolve

updateAsync()

通知Facebook在游戲中發(fā)生的更新惠爽。這將暫時把控制權(quán)交給Facebook,而Facebook將決定根據(jù)更新的內(nèi)容來做什么租副。當(dāng)Facebook將控制權(quán)歸還給游戲時较性,將返回 promise 的 resolve/reject.

參數(shù)

? payload **CustomUpdatePayload ** 要更新的內(nèi)容

代碼示例:

//這將發(fā)送一個自定義更新两残。如果游戲是運(yùn)行在一個 messenger 的對話里,
//它將發(fā)送一條帶有圖文的消息到指定的對話里。
//如果其他用戶通過這條消息啟動了游戲着逐,
//這些游戲會話將可以通過 FBInstant.getEntryPointData() 方法獲取附加的 blob 數(shù)據(jù)耸别。 

FBInstant.updateAsync({
  action: 'CUSTOM',
  cta: 'Join The Fight',
  template:'join_fight',
  image: base64Picture,
  text: 'X just invaded Y\'s village!',
  data: { myReplayData: '...' },
  strategy: 'IMMEDIATE',
  notification: 'NO_PUSH',
}).then(function() {
  //當(dāng)消息發(fā)送后,關(guān)閉游戲
  FBInstant.quit();
});

** Throws INVALID_PARAM
** Throws PENDING_REQUEST
返回值 Promise 當(dāng)Facebook將控制權(quán)歸還給游戲時返回 promise

quit()

退出游戲

代碼示例:

FBInstant.quit();

返回值 void

logEvent()

使用 Facebook 的分析系統(tǒng)來記錄一個應(yīng)用的事件消息慈迈,更多細(xì)節(jié)請參見: https://developers.facebook.com/docs/javascript/reference/v2.8#app_events

參數(shù)

? eventName string 事件的名稱痒留。必須是2到40個字符,只能包含'_', '-', ' '和字母數(shù)字的字符匾效。

? valueToSum number 一個可選的數(shù)字恤磷,F(xiàn)B分析可以計算它。

? parameters Object 一個可選的對象魔策,它可以包含多達(dá)25個 key-value河胎,以記錄事件。key 必須是2-40個字符搁吓,只能包含'_', '-', ' '和字母數(shù)字的字符堕仔。 Value 必須少于100個字符晌区。

代碼示例:

var logged = FBInstant.logEvent(
  'my_custom_event',
  42,
  {custom_property: 'custom_value'},
);

返回值 CodeError 如果事件記錄失敗,返回錯誤信息恼五,否則返回 null.

onPause()

設(shè)置一個暫停事件觸發(fā)時調(diào)用的方法哭懈。
參數(shù)

? func Function 當(dāng)暫停事件觸發(fā)時調(diào)用的方法遣总。

返回值 void

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市容达,隨后出現(xiàn)的幾起案子花盐,更是在濱河造成了極大的恐慌,老刑警劉巖算芯,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也祠,死亡現(xiàn)場離奇詭異,居然都是意外死亡堪旧,警方通過查閱死者的電腦和手機(jī)淳梦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門昔字,熙熙樓的掌柜王于貴愁眉苦臉地迎上來作郭,“玉大人,你說我怎么就攤上這事蜘醋∮匠ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵胎食,是天一觀的道長厕怜。 經(jīng)常有香客問我累驮,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任置侍,我火速辦了婚禮,結(jié)果婚禮上杠输,老公的妹妹穿的比我還像新娘秕衙。我一直安慰自己据忘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布曼追。 她就那樣靜靜地躺著礼殊,像睡著了一般针史。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婚陪,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天近忙,我揣著相機(jī)與錄音智润,去河邊找鬼。 笑死锯玛,一個胖子當(dāng)著我的面吹牛兼蜈,可吹牛的內(nèi)容都是我干的为狸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼病曾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲫竞?” 一聲冷哼從身側(cè)響起逼蒙,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤是牢,失蹤者是張志新(化名)和其女友劉穎妖泄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊季,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罚渐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年荷并,在試婚紗的時候發(fā)現(xiàn)自己被綠了源织。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缘屹,死狀恐怖侠仇,靈堂內(nèi)的尸體忽然破棺而出逻炊,到底是詐尸還是另有隱情,我是刑警寧澤豹休,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布桨吊,位于F島的核電站屏积,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏姥卢。R本人自食惡果不足惜渣聚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一奕枝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧症歇,春花似錦谭梗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽图柏。三九已至,卻和暖如春难咕,著一層夾襖步出監(jiān)牢的瞬間距辆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工爆土, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留步势,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓盅抚,卻偏偏與公主長得像妄均,于是被迫代替她去往敵國和親哪自。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

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