Facebook InstantGame API v6.1 中文版

如果您需要 SDK 對(duì)應(yīng)的 jsd.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í)被拒絕。

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

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

  • 下周日是母親節(jié)。伊拉克小女孩在孤兒院水泥地這樣迎接。 此情此景,有何感受?敬情發(fā)稿,下周集登。
    珠江潮平閱讀 553評(píng)論 19 17
  • 小時(shí)候的夢(mèng)想就是當(dāng)個(gè)模特或者歌手,站在舞臺(tái)的感覺(jué)讓我feel倍兒棒??墒鞘菑氖裁磿r(shí)候開(kāi)始,開(kāi)始害怕站在舞臺(tái)上,害怕...
    雨水在飄閱讀 444評(píng)論 0 1
  • 午夜電臺(tái)里的故事 好聽(tīng)得像個(gè)夢(mèng) 海岸線(xiàn)把夢(mèng)帶到盡頭 沙子刻錄軌跡 海水擦去腳印 時(shí)間也消除一段故事 撥開(kāi)沙子找故事...
    chips_avz閱讀 141評(píng)論 0 1
  • 飲食、氣候和情緒,作用于人體之上,難易剛好,往往不及或過(guò),治病就是把狀態(tài)扶正到剛好。
    zhaodongbo閱讀 101評(píng)論 0 0
  • 萬(wàn)源市一位年逾7旬的老人,42年如一日照顧一位同齡的盲人村民,無(wú)怨無(wú)悔,任勞任怨,甚至曾經(jīng)為了從洪水中將其安全轉(zhuǎn)移...
    助盲通閱讀 404評(píng)論 0 0

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