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
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ò)誤代碼
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