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

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

返回ContextSizeResponse


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

類型:ErrorCodeType


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


歡迎同行們加入討論技術(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容