facebook instant game 發(fā)布指南-API 參考文檔 v5.0

FBInstant

小游戲 SDK 的頂級(jí)命名空間。


player

包含與當(dāng)前玩家相關(guān)的功能和屬性厅目。


getID( )

玩家的唯一標(biāo)識(shí)妖碉。Facebook 用戶的玩家編號(hào)將保持不變,且僅限于特定游戲范圍审轮。這意味著同一個(gè)用戶在不同的游戲中有不同的玩家編號(hào)肥哎。僅當(dāng) FBInstant.initializeAsync() 被解析后才應(yīng)調(diào)用此函數(shù)辽俗。

示例


// This function should be called after FBInstant.initializeAsync()

// resolves.

var playerID = FBInstant.player.getID();

返回字符串玩家的唯一標(biāo)識(shí)篡诽。


getSignedPlayerInfoAsync( )

獲取玩家的唯一標(biāo)識(shí)和簽名崖飘,簽名用于驗(yàn)證標(biāo)識(shí)確實(shí)來(lái)自 Facebook,且沒(méi)有被篡改杈女。僅當(dāng) FBInstant.initializeAsync() 被解析后才應(yīng)調(diào)用此函數(shù)朱浴。

參數(shù)

?????? requestPayload字符串開(kāi)發(fā)者指定的包含于已簽名響應(yīng)中的負(fù)載达椰。

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

FBInstant.player.getSignedPlayerInfoAsync('my_metadata')

????????? .then(function (result) {? ?

????????????? // The verification of the ID and signature should happen on server side.? ??????????????? SendToMyServer(

? ? ? ? ? ? ? ? ? ? ? ? ? result.getPlayerID(), // same value as FBInstant.player.getID()? ? ????????????????????????? result.getSignature(),? ? ?

????????????????????????????? 'GAIN_COINS',? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100);

???????????? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise<SignedPlayerInfo>#signedplayerinfo對(duì)象解析的 promise翰蠢。


getName( )

經(jīng)本地化顯示的玩家姓名。僅當(dāng) FBInstant.startGameAsync() 被解析后才應(yīng)調(diào)用此函數(shù)啰劲。

示例

// This function should be called after FBInstant.startGameAsync()

// resolves.

var playerName = FBInstant.player.getName();

返回字符串梁沧?經(jīng)本地化顯示的玩家姓名。


getPhoto( )

玩家公開(kāi)頭像的網(wǎng)址蝇裤。此照片始終為正方形廷支,尺寸至少為 200x200 像素。在游戲中顯示時(shí)栓辜,確切的尺寸可能會(huì)有所變化酥泞。建議始終在顯示之前將圖片調(diào)整為需要的尺寸。對(duì)應(yīng)的值將始終為 null啃憎,直至 FBInstant.startGameAsync() 被解析芝囤。

警告:由于使用 CORS 機(jī)制,在游戲 Canvas 中使用這些照片會(huì)導(dǎo)致照片損壞辛萍,這有礙于提取 Canvas 數(shù)據(jù)悯姊。為防止出現(xiàn)這種情況,應(yīng)將您使用的圖片的 cross-origin 屬性設(shè)置為“anonymous”贩毕。

示例

var playerImage = new Image();

playerImage.crossOrigin = 'anonymous';

// This function should be called after FBInstant.startGameAsync()

// resolves.

playerImage.src = FBInstant.player.getPhoto();

返回字符串悯许?玩家公開(kāi)頭像的網(wǎng)址。


getDataAsync( )

從指定的云存儲(chǔ)中檢索當(dāng)前玩家的數(shù)據(jù)辉阶。

參數(shù)

keys數(shù)組<字符串>唯一鍵數(shù)組先壕,數(shù)據(jù)檢索將針對(duì)這些鍵展開(kāi)。

示例

FBInstant.player

? .getDataAsync(['achievements', 'currentLife'])?

? .then(function(data) {? ?

?????? console.log('data is loaded');??

?????? var achievements = data['achievements'];??

?????? var currentLife = data['currentLife'];

??? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise<對(duì)象>此 promise 將在獲得包含下列信息的對(duì)象時(shí)被解析:輸入數(shù)組中指定的每個(gè)鍵的當(dāng)前鍵值對(duì)(如存在)谆甜。


setDataAsync( )

設(shè)置要保存到指定云存儲(chǔ)的當(dāng)前玩家的數(shù)據(jù)垃僚。對(duì)于每個(gè)獨(dú)立玩家,游戲最多可存儲(chǔ) 1MB 的數(shù)據(jù)规辱。

參數(shù)

data對(duì)象此對(duì)象包含應(yīng)該保存到云存儲(chǔ)的一組鍵值對(duì)谆棺。對(duì)象必須僅包含可序列化的值 — 任何不可序列化的值都會(huì)導(dǎo)致整個(gè)修改被拒絕。

示例

FBInstant.player

? .setDataAsync({? ? achievements: ['medal1', 'medal2', 'medal3'],? ?

?? currentLife: 300,

?? })

?? .then(function() {? ?

??????? console.log('data is set');

??? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在輸入值設(shè)定時(shí)被解析罕袋。注意:promise 被解析并不一定意味著輸入已被存儲(chǔ)改淑,而是這意味著相關(guān)數(shù)據(jù)有效并已安排要被存儲(chǔ)碍岔。這還能保證設(shè)置的所有值現(xiàn)在可在 player.getDataAsync 中使用。


flushDataAsync( )

立即將玩家數(shù)據(jù)的任何更改刷新到指定的云存儲(chǔ)中朵夏。此函數(shù)的調(diào)用成本較高蔼啦,應(yīng)主要用于需要立即存儲(chǔ)并告知游戲的重要更改。非重要更改應(yīng)依賴于開(kāi)放平臺(tái)在后臺(tái)進(jìn)行存儲(chǔ)仰猖。注意:當(dāng)此函數(shù)的結(jié)果待定時(shí)询吴,player.setDataAsync 調(diào)用將被拒絕。

示例

FBInstant.player

? .setDataAsync({? ?

?????? achievements: ['medal1', 'medal2', 'medal3'],??

?????? currentLife: 300,

?? })

??? .then(FBInstant.player.flushDataAsync)

??? .then(function() {??

??????? console.log('Data persisted to FB!');

?? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在更改保存成功時(shí)被解析亮元,在更改保存失敗時(shí)被拒絕。


getStatsAsync( )

從指定云存儲(chǔ)檢索當(dāng)前玩家的統(tǒng)計(jì)數(shù)據(jù)唠摹。

參數(shù)

keys數(shù)組<字符串>爆捞?唯一鍵數(shù)組(可選),針對(duì)這些鍵檢索統(tǒng)計(jì)數(shù)據(jù)勾拉。如果調(diào)用函數(shù)時(shí)沒(méi)有設(shè)置此參數(shù)煮甥,則會(huì)提取所有統(tǒng)計(jì)數(shù)據(jù)。

示例

FBInstant.player

? .getStatsAsync(['level', 'zombiesSlain'])

? .then(function(stats)) {??

????? console.log('stats are loaded');??

????? var level = data['level'];? ?

????? var zombiesSlain = data['zombiesSlain'];

?? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise<對(duì)象>此 promise 將在獲得包含下列信息的對(duì)象時(shí)被解析:輸入數(shù)組中指定的每個(gè)鍵的當(dāng)前鍵值對(duì)(如存在)藕赞。


setStatsAsync( )

設(shè)置要保存到指定云存儲(chǔ)的當(dāng)前玩家的統(tǒng)計(jì)數(shù)據(jù)成肘。

參數(shù)

stats對(duì)象此對(duì)象包含應(yīng)作為統(tǒng)計(jì)數(shù)據(jù)保存到云存儲(chǔ)的鍵值對(duì),能以各種方式顯示或使用這些數(shù)據(jù)以提高玩家參與度斧蜕。對(duì)象必須僅包含數(shù)值双霍,任何非數(shù)值會(huì)導(dǎo)致整個(gè)修改被拒絕。

示例

FBInstant.player

? .setStatsAsync({??

????? level: 5,? ?

????? zombiesSlain: 27,

?? })

?? .then(function() {??

?????? console.log('data is set');

??? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在輸入值設(shè)定時(shí)被解析批销。注意:promise 被解析并不一定意味著輸入已被存儲(chǔ)洒闸,而是這意味著相關(guān)數(shù)據(jù)經(jīng)過(guò)驗(yàn)證并已安排要被存儲(chǔ)。這還能保證設(shè)置的所有值現(xiàn)在可在 player.getStatsAsync 中使用均芽。


incrementStatsAsync( )

保存到指定云存儲(chǔ)的當(dāng)前玩家的增量統(tǒng)計(jì)數(shù)據(jù)丘逸。

參數(shù)

increments對(duì)象此對(duì)象包含一組鍵值對(duì),這些鍵值對(duì)表示云存儲(chǔ)中每個(gè)統(tǒng)計(jì)數(shù)據(jù)的增量是多少掀宋。對(duì)象必須僅包含數(shù)值深纲,任何非數(shù)值會(huì)導(dǎo)致整個(gè)修改被拒絕。

示例

FBInstant.player

? .incrementStatsAsync({? ?

???? level: 1,? ?

???? zombiesSlain: 17,? ?

???? rank: -1,

?? })

?? .then(function(stats)) {??

???? console.log('increments have been made! New values');??

???? var level = data['level'];? ?

???? var zombiesSlain = data['zombiesSlain'];

??? });

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise<對(duì)象>此 promise 將在獲得包含下列信息的對(duì)象時(shí)被解析:輸入字典中指定的每個(gè)鍵的更新鍵值對(duì)劲妙。注意:解析 promise 并不一定意味著更改已被存儲(chǔ)湃鹊,而是意味著增量有效且已安排要被執(zhí)行。這還能保證增加的所有值現(xiàn)在可在 player.getStatsAsync 中使用镣奋。


getConnectedPlayersAsync( )

提取 ConnectedPlayer 對(duì)象的數(shù)組涛舍,這些對(duì)象包含與當(dāng)前玩家關(guān)聯(lián)的玩家的信息。

注意:只有當(dāng) FBInstant.startGameAsync() 被解析時(shí)唆途,此 promise 才會(huì)解析富雅。

示例

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'}]

拋出NETWORK_FAILURE

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise<數(shù)組<ConnectedPlayer>>此 promise 將在獲得關(guān)聯(lián)玩家對(duì)象列表時(shí)被解析掸驱。


context

包含與當(dāng)前游戲環(huán)境相關(guān)的功能和屬性。


getID( )

當(dāng)前游戲環(huán)境的唯一標(biāo)識(shí)没佑。這表示玩游戲的特定環(huán)境(例如:特定的Messenger 對(duì)話或 Facebook 帖子)毕贼。如果用戶在獨(dú)立環(huán)境中玩游戲,則此標(biāo)識(shí)將為 null蛤奢。僅當(dāng) FBInstant.startGameAsync 被解析后才應(yīng)調(diào)用此函數(shù)鬼癣。

示例

// This function should be called after FBInstant.startGameAsync()

// resolves.

var contextID = FBInstant.context.getID();

返回字符串當(dāng)前游戲環(huán)境的唯一標(biāo)識(shí)啤贩。


getType( )

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

僅當(dāng) FBInstant.startGameAsync 被解析后才應(yīng)調(diào)用此函數(shù)。

示例

// This function should be called after FBInstant.startGameAsync()

// resolves.

var contextType = FBInstant.context.getType();

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


isSizeBetween( )

此函數(shù)用于確定加入當(dāng)前游戲環(huán)境的玩家數(shù)量是否在給定的最小值和最大值之間(包括最小值和最大值)章郁。僅當(dāng)其中一個(gè)邊界值為 null 時(shí)才會(huì)根據(jù)另一個(gè)邊界值進(jìn)行檢查。在特定的游戲會(huì)話中志衍,此函數(shù)始終會(huì)返回某環(huán)境內(nèi)發(fā)出的第一個(gè)調(diào)用的最初結(jié)果暖庄。后續(xù)調(diào)用(無(wú)論參數(shù)是什么)將返回原始查詢的答案,除非游戲環(huán)境發(fā)生變化且查詢結(jié)果被重置楼肪。

僅當(dāng) FBInstant.startGameAsync 被解析后才應(yīng)調(diào)用此函數(shù)培廓。

如果提供的一個(gè)或兩個(gè)參數(shù)無(wú)效,我們沒(méi)有適合當(dāng)前游戲環(huán)境的玩家數(shù)量春叫,或者 API 在 startGameAsync() 解析之前被調(diào)用肩钠,

此參數(shù)都會(huì)為 null。

參數(shù)

minSize數(shù)字暂殖?環(huán)境規(guī)模查詢的最小邊界值蔬将。

minSize數(shù)字環(huán)境規(guī)模查詢的最大邊界值央星。

maxSize數(shù)字霞怀?

示例

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( )

請(qǐng)求切換到指定環(huán)境莉给。如果玩家沒(méi)有進(jìn)入該環(huán)境的權(quán)限毙石,或玩家未向游戲提供進(jìn)入該環(huán)境的權(quán)限,請(qǐng)求將被拒絕颓遏。promise 將在游戲切換到指定環(huán)境時(shí)被解析徐矩。

參數(shù)

id字符串目標(biāo)環(huán)境的編號(hào)。

示例

console.log(FBInstant.context.getID());

// 1122334455

FBInstant.context

?? .switchAsync('1234567890')

?? .then(function() {? ?

????? console.log(FBInstant.context.getID());??

????? // 1234567890?

?? });

拋出INVALID_PARAM

拋出SAME_CONTEXT

拋出NETWORK_FAILURE

拋出USER_INPUT

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在游戲切換到指定環(huán)境時(shí)被解析叁幢,在切換失敗時(shí)被拒絕滤灯。


chooseAsync( )

為玩家打開(kāi)一個(gè)環(huán)境選擇對(duì)話框。如果玩家選擇可用的環(huán)境,客戶端將嘗試切換到這個(gè)環(huán)境鳞骤,并在成功時(shí)解析窒百。而如果玩家退出菜單或客戶端未能切換到新環(huán)境,此函數(shù)將被拒絕豫尽。

參數(shù)

options對(duì)象篙梢?此對(duì)象用于指定應(yīng)提供的環(huán)境選項(xiàng)。

options.filters數(shù)組<ContextFilter>美旧?適用于環(huán)境推薦的一組篩選條件渤滞。

options.maxSize數(shù)字在理想情況下榴嗅,推薦環(huán)境應(yīng)有的最大玩家數(shù)量妄呕。

options.minSize數(shù)字在理想情況下嗽测,推薦環(huán)境應(yīng)有的最小玩家數(shù)量绪励。

示例

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?

?? });

拋出INVALID_PARAM

拋出SAME_CONTEXT

拋出NETWORK_FAILURE

拋出USER_INPUT

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在游戲切換到用戶選擇的環(huán)境時(shí)被解析。否則此 promise 將被拒絕(例如用戶退出對(duì)話框)论咏。


createAsync( )

嘗試在指定玩家和當(dāng)前玩家之間創(chuàng)建環(huán)境或切換環(huán)境。如果列出的玩家不是當(dāng)前玩家的關(guān)聯(lián)玩家颁井,或玩家未提供進(jìn)入新環(huán)境的權(quán)限厅贪,則返回的 promise 將被拒絕。當(dāng)游戲切換到新環(huán)境時(shí)雅宾,promise 將被解析养涮。

參數(shù)

playerID字符串玩家的編號(hào)

示例

console.log(FBInstant.context.getID());

// 1122334455

FBInstant.context

?? .createAsync('12345678')?

?? .then(function() {? ?

????? console.log(FBInstant.context.getID());? ?

????? // 5544332211?

?? });

拋出INVALID_PARAM

拋出SAME_CONTEXT

拋出NETWORK_FAILURE

拋出USER_INPUT

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在游戲切換到新環(huán)境時(shí)被解析,在切換失敗時(shí)被拒絕眉抬。


getPlayersAsync( )

獲取#contextplayer對(duì)象的數(shù)組贯吓,其中包含與當(dāng)前環(huán)境相關(guān)的活躍玩家(在過(guò)去 90 天內(nèi)玩過(guò)游戲的用戶)的信息。這可能包含當(dāng)前玩家蜀变。

注意:只有當(dāng) FBInstant.startGameAsync() 被解析時(shí)悄谐,此 promise 才會(huì)解析。

示例

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'}]

拋出NETWORK_FAILURE

拋出CLIENT_UNSUPPORTED_OPERATION

拋出INVALID_OPERATION

返回Promise<數(shù)組<ContextPlayer>>


getLocale( )

當(dāng)前的語(yǔ)言設(shè)置库北。根據(jù)這一結(jié)果確定當(dāng)前的游戲應(yīng)本地化為哪種語(yǔ)言爬舰。在 FBInstant.startGameAsync() 被解析之前,對(duì)應(yīng)的值將不準(zhǔn)確寒瓦。

示例

// This function should be called after FBInstant.startGameAsync()

// resolves.

var locale = FBInstant.getLocale(); // 'en_US'

返回字符串间唉?當(dāng)前的語(yǔ)言設(shè)置坯临。


getPlatform( )

當(dāng)前運(yùn)行游戲的平臺(tái)。對(duì)應(yīng)的值將始終為 null,直至 FBInstant.initializeAsync() 被解析蝗锥。

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

var platform = FBInstant.getPlatform(); // 'IOS'

返回平臺(tái)饱狂?


getSDKVersion( )

表示此 SDK 版本的字符串。

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

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

返回字符串SDK 版本。


initializeAsync( )

初始化 SDK 庫(kù)皆刺。應(yīng)在調(diào)用其他任何 SDK 函數(shù)之前調(diào)用此函數(shù)。

示例

FBInstant.initializeAsync().then(function() {

??? // Many properties will be null until the initialization completes.?

?? // This is a good place to fetch them:?

? var locale = FBInstant.getLocale(); // 'en_US'?

? var platform = FBInstant.getPlatform(); // 'IOS'?

? var sdkVersion = FBInstant.getSDKVersion(); // '3.0'?

? var playerID = FBInstant.player.getID();

});

拋出INVALID_OPERATION

返回Promise此 promise 將在 SDK 可以使用時(shí)被解析官还。


setLoadingProgress( )

報(bào)告游戲的初始加載進(jìn)度芹橡。

參數(shù)

percentage數(shù)字介于 0 和 100 之間的數(shù)字。

示例

FBInstant.setLoadingProgress(50); // Assets are 50% loaded

返回void


getSupportedAPIs( )

提供客戶端支持的 API 函數(shù)的列表望伦。

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

FBInstant.getSupportedAPIs();

// ['getLocale', 'initializeAsync', 'player.getID', 'context.getType', ...]

返回數(shù)組<字符串>客戶端顯式支持的 API 函數(shù)列表林说。


getEntryPointData( )

返回與啟動(dòng)游戲的入口點(diǎn)相關(guān)的任何數(shù)據(jù)對(duì)象。

對(duì)象內(nèi)容由開(kāi)發(fā)者定義屯伞,可通過(guò)不同平臺(tái)的入口點(diǎn)觸發(fā)腿箩。對(duì)于較舊版本的移動(dòng)客戶端,以及沒(méi)有與特定入口點(diǎn)相關(guān)的數(shù)據(jù)時(shí)劣摇,

此函數(shù)會(huì)返回 null珠移。

僅當(dāng) FBInstant.startGameAsync() 被解析后才應(yīng)調(diào)用此函數(shù)。

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

const entryPointData = FBInstant.getEntryPointData();

返回對(duì)象末融?與當(dāng)前入口點(diǎn)相關(guān)的數(shù)據(jù)钧惧。


getEntryPointAsync( )

返回啟動(dòng)游戲的入口點(diǎn)

示例

// This function should be called after FBInstant.initializeAsync()

// resolves.

FBInstant.getEntryPointAsync().then(entrypoint => console.log(entrypoint));

// 'admin_message'

返回字符串用戶啟動(dòng)游戲時(shí)所在的入口點(diǎn)的名稱


setSessionData( )

為當(dāng)前環(huán)境設(shè)置與單個(gè)游戲會(huì)話相關(guān)的數(shù)據(jù)。

當(dāng)游戲需要更新當(dāng)前的會(huì)話數(shù)據(jù)時(shí)勾习,應(yīng)調(diào)用此函數(shù)浓瞪。此會(huì)話數(shù)據(jù)可用于填充各種負(fù)載,如玩游戲 webhook巧婶。

參數(shù)

sessionData對(duì)象一個(gè)隨機(jī)數(shù)據(jù)對(duì)象乾颁,轉(zhuǎn)變?yōu)樽址螅仨毿∮诨虻扔?1000 個(gè)字符艺栈。

示例

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

返回void


startGameAsync( )

表示游戲已完成初始加載英岭,并準(zhǔn)備就緒可以開(kāi)始游戲。當(dāng)返回的 promise 被解析時(shí)湿右,環(huán)境信息即為最新诅妹。

示例

FBInstant.startGameAsync().then(function() {?

??? myGame.start();

});

拋出INVALID_PARAM

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在游戲應(yīng)該啟動(dòng)時(shí)被解析。


shareAsync( )

此函數(shù)會(huì)調(diào)用一個(gè)對(duì)話框毅人,讓用戶以下列方式分享指定的內(nèi)容:在 Messenger中發(fā)送消息漾唉,或在用戶時(shí)間線上發(fā)布帖子⊙咚可以在分享中添加數(shù)據(jù)塊赵刑,通過(guò)此次分享啟動(dòng)的每個(gè)游戲會(huì)話都可以通過(guò) FBInstant.getEntryPointData() 訪問(wèn)此數(shù)據(jù)塊。轉(zhuǎn)變?yōu)樽址畷r(shí)场刑,此數(shù)據(jù)必須小于或等于 1000 個(gè)字符般此。用戶可以選擇取消分享操作和關(guān)閉對(duì)話框蚪战,但無(wú)論用戶實(shí)際是否分享了內(nèi)容,返回的 promise 都將在對(duì)話框關(guān)閉時(shí)解析铐懊。

參數(shù)

payloadSharePayload邀桑,指定要分享的內(nèi)容。詳情請(qǐng)參閱示例科乎。

示例

FBInstant.shareAsync({?

???? intent: 'REQUEST',?

???? image: base64Picture,?

???? text: 'X is asking for your help!',?

??? data: { myReplayData: '...' },

}).then(function() {?

?? // continue with the game.

});

拋出INVALID_PARAM

拋出NETWORK_FAILURE

拋出PENDING_REQUEST

拋出CLIENT_UNSUPPORTED_OPERATION

拋出INVALID_OPERATION

返回Promise此 promise 將在分享完成或取消時(shí)被解析壁畸。


updateAsync( )

向 Facebook 通知游戲內(nèi)發(fā)生的更新。這會(huì)暫時(shí)將控制權(quán)移交給 Facebook茅茂,且 Facebook 將確定要根據(jù)更新內(nèi)容采取什么操作捏萍。返回的 promise 將在 Facebook 把控制權(quán)返還給游戲時(shí)解析/拒絕。

參數(shù)

payloadCustomUpdatePayload描述更新的負(fù)載空闲。

示例

// This will post a custom update. If the game is played in a messenger

// chat thread, this will post a message into the thread with the specified

// image and text message. And when people launch the game from this

// message, those game sessions will be able to access the specified blob

// of data through FBInstant.getEntryPointData().

FBInstant.updateAsync({?

??? action: 'CUSTOM',?

??? cta: 'Join The Fight',?

??? image: base64Picture,?

??? text: {? ?

?????? default: 'X just invaded Y\'s village!',? ?

?????? localizations: {? ? ?

????????? ar_AR: 'X \u0641\u0642\u0637 \u063A\u0632\u062A ' +? ??

?????????? '\u0642\u0631\u064A\u0629 Y!',? ? ?

????????? en_US: 'X just invaded Y\'s village!',? ? ?

????????? es_LA: '\u00A1X acaba de invadir el pueblo de Y!',? ?

????? }?

? }?

? template: 'VILLAGE_INVASION',?

? data: { myReplayData: '...' },?

? strategy: 'IMMEDIATE',?

? notification: 'NO_PUSH',

}).then(function() {?

??? // closes the game after the update is posted.?

??? FBInstant.quit();

});

拋出INVALID_PARAM

拋出PENDING_REQUEST

返回Promise此 promise 將在 Facebook 把控制權(quán)交還給游戲時(shí)被解析令杈。


quit( )

退出游戲。

示例

FBInstant.quit();

返回void


logEvent( )

通過(guò) Facebook 分析記錄應(yīng)用事件碴倾。請(qǐng)參閱https://developers.facebook.com/docs/javascript/reference/v2.8#app_events詳細(xì)了解 Fcaebook 分析逗噩。

參數(shù)

eventName字符串事件名稱。必須為 2 到 40 個(gè)字符跌榔,且只能包含“_”异雁、“-”、“ ”和字母數(shù)字字符僧须。

valueToSum數(shù)字可選的數(shù)值纲刀,F(xiàn)acebook 分析利用此參數(shù)來(lái)計(jì)算總和。

parameters對(duì)象可選的對(duì)象皆辽,最多可包含25 個(gè)要與事件一同記錄的鍵值對(duì)柑蛇。鍵必須為 2 到 40 個(gè)字符芥挣,且只能包含“_”驱闷、“-”、“ ”和字母數(shù)字字符空免。值的長(zhǎng)度必須小于 100 個(gè)字符空另。

示例

var logged = FBInstant.logEvent(?

??? 'my_custom_event',?

???? 42,?

???? {custom_property: 'custom_value'},

);

返回APIError如果事件記錄錯(cuò)誤蹋砚,將返回錯(cuò)誤扼菠;否則返回 null。


onPause( )

設(shè)置發(fā)生暫停事件時(shí)將觸發(fā)的回調(diào)坝咐。

參數(shù)

func函數(shù)發(fā)生暫停事件時(shí)將調(diào)用的函數(shù)循榆。

返回void


getInterstitialAdAsync( )

嘗試創(chuàng)建插屏廣告的實(shí)例。此實(shí)例可在之后預(yù)載和顯示墨坚。

參數(shù)

placementID字符串在 Audience Network 設(shè)置中設(shè)置的版位編號(hào)秧饮。

示例

FBInstant.getInterstitialAdAsync(

??? 'my_placement_id',

).then(function(interstitial) {?

? interstitial.getPlacementID(); // 'my_placement_id'

});

拋出ADS_TOO_MANY_INSTANCES

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在獲得#adinstance時(shí)被解析;在獲得#apierror時(shí)被拒絕(如果未能創(chuàng)建)。


getRewardedVideoAsync( )

嘗試創(chuàng)建獎(jiǎng)勵(lì)式視頻廣告的實(shí)例盗尸。此實(shí)例可在之后預(yù)載和顯示柑船。

參數(shù)

placementID字符串在 Audience Network 設(shè)置中設(shè)置的版位編號(hào)。

示例

FBInstant.getRewardedVideoAsync(?

??? 'my_placement_id',

).then(function(rewardedVideo) {?

? rewardedVideo.getPlacementID(); // 'my_placement_id'

});

拋出ADS_TOO_MANY_INSTANCES

拋出CLIENT_UNSUPPORTED_OPERATION

返回Promise此 promise 將在獲得#adinstance時(shí)被解析泼各;在獲得#apierror時(shí)被拒絕(如果未能創(chuàng)建)鞍时。


LocalizationsDict

代表特定字符串的語(yǔ)言設(shè)置與翻譯之間的映射。每個(gè)屬性均為可選且包含五個(gè)字符的 Facebook 語(yǔ)言代碼扣蜻,格式為 xx_XX逆巍。請(qǐng)參閱https://www.facebook.com/translations/FacebookLocales.xml,獲取受支持的語(yǔ)言代碼的完整列表弱贼。

類型:對(duì)象


APIError

小游戲 SDK 返回的 API 錯(cuò)誤


code

相關(guān)的錯(cuò)誤代碼

類型:ErrorCodeType


message

描述錯(cuò)誤的消息

類型:字符串


SignedPlayerInfo

代表玩家信息蒸苇,并包含簽名,簽名用于驗(yàn)證對(duì)應(yīng)信息確實(shí)來(lái)源于 Facebook吮旅。


getPlayerID( )

獲取玩家的編號(hào)溪烤。

返回字符串玩家的編號(hào)


getSignature( )

用于驗(yàn)證此對(duì)象確實(shí)來(lái)源于 Facebook 的簽名。此字符串使用 base64url 編碼庇勃,并根據(jù) OAuth 2.0 協(xié)議使用 HMAC 版本的應(yīng)用密鑰簽名檬嘀。

您可以通過(guò)以下 4 步進(jìn)行驗(yàn)證:

? 將簽名分為兩個(gè)部分,以“.”字符隔開(kāi)责嚷。

? 通過(guò) base64url 編碼對(duì)第一部分(編碼后的簽名)進(jìn)行解碼鸳兽。

? 通過(guò) base64url 編碼對(duì)第二部分(響應(yīng)負(fù)載)進(jìn)行解碼,第二部分應(yīng)該是代表 JSON對(duì)象(包含下列字段)的字符串:

? ** algorithm — 始終等于 HMAC-SHA256罕拂。** issued_at — 發(fā)出此響應(yīng)的 unix 時(shí)間戳揍异。** player_id — 玩家的唯一標(biāo)識(shí)。

? ** request_payload — 您在調(diào)用 FBInstant.player.getSignedPlayerInfoAsync 時(shí)指定的 requestPayload 字符串爆班。

? 請(qǐng)采用 HMAC SHA-256 和您的應(yīng)用密鑰散列處理整個(gè)響應(yīng)負(fù)載字符串衷掷,并確定它等同于經(jīng)編碼的簽名。

? 還建議您驗(yàn)證響應(yīng)負(fù)載中的 issued_at 時(shí)間戳柿菩,確保請(qǐng)求是最近發(fā)出的戚嗅。

應(yīng)僅在您的服務(wù)器中進(jìn)行簽名驗(yàn)證。不要在客戶端進(jìn)行簽名驗(yàn)證枢舶,因?yàn)榭蛻舳丝赡軙?huì)泄漏您的應(yīng)用密鑰懦胞。

示例

Eii6e636mz5J47sfqAYEK40jYAwoFqi3x5bxHkPG4Q4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwMDM5ODY3NSwicGxheWVyX2lkIjoiMTI0OTUyNTMwMTc1MjIwMSIsInJlcXVlc3RfcGF5bG9hZCI6Im15X2ZpcnN0X3JlcXVlc3QifQ

返回字符串簽名字符串。


ConnectedPlayer

代表與當(dāng)前玩家關(guān)聯(lián)的玩家的信息凉泄。


getID( )

獲取關(guān)聯(lián)玩家的編號(hào)躏尉。

返回字符串關(guān)聯(lián)玩家的編號(hào)


getName( )

獲取玩家的全名。

返回字符串后众?即玩家的全名


getPhoto( )

獲取玩家公開(kāi)頭像的網(wǎng)址胀糜。

返回字符串稼锅?玩家公開(kāi)頭像的網(wǎng)址


ContextPlayer

代表與當(dāng)前玩家在相同環(huán)境中玩游戲的玩家的信息。


getID( )

獲取相同環(huán)境玩家的編號(hào)僚纷。

返回字符串相同環(huán)境玩家的編號(hào)


getName( )

獲取經(jīng)本地化顯示的玩家姓名矩距。

返回字符串經(jīng)本地化顯示的玩家姓名怖竭。


getPhoto( )

獲取玩家公開(kāi)頭像的網(wǎng)址锥债。

返回字符串玩家公開(kāi)頭像的網(wǎng)址


AdInstance

代表廣告實(shí)例痊臭。


getPlacementID( )

返回此廣告實(shí)例的 Audience Network 版位編號(hào)哮肚。


loadAsync( )

預(yù)加載廣告。返回的 promise 將在預(yù)加載完成時(shí)被解析广匙,在預(yù)加載失敗時(shí)被拒絕允趟。

示例

FBInstant.getInterstitialAdAsync(?

???? 'my_placement_id',

).then(function(interstitial) {

???? return interstitial.loadAsync();

}).then(function() {?

?? // Ad loaded

});

拋出ADS_FREQUENT_LOAD

拋出ADS_NO_FILL

拋出INVALID_PARAM

拋出NETWORK_FAILURE

返回Promise


showAsync( )

代表廣告。返回的 promise 將在用戶觀看完廣告時(shí)被解析鸦致,在廣告展示失敗或用戶在廣告展示期間關(guān)閉廣告時(shí)被拒絕潮剪。

示例

var ad = null;

FBInstant.getRewardedVideoAsync(?

???? 'my_placement_id',

).then(function(rewardedVideo) {?

? ad = rewardedVideo;?

?? return ad.loadAsync();

}).then(function() {?

?? // Ad loaded?

?? return ad.showAsync();

}).then(function() {?

?? // Ad watched

});

拋出ADS_NOT_LOADED

拋出INVALID_PARAM

拋出NETWORK_FAILURE

返回Promise


ContextFilter

適用于環(huán)境選擇操作的篩選條件》滞伲“NEW_CONTEXT_ONLY”—僅顯示之前玩游戲未使用過(guò)的環(huán)境抗碰。“INCLUDE_EXISTING_CHALLENGES”— 包括“當(dāng)前挑戰(zhàn)”部分绽乔,顯示玩家積極在其中玩游戲的環(huán)境弧蝇。“NEW_PLAYERS_ONLY”— 在包含個(gè)人信息的部分折砸,篩選出之前未玩過(guò)游戲的用戶看疗,

類型:("NEW_CONTEXT_ONLY"|"INCLUDE_EXISTING_CHALLENGES"|"NEW_PLAYERS_ONLY")


平臺(tái)

代表用戶當(dāng)前在哪個(gè)平臺(tái)玩游戲。

類型:("IOS"|"ANDROID"|"WEB"|"MOBILE_WEB")


ContextSizeResponse

如果當(dāng)前環(huán)境的規(guī)模介于對(duì)象中指定的 minSize 和 maxSize 值之間睦授,answer 字段為 true两芳,否則為 false。

類型:{answer:boolean, minSize:number?, maxSize:number?}


SharePayload

代表用戶分享的內(nèi)容睹逃。

類型:對(duì)象

屬性

intent("INVITE"|"REQUEST"|"CHALLENGE"|"SHARE")表示分享的意圖盗扇。

image字符串要分享的 base64 編碼圖片祷肯。

text字符串要分享的文本消息沉填。

data對(duì)象要附加到分享中的數(shù)據(jù)塊佑笋。通過(guò)分享開(kāi)始的所有游戲會(huì)話都可以通過(guò) FBInstant.getEntryPointData() 訪問(wèn)此數(shù)據(jù)塊翼闹。


錯(cuò)誤代碼

小游戲 API 可能會(huì)返回的錯(cuò)誤代碼

屬性

ADS_FREQUENT_LOAD字符串廣告加載太頻繁。

ADS_NO_FILL字符串我們無(wú)法向當(dāng)前的用戶投放廣告蒋纬。如果用戶在設(shè)備中退訂基于興趣的廣告猎荠,或我們沒(méi)有廣告可展示給該用戶坚弱,就會(huì)出現(xiàn)這種情況

ADS_NOT_LOADED字符串嘗試顯示此前未成功加載的廣告。

ADS_TOO_MANY_INSTANCES字符串同時(shí)展示的廣告實(shí)例太多关摇。建議您先加載和展示現(xiàn)有廣告實(shí)例荒叶,再新建廣告。

ANALYTICS_POST_EXCEPTION字符串分析 API 在嘗試發(fā)布事件時(shí)遇到問(wèn)題输虱。

CLIENT_REQUIRES_UPDATE字符串[已停用] — 客戶端要求獲得更新些楣,以便訪問(wèn)返回此結(jié)果的功能。如果在網(wǎng)頁(yè)端返回這一結(jié)果宪睹,則意味著該網(wǎng)頁(yè)客戶端還不支持此功能愁茁。v5.0 及更高版本已停用這一代碼,以便支持 CLIENT_UNSUPPORTED_OPERATION

CLIENT_UNSUPPORTED_OPERATION字符串客戶端不支持當(dāng)前操作亭病。這可能是因?yàn)榭蛻舳税姹净蚱脚_(tái)不提供相關(guān)支持鹅很,或不允許對(duì)游戲或玩家執(zhí)行此操作。

INVALID_OPERATION字符串所請(qǐng)求的操作無(wú)效罪帖,或表示當(dāng)前的游戲狀態(tài)促煮。這包括違反限制(如超出存儲(chǔ)上限)或不適用于特定狀態(tài)(如在獨(dú)立的環(huán)境中針對(duì)特定環(huán)境發(fā)出請(qǐng)求)的情況。

INVALID_PARAM字符串傳遞給 API 的參數(shù)無(wú)效整袁∥垡穑可表示錯(cuò)誤類型、參數(shù)的無(wú)效數(shù)字葬项,或語(yǔ)義問(wèn)題(例如泞当,將不可序列化的對(duì)象傳遞到序列化函數(shù))。

NETWORK_FAILURE字符串客戶端處理網(wǎng)絡(luò)請(qǐng)求時(shí)出現(xiàn)問(wèn)題民珍。這可能是由暫時(shí)性問(wèn)題導(dǎo)致的襟士,如玩家的網(wǎng)絡(luò)連接中斷。

PENDING_REQUEST字符串表示因存在與此請(qǐng)求沖突的一項(xiàng)請(qǐng)求而被拒絕嚷量。例如陋桂,當(dāng)某個(gè)依賴于 Facebook 用戶界面的請(qǐng)求處于待處理狀態(tài)時(shí),我們就會(huì)拒絕顯示 Facebook 用戶界面的其他任何調(diào)用蝶溶。

SAME_CONTEXT字符串游戲嘗試切換到當(dāng)前環(huán)境嗜历。

UNKNOWN字符串發(fā)生了未知或未指定的問(wèn)題。這是客戶端未指定代碼時(shí)返回的默認(rèn)錯(cuò)誤代碼抖所。

USER_INPUT字符串用戶的選擇導(dǎo)致被拒絕梨州。例如,如果游戲調(diào)用環(huán)境切換對(duì)話框田轧,而玩家關(guān)閉此對(duì)話框暴匠,則 promise 拒絕中就會(huì)包含此錯(cuò)誤代碼。

示例

FBInstant.startGameAsync().catch(function(e) {?

???? console.log(e);

});

// {code: 'CLIENT_UNSUPPORTED_OPERATION', message: '...'}


ErrorCodeType

小游戲錯(cuò)誤代碼傻粘,#errorcode中的一種

類型:字符串


CustomUpdatePayload

代表 FBInstant.updateAsync 的自定義更新每窖。

類型:對(duì)象

屬性

action字符串對(duì)于自定義更新帮掉,此屬性應(yīng)為“CUSTOM”。

template字符串此自定義更新所使用模板的編號(hào)窒典。模板應(yīng)在 fbapp-config.json 中預(yù)定義蟆炊。請(qǐng)參閱[捆綁包配置文檔]https://developers.facebook.com/docs/games/instant-games/bundle-config,獲取有關(guān) fbapp-config.json 的文檔瀑志。

cta字符串盅称?|LocalizableContent?)可選的行動(dòng)號(hào)召按鈕文本后室。默認(rèn)情況下缩膝,我們會(huì)使用經(jīng)本地化的“Play”作為按鈕文本。若要提供自定義行動(dòng)號(hào)召的本地化版本岸霹,應(yīng)傳遞一個(gè)包含默認(rèn)行動(dòng)號(hào)召的對(duì)象作為“default”值疾层,以及將語(yǔ)言鍵映射到翻譯的另一個(gè)對(duì)象作為“l(fā)ocalizations”值。

image字符串base64 編碼圖片的數(shù)據(jù)網(wǎng)址贡避。

text字符串|LocalizableContent一條文本消息痛黎,或者是一個(gè)包含默認(rèn)文本作為“default”值的對(duì)象以及另一個(gè)將語(yǔ)言鍵映射到翻譯內(nèi)容作為“l(fā)ocalizations”值的對(duì)象。

data對(duì)象刮吧?要附加到更新中的數(shù)據(jù)塊湖饱。通過(guò)更新開(kāi)始的所有游戲會(huì)話都可以通過(guò) FBInstant.getEntryPointData() 訪問(wèn)此數(shù)據(jù)塊。轉(zhuǎn)變?yōu)樽址畷r(shí)杀捻,此數(shù)據(jù)塊必須小于或等于 1000 個(gè)字符井厌。

strategy字符串指定更新的發(fā)布方式致讥〗銎停可以是下列方式之一:“IMMEDIATE”— 更新應(yīng)立即發(fā)布」父ぃ“LAST”— 更新應(yīng)在游戲會(huì)話結(jié)束時(shí)發(fā)布墓拜。使用“LAST”策略發(fā)送的是最近發(fā)送的更新∏肫酰“IMMEDIATE_CLEAR”— 更新將立即發(fā)布咳榜,并清除其他任何待處理的更新(如通過(guò)“LAST”策略發(fā)布的更新)。如果未指定策略爽锥,我們將默認(rèn)為“IMMEDIATE”涌韩。

notification字符串指定自定義更新的通知設(shè)置救恨∶潮玻可以是“NO_PUSH”或“PUSH”释树,默認(rèn)為“NO_PUSH”肠槽。僅將推送通知用于對(duì)接收人來(lái)說(shuō)非常顯著且可立即操作的更新擎淤。另請(qǐng)注意,并不一定會(huì)發(fā)送推送通知秸仙,具體取決于用戶設(shè)置和平臺(tái)政策嘴拢。


LocalizableContent

代表一個(gè)字符串,其中包含最終使用的本地化內(nèi)容和默認(rèn)值寂纪。

類型:對(duì)象

屬性

default字符串要使用的字符串的默認(rèn)值(查看者的語(yǔ)言設(shè)置不是 localizations 對(duì)象中的鍵時(shí))席吴。

localizationsLocalizationsDict指定每種語(yǔ)言設(shè)置中用于觀看者的字符串。請(qǐng)參閱https://www.facebook.com/translations/FacebookLocales.xml捞蛋,獲取受支持的完整語(yǔ)言列表孝冒。

另外我創(chuàng)建了一個(gè) Facebook Instant Game?? 交流QQ群:814298516


歡迎同行們加入討論技術(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拟杉,隨后出現(xiàn)的幾起案子庄涡,更是在濱河造成了極大的恐慌,老刑警劉巖搬设,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穴店,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拿穴,警方通過(guò)查閱死者的電腦和手機(jī)泣洞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)默色,“玉大人球凰,你說(shuō)我怎么就攤上這事⊥仍祝” “怎么了弟蚀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)酗失。 經(jīng)常有香客問(wèn)我义钉,道長(zhǎng),這世上最難降的妖魔是什么规肴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任捶闸,我火速辦了婚禮,結(jié)果婚禮上拖刃,老公的妹妹穿的比我還像新娘删壮。我一直安慰自己,他們只是感情好兑牡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布央碟。 她就那樣靜靜地躺著,像睡著了一般均函。 火紅的嫁衣襯著肌膚如雪亿虽。 梳的紋絲不亂的頭發(fā)上菱涤,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音洛勉,去河邊找鬼粘秆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛收毫,可吹牛的內(nèi)容都是我干的攻走。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼此再,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昔搂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起输拇,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巩趁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后淳附,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體议慰,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年奴曙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了别凹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽糟,死狀恐怖炉菲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坤溃,我是刑警寧澤拍霜,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站薪介,受9級(jí)特大地震影響祠饺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汁政,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一道偷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧记劈,春花似錦勺鸦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春军拟,著一層夾襖步出監(jiān)牢的瞬間剃执,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工吻谋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忠蝗,地道東北人现横。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓漓拾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戒祠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骇两,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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