如果您需要 SDK
對應(yīng)的 js
和 d.ts
文件舰始,可以在這個 Github 倉下載 FBInstantGameDTS
FBInstant
Instant Games SDK 的頂級命名空間.
player
包含當(dāng)前用戶信息的一些方法和屬性
getID()
玩家的唯一標(biāo)識ID氛堕。一個Facebook用戶的id是不會改變的挽铁。同一個Facebook的用戶双戳,在不同的游戲里會有不用的id益楼。
注意择葡,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。
代碼示例:
// 該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var playerID = FBInstant.player.getID();
返回值:string击你,用戶的唯一ID
getSignedPlayerInfoAsync( )
獲取玩家的唯一ID和一個簽名玉组,簽名用來驗(yàn)證該 ID 來自 Facebook ,沒有被篡改丁侄。該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里惯雳。
參數(shù)
? requestPayload String 一個由開發(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);
});
? Throws INVALID_PARAM
? Throws NETWORK_FAILURE
? Throws CLIENT_REQUIRES_UPDATE
返回值: Promise<SignedPlayerInfo> 一個帶有 signedplayerinfo 對象的 Promise.
getName()
用戶的名字拙吉。
注意潮孽,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。
代碼示例:
//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里筷黔。
var playerName = FBInstant.player.getName();
返回值:string往史,用戶的名字
getPhoto()
用戶頭像的鏈接地址。頭像的圖片始終為正方形佛舱,尺寸最小為200x200椎例。建議在游戲中使用的時候挨决,先將圖像縮放到所需的大小。
注意订歪,該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里脖祈。
警告:由于跨域的問題,在 canvas 里使用圖片會有問題刷晋。要防止此情況盖高,請將圖像的 cross-origin 屬性設(shè)置為 "anonymous"
代碼示例:
//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。
var playerImage = new Image();
playerImage.crossOrigin = 'anonymous';
playerImage.src = FBInstant.player.getPhoto();
返回值:string眼虱,用戶的頭像的鏈接地址
getDataAsync()
取回當(dāng)前用戶在FB平臺儲存的數(shù)據(jù)
參數(shù)
? keys Array <String> 一個用來檢索數(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存在喻奥,則通過Promise 返回儲存的數(shù)據(jù)對象.
setDataAsync()
把當(dāng)前用戶的數(shù)據(jù)儲存在FB平臺上。每個用戶可以在每個游戲里儲存1MB的數(shù)據(jù)蒙幻。
代碼示例:
參數(shù)
? data Object 需要儲存的數(shù)據(jù)映凳,包含key-value的數(shù)據(jù)對象胆筒。對象只能包含可以序列化的值邮破,任何不可序列化的值都會導(dǎo)致儲存失敗。
代碼示例:
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ù)提交了以后會返回一個 promise仆救。 注意:這個promise 并不意味著這個數(shù)據(jù)已經(jīng)被成功保存抒和。它只是驗(yàn)證了數(shù)據(jù)的有效性,并且隨后會被保存彤蔽〈菝В可以保證的是,在調(diào)用 player.getDataAsync 方法時顿痪,這些設(shè)定的數(shù)據(jù)會生效镊辕。
flushDataAsync()
將用戶的數(shù)據(jù)立刻更新到云存儲。這個方法是開銷很大蚁袭,應(yīng)該主要用于關(guān)鍵的更改征懈。非關(guān)鍵的更改應(yīng)該依賴于平臺來將它們儲存到后臺。注意: 當(dāng)該方法未完成時揩悄,調(diào)用 player.setDataAsync 這個方法會被拒絕.
代碼示例:
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ù)儲存成功會返回一個promise卖哎,如果保存失敗則返回拒絕
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>返回一個promise删性,包含了關(guān)聯(lián)用戶對象的數(shù)據(jù)
context
包含當(dāng)前游戲環(huán)境的一些方法和屬性
getID()
當(dāng)前游戲來源的唯一id亏娜。它代表了當(dāng)前游戲是在哪玩的(例如:是在 messenger 的對話里還是 facebook 的網(wǎng)頁里)。如果是在獨(dú)立頁面玩的游戲蹬挺,這個id值為 null维贺。只有在 FBInstant.startGameAsync 方法被調(diào)用后,這個結(jié)果才能保證是正確的巴帮。
代碼示例:
//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里溯泣。
var contextID = FBInstant.context.getID();
返回值 string群发,當(dāng)前游戲環(huán)境的id。
getType()
當(dāng)前游戲的環(huán)境類型发乔。
代碼示例:
//該方法必須放在 FBInstant.startGameAsync() 的回調(diào)里熟妓。
var contextType = FBInstant.context.getType();
返回值 ("POST" | "THREAD" | "GROUP" | "SOLO") 當(dāng)前游戲環(huán)境的類型。
isSizeBetween()
這個方法決定了當(dāng)前游戲環(huán)境中游戲參與者的數(shù)量是否介于指定的最小值和最大值之間栏尚。
如果其中一個邊界為空起愈,則只對另一個邊界進(jìn)行檢查。在當(dāng)前游戲中第一次調(diào)用后译仗,以后永遠(yuǎn)返回這個結(jié)果抬虽,不管參數(shù)如何改變。直到游戲環(huán)境發(fā)生改變纵菌,才會重置查詢結(jié)果阐污。
參數(shù)
? minSize number 要查詢的環(huán)境值的最小值。
? maxSize number 要查詢的環(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()
請求切換到指定的游戲環(huán)境。如果玩家沒有進(jìn)入該環(huán)境的權(quán)限序苏,或者玩家沒有提供進(jìn)入游戲的許可手幢,該方法都會被拒絕。如果成功切換到指定游戲環(huán)境忱详,將會返回一個 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)境围来,返回一個 promise,失敗會被拒絕匈睁。
chooseAsync()
為玩家打開一個游戲環(huán)境選擇列表监透。如果玩家選擇了一個可用的環(huán)境,客戶端將嘗試切到那個環(huán)境航唆,如果成功胀蛮,返回 resolve。如果玩家退出菜單佛点,或者客戶端未能切換到新環(huán)境醇滥,返回 reject.
參數(shù)
? options Object 提供可選擇的環(huán)境對象。
? options.filters Array<ContextFilter>設(shè)置一組應(yīng)用于環(huán)境對象的過濾器.
? options.maxSize number 理想情況下超营,環(huán)境對象的最大值
? options.minSize number 理想情況下鸳玩,環(huán)境對象的最小值
代碼示例:
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)境,返回一個 promise演闭,失敗會返回reject(例如不跟,用戶取消了對話框)
createAsync()
在當(dāng)前玩家和指定玩家之間,嘗試創(chuàng)建或切換一個環(huán)境米碰。如果指定玩家不能玩這個游戲窝革,或者玩家決絕進(jìn)入新環(huán)境购城,則返回 recject。如果成功切換到新游戲的環(huán)境時虐译,則返回 resolve瘪板。
參數(shù)
? playerID string 用戶的 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)境,返回一個 promise 的 resolve漆诽,失敗會返回reject
getPlayersAsync()
獲取當(dāng)前環(huán)境中正在玩游戲的玩家列表侮攀,它可能包含當(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>>
getLocale()
獲取用戶的地域信息厢拭。 例如 zh_CN兰英、 en_US
全部的地域信息數(shù)據(jù),請看此鏈接 https://www.facebook.com/translations/FacebookLocales.xml 供鸠。使用這個值用來確定游戲中應(yīng)該顯示那種語言畦贸。
該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里。
代碼示例:
// 該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var locale = FBInstant.getLocale(); // 'en_US'
返回值 string楞捂,當(dāng)前地域信息薄坏。
getPlatform()
當(dāng)前游戲運(yùn)行在哪個平臺。該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
代碼示例:
該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
var platform = FBInstant.getPlatform(); // 'IOS'
返回值 string泡一,當(dāng)前游戲運(yùn)行的平臺("IOS" | "ANDROID" | "WEB" | "MOBILE_WEB")
getSDKVersion()
獲取SDK的版本號,用字符串來表示觅廓。
代碼示例:
var sdkVersion = FBInstant.getSDKVersion(); // '4.1'
返回值 string杈绸,SDK 的版本號帖蔓。
initializeAsync()
初始化SDK,應(yīng)當(dāng)在所有其他的API使用前調(diào)用瞳脓。
代碼示例:
FBInstant.initializeAsync().then(function() {
// 在初始化完成之前,下面這些屬性都是無法得到的埋酬。必須要放在這個回調(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 初始化完成后會返回 promise
setLoadingProgress()
通知平臺游戲初始化資源加載的進(jìn)度
參數(shù)
? percentage number 0到100之間的數(shù)字
代碼示例:
FBInstant.setLoadingProgress(50); // 50%的資源被加載了
返回值 void
getSupportedAPIs()
提供當(dāng)前客戶端支持的 API 函數(shù)列表烧栋。
代碼示例:
//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
FBInstant.getSupportedAPIs();
// ['getLocale', 'initializeAsync', 'player.getID', 'context.getType', ...]
返回值 Array<string> 返回客戶端支持的 API 函數(shù)列表
getEntryPointData()
返回與游戲啟動的入口點(diǎn)相關(guān)的數(shù)據(jù)對象写妥。
對象的內(nèi)容是開發(fā)人員定義的审姓,并且可以在不同平臺的入口點(diǎn)觸發(fā)。在老的移動客戶端上會返回 null扎筒。如果特定的入口點(diǎn)沒有數(shù)據(jù)時,也會返回 null奥溺。
代碼示例:
//該方法必須放在 FBInstant.initializeAsync() 的回調(diào)里
const entryPointData = FBInstant.getEntryPointData();
返回值 Object 與當(dāng)前入口點(diǎn)相關(guān)的數(shù)據(jù)骨宠。
setSessionData()
為當(dāng)前環(huán)境設(shè)置游戲的數(shù)據(jù)。
每當(dāng)游戲想要更新當(dāng)前會話的數(shù)據(jù)時壶唤,可以調(diào)用該方法棕所。
參數(shù)
? sessionData Object 一個任意的數(shù)據(jù)對象琳省,必須小于1000個字符
代碼示例:
FBInstant.setSessionData({coinsEarned: 10, eventsSeen: ['start', ...]});
返回值 void
startGameAsync()
這表明游戲已經(jīng)加載完資源,可以開始玩了击费。當(dāng)返回 promise 的 resolve 時桦他,環(huán)境信息將會更新。
代碼示例:
FBInstant.startGameAsync().then(function() {
myGame.start();
});
- Throws INVALID_PARAM
- Throws CLIENT_REQUIRES_UPDATE
返回值 Promise當(dāng)游戲應(yīng)當(dāng)開始玩的時候會返回 promise
shareAsync()
這將啟動一個對話框圆仔,讓用戶共享指定的內(nèi)容蔫劣,可能是一個 Messenger 里的消息,或者是用戶時間線上的一個帖子歪沃。一個blob數(shù)據(jù)可以附加在分享上嫌松,當(dāng)游戲通過分享啟動時豆瘫,可以通過 FBInstant.getEntryPointData() 方法獲取。這個數(shù)據(jù)必須少于1000個字符育灸。用戶可以選擇取消分享,或者關(guān)閉對話框儿子,但不論用戶是否真的分享了內(nèi)容砸喻,都會返回 promise 的 resolve。
參數(shù)
? payload SharePayload 要分享的內(nèi)容愉适,請看示例代碼
代碼示例:
FBInstant.shareAsync({
intent: 'REQUEST',
image: base64Picture,
text: 'X is asking for your help!',
data: { myReplayData: '...' },
}).then(function() {
// 繼續(xù)游戲
});
- Throws INVALID_PARAM
- Throws NETWORK_FAILURE
- Throws PENDING_REQUEST
- Throws CLIENT_REQUIRES_UPDATE
- Throws INVALID_OPERATION
返回值 Promise 不管分享成功或失敗维咸,都會返回 promise 的 resolve
updateAsync()
通知Facebook在游戲中發(fā)生的更新惠爽。這將暫時把控制權(quán)交給Facebook,而Facebook將決定根據(jù)更新的內(nèi)容來做什么租副。當(dāng)Facebook將控制權(quán)歸還給游戲時较性,將返回 promise 的 resolve/reject.
參數(shù)
? payload **CustomUpdatePayload ** 要更新的內(nèi)容
代碼示例:
//這將發(fā)送一個自定義更新两残。如果游戲是運(yùn)行在一個 messenger 的對話里,
//它將發(fā)送一條帶有圖文的消息到指定的對話里。
//如果其他用戶通過這條消息啟動了游戲着逐,
//這些游戲會話將可以通過 FBInstant.getEntryPointData() 方法獲取附加的 blob 數(shù)據(jù)耸别。
FBInstant.updateAsync({
action: 'CUSTOM',
cta: 'Join The Fight',
template:'join_fight',
image: base64Picture,
text: 'X just invaded Y\'s village!',
data: { myReplayData: '...' },
strategy: 'IMMEDIATE',
notification: 'NO_PUSH',
}).then(function() {
//當(dāng)消息發(fā)送后,關(guān)閉游戲
FBInstant.quit();
});
** Throws INVALID_PARAM
** Throws PENDING_REQUEST
返回值 Promise 當(dāng)Facebook將控制權(quán)歸還給游戲時返回 promise
quit()
退出游戲
代碼示例:
FBInstant.quit();
返回值 void
logEvent()
使用 Facebook 的分析系統(tǒng)來記錄一個應(yīng)用的事件消息慈迈,更多細(xì)節(jié)請參見: https://developers.facebook.com/docs/javascript/reference/v2.8#app_events
參數(shù)
? eventName string 事件的名稱痒留。必須是2到40個字符,只能包含'_', '-', ' '和字母數(shù)字的字符匾效。
? valueToSum number 一個可選的數(shù)字恤磷,F(xiàn)B分析可以計算它。
? parameters Object 一個可選的對象魔策,它可以包含多達(dá)25個 key-value河胎,以記錄事件。key 必須是2-40個字符搁吓,只能包含'_', '-', ' '和字母數(shù)字的字符堕仔。 Value 必須少于100個字符晌区。
代碼示例:
var logged = FBInstant.logEvent(
'my_custom_event',
42,
{custom_property: 'custom_value'},
);
返回值 CodeError 如果事件記錄失敗,返回錯誤信息恼五,否則返回 null.
onPause()
設(shè)置一個暫停事件觸發(fā)時調(diào)用的方法哭懈。
參數(shù)
? func Function 當(dāng)暫停事件觸發(fā)時調(diào)用的方法遣总。
返回值 void