FBInstant
小游戲 SDK 的頂級命名空間。
player
包含與當(dāng)前玩家相關(guān)的功能和屬性。
getID( )
玩家的唯一標(biāo)識。Facebook 用戶的玩家編號將保持不變,且僅限于特定游戲范圍。這意味著同一個用戶在不同的游戲中有不同的玩家編號。僅當(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)識。
getSignedPlayerInfoAsync( )
獲取玩家的唯一標(biāo)識和簽名,簽名用于驗證標(biāo)識確實來自 Facebook,且沒有被篡改。僅當(dāng) FBInstant.initializeAsync() 被解析后才應(yīng)調(diào)用此函數(shù)。
參數(shù)
?????? requestPayload字符串?開發(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對象解析的 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( )
玩家公開頭像的網(wǎng)址。此照片始終為正方形,尺寸至少為 200x200 像素。在游戲中顯示時,確切的尺寸可能會有所變化。建議始終在顯示之前將圖片調(diào)整為需要的尺寸。對應(yīng)的值將始終為 null,直至 FBInstant.startGameAsync() 被解析。
警告:由于使用 CORS 機制,在游戲 Canvas 中使用這些照片會導(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();
返回字符串?玩家公開頭像的網(wǎng)址。
getDataAsync( )
從指定的云存儲中檢索當(dāng)前玩家的數(shù)據(jù)。
參數(shù)
keys數(shù)組<字符串>唯一鍵數(shù)組,數(shù)據(jù)檢索將針對這些鍵展開。
示例
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<對象>此 promise 將在獲得包含下列信息的對象時被解析:輸入數(shù)組中指定的每個鍵的當(dāng)前鍵值對(如存在)。
setDataAsync( )
設(shè)置要保存到指定云存儲的當(dāng)前玩家的數(shù)據(jù)。對于每個獨立玩家,游戲最多可存儲 1MB 的數(shù)據(jù)。
參數(shù)
data對象此對象包含應(yīng)該保存到云存儲的一組鍵值對。對象必須僅包含可序列化的值 — 任何不可序列化的值都會導(dǎo)致整個修改被拒絕。
示例
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è)定時被解析。注意:promise 被解析并不一定意味著輸入已被存儲,而是這意味著相關(guān)數(shù)據(jù)有效并已安排要被存儲。這還能保證設(shè)置的所有值現(xiàn)在可在 player.getDataAsync 中使用。
flushDataAsync( )
立即將玩家數(shù)據(jù)的任何更改刷新到指定的云存儲中。此函數(shù)的調(diào)用成本較高,應(yīng)主要用于需要立即存儲并告知游戲的重要更改。非重要更改應(yīng)依賴于開放平臺在后臺進(jìn)行存儲。注意:當(dāng)此函數(shù)的結(jié)果待定時,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 將在更改保存成功時被解析,在更改保存失敗時被拒絕。
getStatsAsync( )
從指定云存儲檢索當(dāng)前玩家的統(tǒng)計數(shù)據(jù)。
參數(shù)
keys數(shù)組<字符串>?唯一鍵數(shù)組(可選),針對這些鍵檢索統(tǒng)計數(shù)據(jù)。如果調(diào)用函數(shù)時沒有設(shè)置此參數(shù),則會提取所有統(tǒng)計數(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<對象>此 promise 將在獲得包含下列信息的對象時被解析:輸入數(shù)組中指定的每個鍵的當(dāng)前鍵值對(如存在)。
setStatsAsync( )
設(shè)置要保存到指定云存儲的當(dāng)前玩家的統(tǒng)計數(shù)據(jù)。
參數(shù)
stats對象此對象包含應(yīng)作為統(tǒng)計數(shù)據(jù)保存到云存儲的鍵值對,能以各種方式顯示或使用這些數(shù)據(jù)以提高玩家參與度。對象必須僅包含數(shù)值,任何非數(shù)值會導(dǎo)致整個修改被拒絕。
示例
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è)定時被解析。注意:promise 被解析并不一定意味著輸入已被存儲,而是這意味著相關(guān)數(shù)據(jù)經(jīng)過驗證并已安排要被存儲。這還能保證設(shè)置的所有值現(xiàn)在可在 player.getStatsAsync 中使用。
incrementStatsAsync( )
保存到指定云存儲的當(dāng)前玩家的增量統(tǒng)計數(shù)據(jù)。
參數(shù)
increments對象此對象包含一組鍵值對,這些鍵值對表示云存儲中每個統(tǒng)計數(shù)據(jù)的增量是多少。對象必須僅包含數(shù)值,任何非數(shù)值會導(dǎo)致整個修改被拒絕。
示例
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<對象>此 promise 將在獲得包含下列信息的對象時被解析:輸入字典中指定的每個鍵的更新鍵值對。注意:解析 promise 并不一定意味著更改已被存儲,而是意味著增量有效且已安排要被執(zhí)行。這還能保證增加的所有值現(xiàn)在可在 player.getStatsAsync 中使用。
getConnectedPlayersAsync( )
提取 ConnectedPlayer 對象的數(shù)組,這些對象包含與當(dāng)前玩家關(guān)聯(lián)的玩家的信息。
注意:只有當(dāng) FBInstant.startGameAsync() 被解析時,此 promise 才會解析。
示例
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)玩家對象列表時被解析。
context
包含與當(dāng)前游戲環(huán)境相關(guān)的功能和屬性。
getID( )
當(dāng)前游戲環(huán)境的唯一標(biāo)識。這表示玩游戲的特定環(huán)境(例如:特定的Messenger 對話或 Facebook 帖子)。如果用戶在獨立環(huán)境中玩游戲,則此標(biāo)識將為 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)識。
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)其中一個邊界值為 null 時才會根據(jù)另一個邊界值進(jìn)行檢查。在特定的游戲會話中,此函數(shù)始終會返回某環(huán)境內(nèi)發(fā)出的第一個調(diào)用的最初結(jié)果。后續(xù)調(diào)用(無論參數(shù)是什么)將返回原始查詢的答案,除非游戲環(huán)境發(fā)生變化且查詢結(jié)果被重置。
僅當(dāng) FBInstant.startGameAsync 被解析后才應(yīng)調(diào)用此函數(shù)。
如果提供的一個或兩個參數(shù)無效,我們沒有適合當(dāng)前游戲環(huán)境的玩家數(shù)量,或者 API 在 startGameAsync() 解析之前被調(diào)用,
此參數(shù)都會為 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( )
請求切換到指定環(huán)境。如果玩家沒有進(jìn)入該環(huán)境的權(quán)限,或玩家未向游戲提供進(jìn)入該環(huán)境的權(quán)限,請求將被拒絕。promise 將在游戲切換到指定環(huán)境時被解析。
參數(shù)
id字符串目標(biāo)環(huán)境的編號。
示例
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)境時被解析,在切換失敗時被拒絕。
chooseAsync( )
為玩家打開一個環(huán)境選擇對話框。如果玩家選擇可用的環(huán)境,客戶端將嘗試切換到這個環(huán)境,并在成功時解析。而如果玩家退出菜單或客戶端未能切換到新環(huán)境,此函數(shù)將被拒絕。
參數(shù)
options對象?此對象用于指定應(yīng)提供的環(huán)境選項。
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)境時被解析。否則此 promise 將被拒絕(例如用戶退出對話框)。
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)境時,promise 將被解析。
參數(shù)
playerID字符串玩家的編號
示例
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)境時被解析,在切換失敗時被拒絕。
getPlayersAsync( )
獲取#contextplayer對象的數(shù)組,其中包含與當(dāng)前環(huán)境相關(guān)的活躍玩家(在過去 90 天內(nèi)玩過游戲的用戶)的信息。這可能包含當(dāng)前玩家。
注意:只有當(dāng) FBInstant.startGameAsync() 被解析時,此 promise 才會解析。
示例
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)前的語言設(shè)置。根據(jù)這一結(jié)果確定當(dāng)前的游戲應(yīng)本地化為哪種語言。在 FBInstant.startGameAsync() 被解析之前,對應(yīng)的值將不準(zhǔn)確。
示例
// This function should be called after FBInstant.startGameAsync()
// resolves.
var locale = FBInstant.getLocale(); // 'en_US'
返回字符串?當(dāng)前的語言設(shè)置。
getPlatform( )
當(dāng)前運行游戲的平臺。對應(yīng)的值將始終為 null,直至 FBInstant.initializeAsync() 被解析。
示例
// This function should be called after FBInstant.initializeAsync()
// resolves.
var platform = FBInstant.getPlatform(); // 'IOS'
返回平臺?
getSDKVersion( )
表示此 SDK 版本的字符串。
示例
// This function should be called after FBInstant.initializeAsync()
// resolves.
var sdkVersion = FBInstant.getSDKVersion(); // '2.0'
返回字符串SDK 版本。
initializeAsync( )
初始化 SDK 庫。應(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 可以使用時被解析。
setLoadingProgress( )
報告游戲的初始加載進(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( )
返回與啟動游戲的入口點相關(guān)的任何數(shù)據(jù)對象。
對象內(nèi)容由開發(fā)者定義,可通過不同平臺的入口點觸發(fā)。對于較舊版本的移動客戶端,以及沒有與特定入口點相關(guān)的數(shù)據(jù)時,
此函數(shù)會返回 null。
僅當(dāng) FBInstant.startGameAsync() 被解析后才應(yīng)調(diào)用此函數(shù)。
示例
// This function should be called after FBInstant.initializeAsync()
// resolves.
const entryPointData = FBInstant.getEntryPointData();
返回對象?與當(dāng)前入口點相關(guān)的數(shù)據(jù)。
getEntryPointAsync( )
返回啟動游戲的入口點
示例
// This function should be called after FBInstant.initializeAsync()
// resolves.
FBInstant.getEntryPointAsync().then(entrypoint => console.log(entrypoint));
// 'admin_message'
返回字符串用戶啟動游戲時所在的入口點的名稱
setSessionData( )
為當(dāng)前環(huán)境設(shè)置與單個游戲會話相關(guān)的數(shù)據(jù)。
當(dāng)游戲需要更新當(dāng)前的會話數(shù)據(jù)時,應(yīng)調(diào)用此函數(shù)。此會話數(shù)據(jù)可用于填充各種負(fù)載,如玩游戲 webhook。
參數(shù)
sessionData對象一個隨機數(shù)據(jù)對象,轉(zhuǎn)變?yōu)樽址?,必須小于或等?1000 個字符。
示例
FBInstant.setSessionData({coinsEarned: 10, eventsSeen: ['start', ...]});
返回void
startGameAsync( )
表示游戲已完成初始加載,并準(zhǔn)備就緒可以開始游戲。當(dāng)返回的 promise 被解析時,環(huán)境信息即為最新。
示例
FBInstant.startGameAsync().then(function() {?
??? myGame.start();
});
拋出INVALID_PARAM
拋出CLIENT_UNSUPPORTED_OPERATION
返回Promise此 promise 將在游戲應(yīng)該啟動時被解析。
shareAsync( )
此函數(shù)會調(diào)用一個對話框,讓用戶以下列方式分享指定的內(nèi)容:在 Messenger中發(fā)送消息,或在用戶時間線上發(fā)布帖子??梢栽诜窒碇刑砑訑?shù)據(jù)塊,通過此次分享啟動的每個游戲會話都可以通過 FBInstant.getEntryPointData() 訪問此數(shù)據(jù)塊。轉(zhuǎn)變?yōu)樽址畷r,此數(shù)據(jù)必須小于或等于 1000 個字符。用戶可以選擇取消分享操作和關(guān)閉對話框,但無論用戶實際是否分享了內(nèi)容,返回的 promise 都將在對話框關(guān)閉時解析。
參數(shù)
payloadSharePayload,指定要分享的內(nèi)容。詳情請參閱示例。
示例
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 將在分享完成或取消時被解析。
updateAsync( )
向 Facebook 通知游戲內(nèi)發(fā)生的更新。這會暫時將控制權(quán)移交給 Facebook,且 Facebook 將確定要根據(jù)更新內(nèi)容采取什么操作。返回的 promise 將在 Facebook 把控制權(quán)返還給游戲時解析/拒絕。
參數(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)交還給游戲時被解析。
quit( )
退出游戲。
示例
FBInstant.quit();
返回void
logEvent( )
通過 Facebook 分析記錄應(yīng)用事件。請參閱https://developers.facebook.com/docs/javascript/reference/v2.8#app_events詳細(xì)了解 Fcaebook 分析。
參數(shù)
eventName字符串事件名稱。必須為 2 到 40 個字符,且只能包含“_”、“-”、“ ”和字母數(shù)字字符。
valueToSum數(shù)字可選的數(shù)值,F(xiàn)acebook 分析利用此參數(shù)來計算總和。
parameters對象可選的對象,最多可包含25 個要與事件一同記錄的鍵值對。鍵必須為 2 到 40 個字符,且只能包含“_”、“-”、“ ”和字母數(shù)字字符。值的長度必須小于 100 個字符。
示例
var logged = FBInstant.logEvent(?
??? 'my_custom_event',?
???? 42,?
???? {custom_property: 'custom_value'},
);
返回APIError?如果事件記錄錯誤,將返回錯誤;否則返回 null。
onPause( )
設(shè)置發(fā)生暫停事件時將觸發(fā)的回調(diào)。
參數(shù)
func函數(shù)發(fā)生暫停事件時將調(diào)用的函數(shù)。
返回void
getInterstitialAdAsync( )
嘗試創(chuàng)建插屏廣告的實例。此實例可在之后預(yù)載和顯示。
參數(shù)
placementID字符串在 Audience Network 設(shè)置中設(shè)置的版位編號。
示例
FBInstant.getInterstitialAdAsync(
??? 'my_placement_id',
).then(function(interstitial) {?
? interstitial.getPlacementID(); // 'my_placement_id'
});
拋出ADS_TOO_MANY_INSTANCES
拋出CLIENT_UNSUPPORTED_OPERATION
返回Promise此 promise 將在獲得#adinstance時被解析;在獲得#apierror時被拒絕(如果未能創(chuàng)建)。
getRewardedVideoAsync( )
嘗試創(chuàng)建獎勵式視頻廣告的實例。此實例可在之后預(yù)載和顯示。
參數(shù)
placementID字符串在 Audience Network 設(shè)置中設(shè)置的版位編號。
示例
FBInstant.getRewardedVideoAsync(?
??? 'my_placement_id',
).then(function(rewardedVideo) {?
? rewardedVideo.getPlacementID(); // 'my_placement_id'
});
拋出ADS_TOO_MANY_INSTANCES
拋出CLIENT_UNSUPPORTED_OPERATION
返回Promise此 promise 將在獲得#adinstance時被解析;在獲得#apierror時被拒絕(如果未能創(chuàng)建)。
LocalizationsDict
代表特定字符串的語言設(shè)置與翻譯之間的映射。每個屬性均為可選且包含五個字符的 Facebook 語言代碼,格式為 xx_XX。請參閱https://www.facebook.com/translations/FacebookLocales.xml,獲取受支持的語言代碼的完整列表。
類型:對象
APIError
小游戲 SDK 返回的 API 錯誤
code
相關(guān)的錯誤代碼
message
描述錯誤的消息
類型:字符串
SignedPlayerInfo
代表玩家信息,并包含簽名,簽名用于驗證對應(yīng)信息確實來源于 Facebook。
getPlayerID( )
獲取玩家的編號。
返回字符串玩家的編號
getSignature( )
用于驗證此對象確實來源于 Facebook 的簽名。此字符串使用 base64url 編碼,并根據(jù) OAuth 2.0 協(xié)議使用 HMAC 版本的應(yīng)用密鑰簽名。
您可以通過以下 4 步進(jìn)行驗證:
? 將簽名分為兩個部分,以“.”字符隔開。
? 通過 base64url 編碼對第一部分(編碼后的簽名)進(jìn)行解碼。
? 通過 base64url 編碼對第二部分(響應(yīng)負(fù)載)進(jìn)行解碼,第二部分應(yīng)該是代表 JSON對象(包含下列字段)的字符串:
? ** algorithm — 始終等于 HMAC-SHA256。** issued_at — 發(fā)出此響應(yīng)的 unix 時間戳。** player_id — 玩家的唯一標(biāo)識。
? ** request_payload — 您在調(diào)用 FBInstant.player.getSignedPlayerInfoAsync 時指定的 requestPayload 字符串。
? 請采用 HMAC SHA-256 和您的應(yīng)用密鑰散列處理整個響應(yīng)負(fù)載字符串,并確定它等同于經(jīng)編碼的簽名。
? 還建議您驗證響應(yīng)負(fù)載中的 issued_at 時間戳,確保請求是最近發(fā)出的。
應(yīng)僅在您的服務(wù)器中進(jìn)行簽名驗證。不要在客戶端進(jìn)行簽名驗證,因為客戶端可能會泄漏您的應(yīng)用密鑰。
示例
Eii6e636mz5J47sfqAYEK40jYAwoFqi3x5bxHkPG4Q4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwMDM5ODY3NSwicGxheWVyX2lkIjoiMTI0OTUyNTMwMTc1MjIwMSIsInJlcXVlc3RfcGF5bG9hZCI6Im15X2ZpcnN0X3JlcXVlc3QifQ
返回字符串簽名字符串。
ConnectedPlayer
代表與當(dāng)前玩家關(guān)聯(lián)的玩家的信息。
getID( )
獲取關(guān)聯(lián)玩家的編號。
返回字符串關(guān)聯(lián)玩家的編號
getName( )
獲取玩家的全名。
返回字符串?即玩家的全名
getPhoto( )
獲取玩家公開頭像的網(wǎng)址。
返回字符串?玩家公開頭像的網(wǎng)址
ContextPlayer
代表與當(dāng)前玩家在相同環(huán)境中玩游戲的玩家的信息。
getID( )
獲取相同環(huán)境玩家的編號。
返回字符串相同環(huán)境玩家的編號
getName( )
獲取經(jīng)本地化顯示的玩家姓名。
返回字符串?經(jīng)本地化顯示的玩家姓名。
getPhoto( )
獲取玩家公開頭像的網(wǎng)址。
返回字符串?玩家公開頭像的網(wǎng)址
AdInstance
代表廣告實例。
getPlacementID( )
返回此廣告實例的 Audience Network 版位編號。
loadAsync( )
預(yù)加載廣告。返回的 promise 將在預(yù)加載完成時被解析,在預(yù)加載失敗時被拒絕。
示例
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 將在用戶觀看完廣告時被解析,在廣告展示失敗或用戶在廣告展示期間關(guān)閉廣告時被拒絕。
示例
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”—僅顯示之前玩游戲未使用過的環(huán)境?!癐NCLUDE_EXISTING_CHALLENGES”— 包括“當(dāng)前挑戰(zhàn)”部分,顯示玩家積極在其中玩游戲的環(huán)境。“NEW_PLAYERS_ONLY”— 在包含個人信息的部分,篩選出之前未玩過游戲的用戶,
類型:("NEW_CONTEXT_ONLY"|"INCLUDE_EXISTING_CHALLENGES"|"NEW_PLAYERS_ONLY")
平臺
代表用戶當(dāng)前在哪個平臺玩游戲。
類型:("IOS"|"ANDROID"|"WEB"|"MOBILE_WEB")
ContextSizeResponse
如果當(dāng)前環(huán)境的規(guī)模介于對象中指定的 minSize 和 maxSize 值之間,answer 字段為 true,否則為 false。
類型:{answer:boolean, minSize:number?, maxSize:number?}
SharePayload
代表用戶分享的內(nèi)容。
類型:對象
屬性
intent("INVITE"|"REQUEST"|"CHALLENGE"|"SHARE")表示分享的意圖。
image字符串要分享的 base64 編碼圖片。
text字符串要分享的文本消息。
data對象?要附加到分享中的數(shù)據(jù)塊。通過分享開始的所有游戲會話都可以通過 FBInstant.getEntryPointData() 訪問此數(shù)據(jù)塊。
錯誤代碼
小游戲 API 可能會返回的錯誤代碼
屬性
ADS_FREQUENT_LOAD字符串廣告加載太頻繁。
ADS_NO_FILL字符串我們無法向當(dāng)前的用戶投放廣告。如果用戶在設(shè)備中退訂基于興趣的廣告,或我們沒有廣告可展示給該用戶,就會出現(xiàn)這種情況
ADS_NOT_LOADED字符串嘗試顯示此前未成功加載的廣告。
ADS_TOO_MANY_INSTANCES字符串同時展示的廣告實例太多。建議您先加載和展示現(xiàn)有廣告實例,再新建廣告。
ANALYTICS_POST_EXCEPTION字符串分析 API 在嘗試發(fā)布事件時遇到問題。
CLIENT_REQUIRES_UPDATE字符串[已停用] — 客戶端要求獲得更新,以便訪問返回此結(jié)果的功能。如果在網(wǎng)頁端返回這一結(jié)果,則意味著該網(wǎng)頁客戶端還不支持此功能。v5.0 及更高版本已停用這一代碼,以便支持 CLIENT_UNSUPPORTED_OPERATION
CLIENT_UNSUPPORTED_OPERATION字符串客戶端不支持當(dāng)前操作。這可能是因為客戶端版本或平臺不提供相關(guān)支持,或不允許對游戲或玩家執(zhí)行此操作。
INVALID_OPERATION字符串所請求的操作無效,或表示當(dāng)前的游戲狀態(tài)。這包括違反限制(如超出存儲上限)或不適用于特定狀態(tài)(如在獨立的環(huán)境中針對特定環(huán)境發(fā)出請求)的情況。
INVALID_PARAM字符串傳遞給 API 的參數(shù)無效??杀硎惧e誤類型、參數(shù)的無效數(shù)字,或語義問題(例如,將不可序列化的對象傳遞到序列化函數(shù))。
NETWORK_FAILURE字符串客戶端處理網(wǎng)絡(luò)請求時出現(xiàn)問題。這可能是由暫時性問題導(dǎo)致的,如玩家的網(wǎng)絡(luò)連接中斷。
PENDING_REQUEST字符串表示因存在與此請求沖突的一項請求而被拒絕。例如,當(dāng)某個依賴于 Facebook 用戶界面的請求處于待處理狀態(tài)時,我們就會拒絕顯示 Facebook 用戶界面的其他任何調(diào)用。
SAME_CONTEXT字符串游戲嘗試切換到當(dāng)前環(huán)境。
UNKNOWN字符串發(fā)生了未知或未指定的問題。這是客戶端未指定代碼時返回的默認(rèn)錯誤代碼。
USER_INPUT字符串用戶的選擇導(dǎo)致被拒絕。例如,如果游戲調(diào)用環(huán)境切換對話框,而玩家關(guān)閉此對話框,則 promise 拒絕中就會包含此錯誤代碼。
示例
FBInstant.startGameAsync().catch(function(e) {?
???? console.log(e);
});
// {code: 'CLIENT_UNSUPPORTED_OPERATION', message: '...'}
ErrorCodeType
小游戲錯誤代碼,#errorcode中的一種
類型:字符串
CustomUpdatePayload
代表 FBInstant.updateAsync 的自定義更新。
類型:對象
屬性
action字符串對于自定義更新,此屬性應(yīng)為“CUSTOM”。
template字符串此自定義更新所使用模板的編號。模板應(yīng)在 fbapp-config.json 中預(yù)定義。請參閱[捆綁包配置文檔]https://developers.facebook.com/docs/games/instant-games/bundle-config,獲取有關(guān) fbapp-config.json 的文檔。
cta(字符串?|LocalizableContent?)可選的行動號召按鈕文本。默認(rèn)情況下,我們會使用經(jīng)本地化的“Play”作為按鈕文本。若要提供自定義行動號召的本地化版本,應(yīng)傳遞一個包含默認(rèn)行動號召的對象作為“default”值,以及將語言鍵映射到翻譯的另一個對象作為“l(fā)ocalizations”值。
image字符串base64 編碼圖片的數(shù)據(jù)網(wǎng)址。
text(字符串|LocalizableContent)一條文本消息,或者是一個包含默認(rèn)文本作為“default”值的對象以及另一個將語言鍵映射到翻譯內(nèi)容作為“l(fā)ocalizations”值的對象。
data對象?要附加到更新中的數(shù)據(jù)塊。通過更新開始的所有游戲會話都可以通過 FBInstant.getEntryPointData() 訪問此數(shù)據(jù)塊。轉(zhuǎn)變?yōu)樽址畷r,此數(shù)據(jù)塊必須小于或等于 1000 個字符。
strategy字符串?指定更新的發(fā)布方式。可以是下列方式之一:“IMMEDIATE”— 更新應(yīng)立即發(fā)布。“LAST”— 更新應(yīng)在游戲會話結(jié)束時發(fā)布。使用“LAST”策略發(fā)送的是最近發(fā)送的更新?!癐MMEDIATE_CLEAR”— 更新將立即發(fā)布,并清除其他任何待處理的更新(如通過“LAST”策略發(fā)布的更新)。如果未指定策略,我們將默認(rèn)為“IMMEDIATE”。
notification字符串?指定自定義更新的通知設(shè)置??梢允恰癗O_PUSH”或“PUSH”,默認(rèn)為“NO_PUSH”。僅將推送通知用于對接收人來說非常顯著且可立即操作的更新。另請注意,并不一定會發(fā)送推送通知,具體取決于用戶設(shè)置和平臺政策。
LocalizableContent
代表一個字符串,其中包含最終使用的本地化內(nèi)容和默認(rèn)值。
類型:對象
屬性
default字符串要使用的字符串的默認(rèn)值(查看者的語言設(shè)置不是 localizations 對象中的鍵時)。
localizationsLocalizationsDict指定每種語言設(shè)置中用于觀看者的字符串。請參閱https://www.facebook.com/translations/FacebookLocales.xml,獲取受支持的完整語言列表。
另外我創(chuàng)建了一個 Facebook Instant Game?? 交流QQ群:814298516
