如果您需要 SDK 對(duì)應(yīng)的 js 和 d.ts 文件,可以在這個(gè) Github 倉(cāng)下載 FBInstantGameDTS
FBInstant
Instant Games SDK 的頂級(jí)命名空間.
player
包含與當(dāng)前玩家相關(guān)的功能和屬性
getID()
玩家的唯一標(biāo)識(shí)ID。一個(gè)Facebook用戶(hù)的id是不會(huì)改變的。同一個(gè)Facebook的用戶(hù),在不同的游戲里會(huì)有不用的id。
注意,該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
代碼示例:
// 該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
var playerID = FBInstant.player.getID();
返回值:string,用戶(hù)的唯一ID
getSignedPlayerInfoAsync( )
獲取玩家的唯一ID和簽名,簽名用來(lái)驗(yàn)證該 ID 來(lái)自 Facebook ,并且沒(méi)有被篡改。該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
參數(shù)
? requestPayload String 一個(gè)由開(kāi)發(fā)者指定的信息,包含在已簽名的響應(yīng)消息里。
代碼示例
該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
// resolves.
FBInstant.player.getSignedPlayerInfoAsync('my_metadata')
.then(function (result) {
// ID和簽名的驗(yàn)證應(yīng)放在服務(wù)器端處理。
SendToMyServer(
result.getPlayerID(), // 和 FBInstant.player.getID() 相同
result.getSignature(),
'GAIN_COINS',
100);
});
? 拋出 INVALID_PARAM
? 拋出 NETWORK_FAILURE
? 拋出 CLIENT_REQUIRES_UPDATE
返回值: Promise<SignedPlayerInfo> 一個(gè)帶有 signedplayerinfo 對(duì)象的 Promise.
canSubscribeBotAsync()
返回一個(gè) promise,表示玩家是否可以與游戲機(jī)器人對(duì)戰(zhàn)。
代碼示例:
// 該方法必須在 FBInstant.player.subscribeBotAsync() 之前調(diào)用
FBInstant.player.canSubscribeBotAsync().then(
can_subscribe => console.log(can_subscribe)
);
返回值: Promise<boolean> 玩家是否可以與機(jī)器人對(duì)戰(zhàn)。開(kāi)發(fā)者必須在檢測(cè) canSubscribeBotAsync() 之后再調(diào)用 subscribeBotAsync()。玩家在游戲中只會(huì)看到一次訂閱機(jī)器人的對(duì)話(huà)框。
subscribeBotAsync()
請(qǐng)求玩家訂閱游戲機(jī)器人。如果失敗,API 將返回 reject,如果成功,玩家將訂閱游戲機(jī)器人。
代碼示例:
FBInstant.player.subscribeBotAsync().then(
// Player is subscribed to the bot
).catch(function (e) {
// Handle subscription failure
});
? 拋出 INVALID_PARAM
? 拋出 PENDING_REQUEST
? 拋出 CLIENT_REQUIRES_UPDATE
返回值: Promise 如果玩家成功訂閱游戲機(jī)器人,將返回 resolve;如果失敗或玩家選擇不訂閱,將返回 reject.
getName()
用戶(hù)在Facebook上的的名字,使用用戶(hù)的語(yǔ)言種類(lèi)顯示。
注意,該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
代碼示例:
//該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
var playerName = FBInstant.player.getName();
返回值:string,用戶(hù)的名字
getPhoto()
用戶(hù)頭像的鏈接地址。頭像的圖片始終為正方形,尺寸最小為200x200。建議在游戲中使用的時(shí)候,先將圖像縮放到所需的大小。
注意,該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
警告:由于跨域的問(wèn)題,在 canvas 里使用圖片會(huì)有問(wèn)題。要防止此情況,請(qǐng)將圖像的 cross-origin 屬性設(shè)置為 "anonymous"
代碼示例:
//該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
var playerImage = new Image();
playerImage.crossOrigin = 'anonymous';
playerImage.src = FBInstant.player.getPhoto();
返回值:string,用戶(hù)的頭像的鏈接地址
getDataAsync()
取回當(dāng)前用戶(hù)在FB平臺(tái)儲(chǔ)存的數(shù)據(jù)
參數(shù)
? keys Array <String> 一個(gè)用來(lái)檢索數(shù)據(jù)的key的數(shù)組
代碼示例:
FBInstant.player
.getDataAsync(['achievements', 'currentLife'])
.then(function(data) {
console.log('data is loaded');
var achievements = data['achievements'];
var currentLife = data['currentLife'];
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise <Object> 如果發(fā)送的Key存在,則通過(guò)Promise 返回儲(chǔ)存的數(shù)據(jù)對(duì)象.
setDataAsync()
把當(dāng)前用戶(hù)的數(shù)據(jù)儲(chǔ)存在FB平臺(tái)上。每個(gè)用戶(hù)可以在每個(gè)游戲里儲(chǔ)存1MB的數(shù)據(jù)。
代碼示例:
參數(shù)
? data Object 需要儲(chǔ)存的數(shù)據(jù),包含key-value的數(shù)據(jù)對(duì)象。對(duì)象只能包含可以序列化的值,任何不可序列化的值都會(huì)導(dǎo)致儲(chǔ)存失敗。
代碼示例:
FBInstant.player
.setDataAsync({
achievements: ['medal1', 'medal2', 'medal3'],
currentLife: 300,
})
.then(function() {
console.log('data is set');
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)數(shù)據(jù)提交了以后會(huì)返回一個(gè) promise。 注意:這個(gè)promise 并不意味著這個(gè)數(shù)據(jù)已經(jīng)被成功保存。它只是驗(yàn)證了數(shù)據(jù)的有效性,并且隨后會(huì)被保存。可以保證的是,在調(diào)用 player.getDataAsync 方法時(shí),這些設(shè)定的數(shù)據(jù)會(huì)生效。
flushDataAsync()
將用戶(hù)的數(shù)據(jù)立刻更新到云存儲(chǔ)。這個(gè)方法的調(diào)用成本較高,應(yīng)該主要用于關(guān)鍵的更改。非關(guān)鍵的更改應(yīng)該依賴(lài)于平臺(tái)來(lái)將它們儲(chǔ)存到后臺(tái)。注意: 當(dāng)該方法未完成時(shí),調(diào)用 player.setDataAsync 這個(gè)方法會(huì)被拒絕.
代碼示例:
FBInstant.player
.setDataAsync({
achievements: ['medal1', 'medal2', 'medal3'],
currentLife: 300,
})
.then(FBInstant.player.flushDataAsync)
.then(function() {
console.log('Data persisted to FB!');
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 數(shù)據(jù)儲(chǔ)存成功會(huì)返回一個(gè)promise,如果保存失敗則返回拒絕
getStatsAsync()
從云存儲(chǔ)中獲取當(dāng)前玩家數(shù)據(jù)。
參數(shù)
? keys Array <String>? 一個(gè)用來(lái)檢索狀態(tài)數(shù)據(jù)的key的數(shù)組(可選)。如果沒(méi)有參數(shù),將返回所有狀態(tài)
代碼示例:
FBInstant.player
.getStatsAsync(['level', 'zombiesSlain'])
.then(function(stats) {
console.log('stats are loaded');
var level = stats['level'];
var zombiesSlain = stats['zombiesSlain'];
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws CLIENT_UNSUPPORTED_OPERATION
返回值: Promise<Object> 輸入的數(shù)組作為鍵值的對(duì)象.
setStatsAsync()
把當(dāng)前玩家數(shù)據(jù)儲(chǔ)存到云空間里。
參數(shù)
? stats Object 一個(gè)包含了key-value的對(duì)象,將被持久化的存儲(chǔ)到云端,它可以在各種方法中使用。該對(duì)象只能使用數(shù)字作為value,任何非數(shù)值類(lèi)型都會(huì)導(dǎo)致存儲(chǔ)失敗。
代碼示例:
FBInstant.player
.setStatsAsync({
level: 5,
zombiesSlain: 27,
})
.then(function() {
console.log('data is set');
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws PENDING_REQUEST
- Throws CLIENT_UNSUPPORTED_OPERATION
返回值: Promise 當(dāng)數(shù)據(jù)提交了以后會(huì)返回一個(gè) promise。 注意:這個(gè)promise 并不意味著這個(gè)數(shù)據(jù)已經(jīng)被成功保存。它只是驗(yàn)證了數(shù)據(jù)的有效性,并且隨后會(huì)被保存。可以保證的是,在調(diào)用 player.getStatsAsync 方法時(shí),這些設(shè)定的數(shù)據(jù)會(huì)生效。
incrementStatsAsync()
把當(dāng)前玩家數(shù)據(jù)增量更新儲(chǔ)存到云空間里。
參數(shù)
? increments Object 一個(gè)包含了key-value的對(duì)象,它表明了哪個(gè) stat 的值會(huì)增量更新。該對(duì)象只能使用數(shù)字作為value,任何非數(shù)值類(lèi)型都會(huì)導(dǎo)致存儲(chǔ)失敗。
代碼示例:
FBInstant.player
.incrementStatsAsync({
level: 1,
zombiesSlain: 17,
rank: -1,
})
.then(function(stats) {
console.log('increments have been made! New values');
var level = stats['level'];
var zombiesSlain = stats['zombiesSlain'];
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws PENDING_REQUEST
- Throws CLIENT_UNSUPPORTED_OPERATION
返回值: Promise 當(dāng)數(shù)據(jù)提交了以后會(huì)返回一個(gè) promise。 注意:這個(gè)promise 并不意味著這個(gè)數(shù)據(jù)已經(jīng)被成功保存。它只是驗(yàn)證了數(shù)據(jù)的有效性,并且隨后會(huì)被保存??梢员WC的是,在調(diào)用 player.getStatsAsync 方法時(shí),這些設(shè)定的數(shù)據(jù)會(huì)生效。
getConnectedPlayersAsync()
獲取和當(dāng)前玩家有關(guān)聯(lián)的玩家列表信息(即好友列表)。
代碼示例:
var connectedPlayers = FBInstant.player.getConnectedPlayersAsync()
.then(function(players) {
console.log(players.map(function(player) {
return {
id: player.getID(),
name: player.getName(),
}
}));
});
// [{id: '123456789', name: 'Paul Atreides'}, {id: '987654321', name: 'Duncan Idaho'}]
- Throws NETWORK_FAILURE
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise <Object<ConnectedPlayer>返回一個(gè)promise,包含了關(guān)聯(lián)用戶(hù)對(duì)象的數(shù)據(jù)
context
包含當(dāng)前游戲環(huán)境的一些方法和屬性
getID()
當(dāng)前游戲來(lái)源的唯一id。它代表了當(dāng)前游戲是在哪玩的(例如:是在 messenger 的對(duì)話(huà)里還是 facebook 的網(wǎng)頁(yè)里)。如果是在獨(dú)立頁(yè)面玩的游戲,這個(gè)id值為 null。只有在 FBInstant.startGameAsync 方法被調(diào)用后,這個(gè)結(jié)果才能保證是正確的。
代碼示例:
//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里。
var contextID = FBInstant.context.getID();
返回值 string,當(dāng)前游戲環(huán)境的id。
getType()
當(dāng)前游戲的環(huán)境類(lèi)型。
代碼示例:
//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里。
var contextType = FBInstant.context.getType();
返回值 ("POST" | "THREAD" | "GROUP" | "SOLO") 當(dāng)前游戲環(huán)境的類(lèi)型。
isSizeBetween()
用這個(gè)方法來(lái)判斷當(dāng)前游戲環(huán)境中游戲參與者的數(shù)量是否介于指定的最小值和最大值之間。
如果其中一個(gè)邊界為空,則只對(duì)另一個(gè)邊界進(jìn)行檢查。在當(dāng)前游戲中第一次調(diào)用后,以后永遠(yuǎn)返回這個(gè)結(jié)果,不管參數(shù)如何改變。直到游戲環(huán)境發(fā)生改變,才會(huì)重置查詢(xún)結(jié)果。
參數(shù)
? minSize number 要查詢(xún)的環(huán)境值的最小值。
? maxSize number 要查詢(xún)的環(huán)境值的最大值。
代碼示例:
console.log(FBInstant.context.isSizeBetween(3, 5)); //(Context size = 4)
// {answer: true, minSize: 3, maxSize: 5}
console.log(FBInstant.context.isSizeBetween(5, 7)); //(Context size = 4)
// {answer: false, minSize: 5, maxSize: 7}
console.log(FBInstant.context.isSizeBetween(2, 10));// (Context size = 3)
// {answer: true, minSize: 2, maxSize: 10}
console.log(FBInstant.context.isSizeBetween(4, 8));// (Still in same context)
// {answer: true, minSize: 2, maxSize: 10}
console.log(FBInstant.context.isSizeBetween(3, null)); //(Context size = 4)
// {answer: true, minSize: 3, maxSize: null}
console.log(FBInstant.context.isSizeBetween(null, 3)); (Context size = 4)
// {answer: false, minSize: null, maxSize: 3}
console.log(FBInstant.context.isSizeBetween("test", 5)); (Context size = 4)
// null
console.log(FBInstant.context.isSizeBetween(0, 100)); (Context size = null)
// null
返回值 ContextSizeResponse。
switchAsync()
請(qǐng)求切換到指定的游戲環(huán)境。如果玩家沒(méi)有進(jìn)入該環(huán)境的權(quán)限,或者玩家沒(méi)有提供進(jìn)入游戲的許可,該方法都會(huì)被拒絕。如果成功切換到指定游戲環(huán)境,將會(huì)返回一個(gè) promise.
參數(shù)
? id string 想要進(jìn)入的環(huán)境ID
代碼示例:
console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
.switchAsync('1234567890')
.then(function() {
console.log(FBInstant.context.getID());
// 1234567890
});
- Throws INVALID_PARAM
- Throws SAME_CONTEXT
- Throws NETWORK_FAILURE
- Throws USER_INPUT
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)游戲切換到指定環(huán)境,返回一個(gè) promise,失敗會(huì)被拒絕。
chooseAsync()
為玩家打開(kāi)一個(gè)游戲環(huán)境選擇列表。如果玩家選擇了一個(gè)可用的環(huán)境,客戶(hù)端將嘗試切到那個(gè)環(huán)境,如果成功,返回 resolve。如果玩家退出菜單,或者客戶(hù)端未能切換到新環(huán)境,返回 reject.
參數(shù)
? options Object? 提供可選擇的環(huán)境對(duì)象。
? options.filters Array< ContextFilter>? 設(shè)置一組應(yīng)用于環(huán)境對(duì)象的過(guò)濾器.
? options.maxSize number? 理想情況下,環(huán)境對(duì)象的最大值
? options.minSize number? 理想情況下,環(huán)境對(duì)象的最小值
代碼示例:
console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
.chooseAsync()
.then(function() {
console.log(FBInstant.context.getID());
// 1234567890
});
console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
.chooseAsync({
filters: ['NEW_CONTEXT_ONLY'],
minSize: 3,
})
.then(function() {
console.log(FBInstant.context.getID());
// 1234567890
});
- Throws INVALID_PARAM
- Throws SAME_CONTEXT
- Throws NETWORK_FAILURE
- Throws USER_INPUT
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)游戲切換到指定環(huán)境,返回一個(gè) promise,失敗會(huì)返回reject(例如,用戶(hù)取消了對(duì)話(huà)框)
createAsync()
在當(dāng)前玩家和指定玩家之間,嘗試創(chuàng)建或切換一個(gè)環(huán)境。如果指定玩家不能玩這個(gè)游戲,或者玩家決絕進(jìn)入新環(huán)境,則返回 recject。如果成功切換到新游戲的環(huán)境時(shí),則返回 resolve。
參數(shù)
? playerID string 用戶(hù)的 ID
代碼示例:
console.log(FBInstant.context.getID());
// 1122334455
FBInstant.context
.createAsync('12345678')
.then(function() {
console.log(FBInstant.context.getID());
// 5544332211
});
- Throws INVALID_PARAM
- Throws SAME_CONTEXT
- Throws NETWORK_FAILURE
- Throws USER_INPUT
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)游戲成功切換到指定環(huán)境,返回一個(gè) promise 的 resolve,失敗會(huì)返回reject
getPlayersAsync()
獲取當(dāng)前環(huán)境中正在玩游戲的玩家列表(在過(guò)去 90 天內(nèi)玩過(guò)游戲的用戶(hù)),它可能包含當(dāng)前玩家的信息。
代碼示例:
var contextPlayers = FBInstant.context.getPlayersAsync()
.then(function(players) {
console.log(players.map(function(player) {
return {
id: player.getID(),
name: player.getName(),
}
}));
});
// [{id: '123456789', name: 'Luke'}, {id: '987654321', name: 'Leia'}]
- Throws NETWORK_FAILURE
- Throws CLIENT_REQUIRES_UPDATE
- Throws INVALID_OPERATION
返回 Promise <Array<ContextPlayer>>
payments
【內(nèi)測(cè)】包含與支付和購(gòu)買(mǎi)游戲產(chǎn)品相關(guān)的功能和屬性。
getCatalogAsync()
獲取游戲的產(chǎn)品目錄。
代碼示例:
FBInstant.payments.getCatalogAsync().then(function (catalog) {
console.log(catalog); // [{productID: '12345', ...}, ...]
});
- Throws CLIENT_UNSUPPORTED_OPERATION
- Throws PAYMENTS_NOT_INITIALIZED
- Throws NETWORK_FAILURE
返回值 Promise,注冊(cè)到游戲的一組產(chǎn)品
purchaseAsync()
開(kāi)始特定產(chǎn)品的購(gòu)買(mǎi)流程。 如果在FBInstant.startGameAsync()解析之前調(diào)用,將返回 reject。
參數(shù)
? playerID purchaseConfig 購(gòu)買(mǎi)的配置文件
代碼示例:
FBInstant.payments.purchaseAsync({
productID: '12345',
developerPayload: 'foobar',
}).then(function (purchase) {
console.log(purchase);
// {productID: '12345', purchaseToken: '54321', developerPayload: 'foobar', ...}
});
- Throws CLIENT_UNSUPPORTED_OPERATION
- Throws PAYMENTS_NOT_INITIALIZED
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws INVALID_OPERATION
返回值 Promise,當(dāng)玩家成功購(gòu)買(mǎi)產(chǎn)品時(shí)返回 resolve。 失敗返回 reject。
getPurchasesAsync()
獲取玩家未消費(fèi)的所有購(gòu)買(mǎi)商品。最佳做法是,游戲在客戶(hù)端表明已準(zhǔn)備好執(zhí)行支付相關(guān)操作時(shí),立即獲取當(dāng)前玩家的購(gòu)買(mǎi)商品。游戲 隨后可處理和消費(fèi)正在等待被消費(fèi)的任何購(gòu)買(mǎi)商品。
代碼示例:
FBInstant.payments.getPurchasesAsync().then(function (purchases) {
console.log(purchase);
// [{productID: '12345', ...}, ...]
});
- Throws CLIENT_UNSUPPORTED_OPERATION
- Throws PAYMENTS_NOT_INITIALIZED
- Throws NETWORK_FAILURE
返回值 Promise,玩家為游戲購(gòu)買(mǎi)的一組商品。
consumePurchaseAsync()
消費(fèi)當(dāng)前玩家擁有的特定購(gòu)買(mǎi)商品。在為玩家配置商品效果之前,游戲應(yīng)先請(qǐng)求消費(fèi)已購(gòu)買(mǎi)的商品。購(gòu)買(mǎi)的商品成功消費(fèi)后,游戲應(yīng)立即向玩家呈現(xiàn)購(gòu)買(mǎi)商品的效果。
參數(shù)
? purchaseToken string 要使用的購(gòu)買(mǎi)商品的購(gòu)買(mǎi)口令。
代碼示例:
FBInstant.payments.consumePurchaseAsync('54321').then(function () {
// Purchase successfully consumed!
// Game should now provision the product to the player
});
- Throws CLIENT_UNSUPPORTED_OPERATION
- Throws PAYMENTS_NOT_INITIALIZED
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
返回值 Promise,此 promise 在成功消費(fèi)已購(gòu)買(mǎi)的商品時(shí)被解析。
onReady()
設(shè)置一個(gè)回調(diào),在支付操作可進(jìn)行時(shí)觸發(fā)。
參數(shù)
? callback Function 當(dāng)支付可進(jìn)行時(shí)執(zhí)行的回調(diào)函數(shù)。
代碼示例:
FBInstant.payments.onReady(function () {
console.log('Payments Ready!')
});
返回值 void
getLocale()
獲取用戶(hù)的語(yǔ)言設(shè)置。 例如 zh_CN、 en_US
全部的地域信息數(shù)據(jù),請(qǐng)看此鏈接 https://www.facebook.com/translations/FacebookLocales.xml 。使用這個(gè)值用來(lái)確定游戲中應(yīng)該顯示那種語(yǔ)言。
該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
代碼示例:
// 該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
var locale = FBInstant.getLocale(); // 'en_US'
返回值 string,當(dāng)前地域信息。
getPlatform()
當(dāng)前游戲運(yùn)行在哪個(gè)平臺(tái)。該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
代碼示例:
該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
var platform = FBInstant.getPlatform(); // 'IOS'
返回值 Platform?,當(dāng)前游戲運(yùn)行的平臺(tái)("IOS" | "ANDROID" | "WEB" | "MOBILE_WEB")
getSDKVersion()
獲取SDK的版本號(hào),用字符串來(lái)表示。
代碼示例:
var sdkVersion = FBInstant.getSDKVersion(); // '4.1'
返回值 string,SDK 的版本號(hào)。
initializeAsync()
初始化SDK,應(yīng)當(dāng)在所有其他的API使用前調(diào)用。
代碼示例:
FBInstant.initializeAsync().then(function() {
// 在初始化完成之前,下面這些屬性都是無(wú)法得到的。必須要放在這個(gè)回調(diào)方法里。
var locale = FBInstant.getLocale(); // 'en_US'
var platform = FBInstant.getPlatform(); // 'IOS'
var sdkVersion = FBInstant.getSDKVersion(); // '4.1'
var playerID = FBInstant.player.getID();
});
- Throws INVALID_OPERATION
返回值 Promise 當(dāng)sdk 初始化完成后會(huì)返回 promise
setLoadingProgress()
通知平臺(tái)游戲初始化資源加載的進(jìn)度
參數(shù)
? percentage number 0到100之間的數(shù)字
代碼示例:
FBInstant.setLoadingProgress(50); // 50%的資源被加載了
返回值 void
getSupportedAPIs()
提供當(dāng)前客戶(hù)端支持的 API 函數(shù)列表。
代碼示例:該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
//該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
FBInstant.getSupportedAPIs();
// ['getLocale', 'initializeAsync', 'player.getID', 'context.getType', ...]
返回值 Array<string> 返回客戶(hù)端支持的 API 函數(shù)列表
getEntryPointData()
返回與游戲啟動(dòng)的入口點(diǎn)相關(guān)的數(shù)據(jù)對(duì)象。
對(duì)象的內(nèi)容是開(kāi)發(fā)人員定義的,并且可以在不同平臺(tái)的入口點(diǎn)觸發(fā)。在老的移動(dòng)客戶(hù)端上會(huì)返回 null。如果特定的入口點(diǎn)沒(méi)有數(shù)據(jù)時(shí),也會(huì)返回 null。
代碼示例:
//該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
const entryPointData = FBInstant.getEntryPointData();
返回值 Object 與當(dāng)前入口點(diǎn)相關(guān)的數(shù)據(jù)。
getEntryPointAsync()
返回與游戲啟動(dòng)的入口點(diǎn)相關(guān)的數(shù)據(jù)對(duì)象。
代碼示例:
//該方法必須在 FBInstant.initializeAsync() 調(diào)用之后使用
FBInstant.getEntryPointAsync();
// 'admin_message'
返回值: String 用戶(hù)從哪個(gè)入口進(jìn)入的游戲
setSessionData()
為當(dāng)前環(huán)境設(shè)置游戲的數(shù)據(jù)。
每當(dāng)游戲想要更新當(dāng)前會(huì)話(huà)的數(shù)據(jù)時(shí),可以調(diào)用該方法。
參數(shù)
? sessionData Object 一個(gè)任意的數(shù)據(jù)對(duì)象,必須小于1000個(gè)字符
代碼示例:
FBInstant.setSessionData({coinsEarned: 10, eventsSeen: ['start', ...]});
返回值 void
startGameAsync()
這表明游戲已經(jīng)加載完資源,可以開(kāi)始玩了。當(dāng)返回 promise 的 resolve 時(shí),環(huán)境信息將會(huì)更新。
代碼示例:
FBInstant.startGameAsync().then(function() {
myGame.start();
});
- Throws INVALID_PARAM
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)游戲應(yīng)當(dāng)開(kāi)始玩的時(shí)候會(huì)返回 promise
shareAsync()
這將啟動(dòng)一個(gè)對(duì)話(huà)框,讓用戶(hù)共享指定的內(nèi)容,可能是一個(gè) Messenger 里的消息,或者是用戶(hù)時(shí)間線(xiàn)上的一個(gè)帖子。一個(gè)blob數(shù)據(jù)可以附加在分享上,當(dāng)游戲通過(guò)分享啟動(dòng)時(shí),可以通過(guò) FBInstant.getEntryPointData() 方法獲取。這個(gè)數(shù)據(jù)必須少于1000個(gè)字符。用戶(hù)可以選擇取消分享,或者關(guān)閉對(duì)話(huà)框,但不論用戶(hù)是否真的分享了內(nèi)容,都會(huì)返回 promise 的 resolve。
參數(shù)
? payload SharePayload 要分享的內(nèi)容,請(qǐng)看示例代碼
代碼示例:
FBInstant.shareAsync({
intent: 'REQUEST',
image: base64Picture,
text: 'X is asking for your help!',
data: { myReplayData: '...' },
}).then(function() {
// 繼續(xù)游戲
});
- 拋出 INVALID_PARAM
- 拋出 NETWORK_FAILURE
- 拋出 PENDING_REQUEST
- 拋出 CLIENT_REQUIRES_UPDATE
- 拋出 INVALID_OPERATION
返回值 Promise 不管分享成功或失敗,都會(huì)返回 promise 的 resolve
updateAsync()
通知Facebook在游戲中發(fā)生的更新。這將暫時(shí)把控制權(quán)交給Facebook,而Facebook將決定根據(jù)更新的內(nèi)容來(lái)做什么。當(dāng)Facebook將控制權(quán)歸還給游戲時(shí),將返回 promise 的 resolve/reject.
參數(shù)
? payload **CustomUpdatePayload ** 要更新的內(nèi)容
代碼示例:
//這將發(fā)送一個(gè)自定義更新。如果游戲是運(yùn)行在一個(gè) messenger 的對(duì)話(huà)里,
//它將發(fā)送一條帶有圖文的消息到指定的對(duì)話(huà)里。
//如果其他用戶(hù)通過(guò)這條消息啟動(dòng)了游戲,
//這些游戲會(huì)話(huà)將可以通過(guò) FBInstant.getEntryPointData() 方法獲取附加的 blob 數(shù)據(jù)。
FBInstant.updateAsync({
action: 'CUSTOM',
cta: 'Join The Fight',
template:'join_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() {
//當(dāng)消息發(fā)送后,關(guān)閉游戲
FBInstant.quit();
});
- 拋出 INVALID_PARAM
- 拋出 PENDING_REQUEST
- 拋出 INVALID_OPERATION
返回值 Promise 當(dāng)Facebook將控制權(quán)歸還給游戲時(shí)返回 promise
switchGameAsync()
請(qǐng)求客戶(hù)端切換到另一個(gè)小游戲。切換 失敗時(shí),API 將拒絕;成功時(shí),客戶(hù)端將加載 新游戲。
參數(shù)
? appID **string ** 要切換到的小游戲相應(yīng)的應(yīng)用編號(hào)。 應(yīng)用必須為小游戲,且必須和當(dāng)前游戲 屬于同一商家所有。要將不同游戲關(guān)聯(lián)到相同商家, 您可使用商務(wù)管理平臺(tái):https://developers.facebook.com/docs/apps/business-manager#update-business
? data string 可選的附加數(shù)據(jù)。會(huì)被設(shè)置為要切換到的游戲的入口點(diǎn)數(shù)據(jù)。轉(zhuǎn)變?yōu)樽址畷r(shí),必須小于或等于 1000 個(gè)字符。
代碼示例:
FBInstant.switchGameAsync('12345678').catch(function (e) {
// Handle game change failure
});
- 拋出 USER_INPUT
- 拋出 INVALID_PARAM
- 拋出 PENDING_REQUEST
- 拋出 CLIENT_REQUIRES_UPDATE
返回值 Promise 當(dāng)Facebook將控制權(quán)歸還給游戲時(shí)返回 promise
canCreateShortcutAsync()
用戶(hù)是否有資格創(chuàng)建快捷方式。
如果 createShortcutAsync 已經(jīng)被調(diào)用了或者用戶(hù)沒(méi)有資格創(chuàng)建快捷方式,返回 false.
代碼示例:
FBInstant.canCreateShortcutAsync()
.then(function(canCreateShortcut) {
if (canCreateShortcut) {
FBInstant.createShortcutAsync()
.then(function() {
// Shortcut created
})
.catch(function() {
// Shortcut not created
});
}
});
- 拋出 PENDING_REQUEST
- 拋出 CLIENT_REQUIRES_UPDATE
- 拋出 INVALID_OPERATION
返回值 Promise 如果游戲允許玩家創(chuàng)建快捷方式,返回 true,否則返回 false
createShortcutAsync()
如果用戶(hù)有資格,提示用戶(hù)創(chuàng)建游戲的快捷方式。每次會(huì)話(huà)只能調(diào)用一次。
代碼示例:
FBInstant.canCreateShortcutAsync()
.then(function(canCreateShortcut) {
if (canCreateShortcut) {
FBInstant.createShortcutAsync()
.then(function() {
// Shortcut created
})
.catch(function() {
// Shortcut not created
});
}
});
- 拋出 USER_INPUT
- 拋出 PENDING_REQUEST
- 拋出 CLIENT_REQUIRES_UPDATE
- 拋出 INVALID_OPERATION
返回值 Promise
quit()
退出游戲
代碼示例:
FBInstant.quit();
返回值 void
logEvent()
使用 Facebook 的分析系統(tǒng)來(lái)記錄一個(gè)應(yīng)用的事件消息,更多細(xì)節(jié)請(qǐng)參見(jiàn): https://developers.facebook.com/docs/javascript/reference/v2.8#app_events
參數(shù)
? eventName string 事件的名稱(chēng)。必須是2到40個(gè)字符,只能包含'_', '-', ' '和字母數(shù)字的字符。
? valueToSum number 一個(gè)可選的數(shù)字,F(xiàn)B分析可以計(jì)算它。
? parameters Object 一個(gè)可選的對(duì)象,它可以包含多達(dá)25個(gè) key-value,以記錄事件。key 必須是2-40個(gè)字符,只能包含'_', '-', ' '和字母數(shù)字的字符。 Value 必須少于100個(gè)字符。
代碼示例:
var logged = FBInstant.logEvent(
'my_custom_event',
42,
{custom_property: 'custom_value'},
);
返回值 APIError 如果事件記錄失敗,返回錯(cuò)誤信息,否則返回 null.
onPause()
設(shè)置一個(gè)暫停事件觸發(fā)時(shí)調(diào)用的方法。
參數(shù)
? func Function 當(dāng)暫停事件觸發(fā)時(shí)調(diào)用的方法。
FBInstant.onPause(function() {
console.log('Pause event was triggered!');
})
返回值 void
getInterstitialAdAsync()
嘗試創(chuàng)建插屏廣告的實(shí)例。此實(shí)例可在之后預(yù)載和顯示。
參數(shù)
? placementID String 在 Audience Network 設(shè)置的位置ID。
代碼示例:
FBInstant.getInterstitialAdAsync(
'my_placement_id',
).then(function(interstitial) {
interstitial.getPlacementID(); // 'my_placement_id'
});
- 拋出 ADS_TOO_MANY_INSTANCES
- 拋出 CLIENT_UNSUPPORTED_OPERATION
返回值: Promise 成功了返回 resolves,失敗了返回 reject
getRewardedVideoAsync()
嘗試創(chuàng)建一個(gè)激勵(lì)視頻廣告的實(shí)例。此實(shí)例可在之后預(yù)載和顯示。
參數(shù)
? placementID string 在 Audience Network 設(shè)置的位置ID。
代碼示例:
FBInstant.getRewardedVideoAsync(
'my_placement_id',
).then(function(rewardedVideo) {
rewardedVideo.getPlacementID(); // 'my_placement_id'
});
- 拋出 ADS_TOO_MANY_INSTANCES
- 拋出 CLIENT_UNSUPPORTED_OPERATION
返回值: Promise 成功了返回 resolves,失敗了返回 reject
matchPlayerAsync()
[封閉公測(cè)] 嘗試將當(dāng)前玩家與等待他人加入游戲的其他玩家進(jìn)行匹配。如果匹配成功,將為匹配的玩家創(chuàng)建一個(gè)新的 Messenger 群聊,且玩家的游戲環(huán)境將切換到該群聊。
參數(shù)
- matchTag string 玩家的可選額外信息,可用于將玩家 加到具有相似玩家的群聊中。具有完全相同標(biāo)簽的玩家才會(huì)加入同一群聊。標(biāo)簽只能包含字母、數(shù)字和下劃線(xiàn),且長(zhǎng)度不能超過(guò) 100 個(gè)字符。
- switchContextWhenMatched boolean 可選的額外參數(shù), 指定當(dāng)找到匹配時(shí),是否將玩家立即切換到新環(huán)境。默認(rèn)設(shè)置為 false,亦即玩家在匹配成功后,需要明確點(diǎn)擊玩游戲按鈕才會(huì)切換到新環(huán)境。
代碼示例:
FBInstant
.matchPlayerAsync('level1')
.then(function() {
console.log(FBInstant.context.getID());
// 12345
});
FBInstant
.matchPlayerAsync()
.then(function() {
console.log(FBInstant.context.getID());
// 3456
});
FBInstant
.matchPlayerAsync(null, true)
.then(function() {
console.log(FBInstant.context.getID());
// 3456
});
- 拋出 INVALID_PARAM
- 拋出 NETWORK_FAILURE
- 拋出 USER_INPUT
- 拋出 PENDING_REQUEST
- 拋出 CLIENT_UNSUPPORTED_OPERATION
- 拋出 INVALID_OPERATION
返回值: Promise 當(dāng)玩家已加入群聊并切換到 群聊環(huán)境時(shí),此 promise 被解析。
checkCanPlayerMatchAsync()
[封閉公測(cè)] 檢查當(dāng)前玩家是否符合 matchPlayerAsync API 的條件。
代碼示例:
FBInstant
.checkCanPlayerMatchAsync()
.then(canMatch => {
if (canMatch) {
FBInstant.matchPlayerAsync('level1');
}
});
- 拋出 NETWORK_FAILURE
- 拋出 CLIENT_UNSUPPORTED_OPERATION
返回值: Promise 當(dāng)玩家符合與其他玩家匹配的條件時(shí), 此 promise 被解析為 true,否則解析為 false。
getLeaderboardAsync()
獲取這款小游戲中的特有排行榜。
參數(shù)
? name string 小游戲的每個(gè)排行榜必須具有唯一的名稱(chēng)
代碼示例
FBInstant.getLeaderboardAsync('my_awesome_leaderboard')
.then(leaderboard => {
console.log(leaderboard.getName()); // 'my_awesome_leaderboard'
});
- 拋出 LEADERBOARD_NOT_FOUND
- 拋出 NETWORK_FAILURE
- 拋出 CLIENT_UNSUPPORTED_OPERATION
- 拋出 INVALID_OPERATION
- 拋出 INVALID_PARAM
返回值: Promise 此 promise 在獲得匹配的排行榜時(shí)被解析, 在未找到匹配時(shí)被拒絕。