Facebook开发者社区
标题: Facebook Instant Game 游戏开发更新文档API参考v6.2 [打印本页]
作者: jyj345 时间: 2018-8-16 11:24
标题: Facebook Instant Game 游戏开发更新文档API参考v6.2
Facebook 游戏开发更新文档API参考v6.2
更新日志1. 连接玩家得分条目 引入新Leaderboard.getConnectedPlayerEntriesAsync()API,从排行榜获取当前玩家连接玩家的得分条目。
FBInstantInstant Games SDK的顶级命名空间。
播放机包含与当前播放器相关的功能和属性。
getID()播放器的唯一标识符。Facebook用户的玩家ID将保持不变,并且范围限定为特定游戏。这意味着不同的游戏将为同一用户提供不同的玩家ID。在FBInstant.initializeAsync()解决之前,不应调用此函数。
例子
//应该在FBInstant.initializeAsync()//结算后调用此函数。var playerID = FBInstant 。球员。getID ();
getSignedPlayerInfoAsync()获取播放器的唯一标识符以及签名,该签名验证标识符确实来自Facebook而不会被篡改。在FBInstant.initializeAsync()解决之前,不应调用此函数。
参数
· requestPayload
字符串?开发人员指定的有效负载,包含在已签名的响应中。
例子
//应该在FBInstant.initializeAsync()//结算后调用此函数。FBInstant 。球员。getSignedPlayerInfoAsync ('my_metadata' )。然后(函数(结果){ // ID和签名的验证应该发生在服务器端。SendToMyServer (
结果。getPlayerID (),//相同的值FBInstant.player.getID()
结果。getSignature (),“GAIN_COINS ' ,100 ); });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
canSubscribeBotAsync()返回一个承诺,该承诺通过玩家是否可以订阅游戏机器人来解决。
例子
//应该在FBInstant.player.subscribeBotAsync()FBInstant 之前调用此函数。球员。canSubscribeBotAsync ()。然后(
can_subscribe => 控制台。日志(can_subscribe )); //'真'
返回
Promise < boolean >玩家是否可以订阅游戏机器人。开发人员只能在检查canSubscribeBotAsync()后调用subscribeBotAsync(),并且播放器只能在特定游戏中看到一次此机器人订阅对话框。
subscribeBotAsync()请求玩家订阅与游戏相关联的机器人。如果订阅失败,API将拒绝 - 否则,玩家将订阅游戏机器人。
例子
FBInstant 。球员。subscribeBotAsync ()。然后(//玩家订阅机器人)。catch (function (e ){ //处理订阅失败});
· 抛出INVALID_PARAM
· 抛出PENDING_REQUEST
· 引发CLIENT_REQUIRES_UPDATE
返回
Promise一个承诺,如果玩家成功订阅游戏机器人,则解析,或者如果请求失败或玩家选择不订阅则拒绝。
getName()播放器的本地化显示名称。在FBInstant.startGameAsync()解析之前,不应调用此函数。
例子
//应该在FBInstant.startGameAsync()//结算后调用此函数。var playerName = FBInstant 。球员。getName ();
getPhoto()玩家公开个人资料照片的网址。照片将始终为正方形,尺寸至少为200x200。在游戏中渲染时,不应假设精确尺寸不变。建议在渲染之前始终将图像缩放到所需的大小。在FBInstant.startGameAsync()结算之前,该值始终为null。
警告:由于CORS,在游戏画布中使用这些照片会导致它被污染,这将阻止提取画布数据。要防止这种情况,请将您使用的图像的跨原点属性设置为“匿名”。
例子
var playerImage = new Image ();
playerImage 。crossOrigin = 'anonymous' ; //应该在FBInstant.startGameAsync()//结算后调用此函数。
playerImage 。src = FBInstant 。球员。getPhoto ();
getDataAsync()从当前播放器的指定云存储中检索数据。
参数
例子
FBInstant 。球员
。getDataAsync ([ 'achievement' ,'currentLife' ])。然后(功能(数据){
控制台。日志('数据加载' ); VAR 成就= 数据[ '成就' ]; VAR currentLife = 数据[ 'currentLife' ]; });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise < Object >一个promise,它使用一个对象解析,该对象包含输入数组中指定的每个键的当前键值对(如果存在)。
setDataAsync()将数据设置为当前播放器的指定云存储。该游戏可以为每个独特的玩家存储多达1MB的数据。
参数
· data
Object包含应保留到云存储的一组键值对的对象。该对象必须只包含可序列化的值 - 任何不可序列化的值都将导致整个修改被拒绝。
例子
FBInstant 。球员
。setDataAsync ({
achievement :[ 'medal1' ,'medal2' ,'medal3' ],
currentLife :300 ,})。然后(函数(){
控制台。登录('数据被设定' ); });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise在设置输入值时解析的promise。注意:承诺解析并不
一定意味着输入已被持久化。相反,它意味着数据有效并已安排保存。它还保证所有已设置的值现在都可以在player.getDataAsync中使用。
flushDataAsync()立即将对播放器数据的任何更改刷新到指定的云存储。此功能很昂贵,主要应用于需要立即持久并且游戏已知的持久性的关键更改。非关键性更改应依赖于平台将其保留在后台。注意:当此函数的结果处于挂起状态时,将拒绝对player.setDataAsync的调用。
例子
FBInstant 。球员
。setDataAsync ({
achievement :[ 'medal1' ,'medal2' ,'medal3' ],
currentLife :300 ,})。然后(FBInstant 。球员。flushDataAsync )。然后(函数(){
控制台。登录('数据保存到FB!' ); });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise在成功持久保存更改时解析的promise,如果保存失败则拒绝。
getStatsAsync()从当前播放器的指定云存储中检索统计信息。
参数
· keys
数组 < string >?用于检索统计信息的可选数组唯一键。如果在没有它的情况下调用该函数,它将获取所有统计信息。
例子
FBInstant 。球员
。getStatsAsync ([ 'level' ,'zombiesSlain' ])。然后(函数(统计){
控制台。日志('统计被加载' ); 无功电平= 数据[ '等级' ]; VAR zombiesSlain = 数据[ 'zombiesSlain' ]; });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise < Object >一个promise,它使用一个对象解析,该对象包含输入数组中指定的每个键的当前键值对(如果存在)。
setStatsAsync()将统计信息设置为当前播放器的指定云存储。
参数
· stats
Object包含一组键值对的对象,这些键值对应作为统计信息保存到云存储中,可以通过多种方式显示或使用,以有益于玩家参与。对象必须只包含数值 - 任何非数值都将导致整个修改被拒绝。
例子
FBInstant 。球员
。setStatsAsync ({
level :5 ,
zombiesSlain :27 ,})。然后(函数(){
控制台。登录('数据被设定' ); });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
Returns
Promise A promise that resolves when the input values are set. NOTE: The promise resolving does not necessarily mean that the input has already been persisted. Rather, it means that the data was validated and has been scheduled to be saved. It also guarantees that all values that were set are now available in player.getStatsAsync.
incrementStatsAsync( )Increment stats saved in the designated cloud storage of the current player.
Parameters
· increments
Object An object containing a set of key-value pairs indicating how much to increment each stat in cloud storage. The object must contain only numerical values - any non-numerical values will cause the entire modification to be rejected.
Examples
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 < Object >一个promise,它使用一个对象解析,该对象包含输入字典中指定的每个键的更新键值对。注意:承诺解决并不
一定意味着更改已经保留。相反,它意味着增量有效并已安排执行。它还保证所有递增的值现在都可以在player.getStatsAsync中使用。
getConnectedPlayersAsync()获取一组ConnectedPlayer对象,其中包含有关连接到当前玩家的活动玩家(在过去90天内玩过该游戏的人)的信息。
例子
var connectedPlayers = FBInstant 。球员。getConnectedPlayersAsync ()。然后(功能(播放器){
控制台。日志(球员。地图(功能(播放器){ 返回{
ID :玩家。的getID (),
名称:玩家。的getName ()} })); });
// [{id:'123456789',名称:'Paul Atreides'},{id:'987654321',名称:'Duncan Idaho'}]
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
上下文包含与当前游戏上下文相关的功能和属性。
getID()当前游戏上下文的唯一标识符。这表示正在播放游戏的特定上下文(例如,特定的信使对话或Facebook帖子)。如果在独奏上下文中播放游戏,则标识符将为null。在FBInstant.startGameAsync解决之前,不应调用此函数。
例子
//应该在FBInstant.startGameAsync()//结算后调用此函数。var contextID = FBInstant 。背景。getID ();
getType()The type of the current game context. POST - A facebook post. THREAD - A messenger thread. GROUP - A facebook group. SOLO - Default context, where the player is the only participant.
This function should not be called until FBInstant.startGameAsync has resolved.
Examples
// This function should be called after FBInstant.startGameAsync()// resolves.var contextType = FBInstant.context.getType();
Returns
("
OST"
| "THREAD"
| "GROUP"
| "SOLO"
) Type of the current game context.
isSizeBetween( )This function determines whether the number of participants in the current game context is between a given minimum and maximum, inclusive. If one of the bounds is null only the other bound will be checked against. It will always return the original result for the first call made in a context in a given game play session. Subsequent calls, regardless of arguments, will return the answer to the original query until a context change occurs and the query result is reset. This function should not be called until FBInstant.startGameAsync has resolved.
Parameters
· minSize
number? The minimum bound of the context size query.
· minSize
number? The maximum bound of the context size query.
Examples
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}
控制台。日志(FBInstant 。上下文。isSizeBetween (“测试” ,5 )); (上下文大小= 4 )// null
控制台。日志(FBInstant 。上下文。isSizeBetween (0 ,100 )); (Context size = null )// null
switchAsync()请求切换到特定上下文。如果玩家没有进入该上下文的权限,或者玩家没有提供游戏进入该上下文的权限,则会拒绝。否则,当游戏切换到指定的上下文时,承诺将解决。
参数
例子
控制台。日志(FBInstant 。上下文。的getID ()); // 1122334455 FBInstant 。背景
。switchAsync ('1234567890' )。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 1234567890 });
· 抛出INVALID_PARAM
· 抛出SAME_CONTEXT
· 引发NETWORK_FAILURE
· 引发USER_INPUT
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise一个promise,当游戏切换到指定的上下文时解析,否则拒绝。
chooseAsync()打开播放器的上下文选择对话框。如果玩家选择了可用的上下文,则客户端将尝试切换到该上下文,并在成功时解析。否则,如果播放器退出菜单或客户端无法切换到新上下文,则此功能将拒绝。
参数
· options
对象?一个对象,指定应提供的上下文的条件。
· options.maxSize
号码?理想情况下建议的上下文应具有的最大参与者数。
· options.minSize
号码?理想情况下建议的上下文应具有的最小参与者数量。
例子
控制台。日志(FBInstant 。上下文。的getID ()); // 1122334455 FBInstant 。背景
。chooseAsync ()。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 1234567890 });
控制台。日志(FBInstant 。上下文。的getID ()); // 1122334455 FBInstant 。背景
。chooseAsync ({
filters :[ 'NEW_CONTEXT_ONLY' ],
minSize :3 ,})。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 1234567890 });
· 抛出INVALID_PARAM
· 抛出SAME_CONTEXT
· 引发NETWORK_FAILURE
· 引发USER_INPUT
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise当游戏切换到用户选择的上下文时解析的promise。否则,承诺将拒绝(例如,如果用户取消对话框)。
createAsync()尝试创建或切换到指定玩家和当前玩家之间的上下文。如果列出的玩家不是当前玩家的连接玩家,或者玩家未提供进入新上下文的许可,则返回的承诺将拒绝。否则,当游戏切换到新的上下文时,承诺将解决。
参数
例子
控制台。日志(FBInstant 。上下文。的getID ()); // 1122334455 FBInstant 。背景
。createAsync ('12345678' )。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 5544332211 });
· 抛出INVALID_PARAM
· 抛出SAME_CONTEXT
· 引发NETWORK_FAILURE
· 引发USER_INPUT
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
返回
Promise一个在游戏切换到新上下文时解析的promise,否则拒绝。
getPlayersAsync()例子
var contextPlayers = FBInstant 。背景。getPlayersAsync ()。然后(功能(播放器){
控制台。日志(球员。地图(功能(播放器){ 返回{
ID :玩家。的getID (),
名称:玩家。的getName ()} })); });
// [{id:'123456789',名称:'Luke'},{id:'987654321',名称:'Leia'}]
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 抛出INVALID_OPERATION
支付[IN CLOSED BETA]包含与支付和购买游戏产品相关的功能和属性。
getCatalogAsync()获取游戏的产品目录。
例子
FBInstant 。付款。getCatalogAsync ()。然后(功能(目录){
控制台。日志(目录); // [{产品编号: '12345',...},...] });
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 投掷PAYMENTS_NOT_INITIALIZED
· 引发NETWORK_FAILURE
purchaseAsync()开始了特定产品的采购流程。如果在FBInstant.startGameAsync()解决之前调用,将立即拒绝。
参数
例子
FBInstant 。付款。purchaseAsync ({
productID :'12345' ,
developerPayload :'foobar' ,})。然后(函数(购买){
控制台。日志(购买); // {产品编号: '12345',purchaseToken: '54321',developerPayload: 'foobar的',...} });
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 投掷PAYMENTS_NOT_INITIALIZED
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出INVALID_OPERATION
getPurchasesAsync()获取所有玩家未使用的购买物品。作为最佳实践,一旦客户端表明它已准备好执行与支付相关的操作,游戏就应该获取当前玩家的购买。然后,游戏可以处理和消费等待消费的任何购买。
例子
FBInstant 。付款。getPurchasesAsync ()。然后(函数(购买){
控制台。日志(购买); // [{产品编号: '12345',...},...] });
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 投掷PAYMENTS_NOT_INITIALIZED
· 引发NETWORK_FAILURE
consumePurchaseAsync()消耗属于当前玩家的特定购买。在向玩家提供产品效果之前,游戏应该要求消费所购买的产品。一旦购买成功消费,游戏应该立即向玩家提供他们购买的效果。
参数
· purchaseToken
string应该使用的购买的购买标记。
例子
FBInstant 。付款。consumePurchaseAsync ('54321' )。然后(function (){ //购买成功消费!//游戏现在应该将产品提供给玩家});
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 投掷PAYMENTS_NOT_INITIALIZED
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
onReady()设置在付款操作可用时触发的回调。
参数
· callback
功能付款可用时执行的回调函数。
例子
FBInstant 。付款。onReady (函数(){
控制台。日志('付款准备好了!' )});
返回void
getLocale()例子
//应该在FBInstant.startGameAsync()//结算后调用此函数。var locale = FBInstant 。getLocale (); //'en_US'
getPlatform()游戏当前运行的平台。在FBInstant.initializeAsync()结算之前,该值始终为null。
例子
//应该在FBInstant.initializeAsync()//结算后调用此函数。var platform = FBInstant 。getPlatform (); //'IOS'
getSDKVersion()此SDK版本的字符串表示形式。
例子
//应该在FBInstant.initializeAsync()//结算后调用此函数。var sdkVersion = FBInstant 。getSDKVersion (); //'2.0'
initializeAsync()初始化SDK库。应该在任何其他SDK函数之前调用它。
例子
FBInstant 。initializeAsync ()。然后(函数(){ //初始化之前完成多项性能为null。//这是一个好地方来接他们:VAR 区域= FBInstant 。的getLocale (); // 'EN_US' 变种平台= FBInstant 。getPlatform ( ); // 'IOS' 变种sdkVersion = FBInstant 。getSDKVersion (); // '3.0' 变种playerID = FBInstant 。播放器
。getID (); });
· 抛出INVALID_OPERATION
setLoadingProgress()报告游戏的初始加载进度。
参数
· percentage
number 0到100之间的数字。
例子
FBInstant 。setLoadingProgress (50 ); //资产加载50%
返回void
getSupportedAPIs()提供客户端支持的API函数列表。
例子
//应该在FBInstant.initializeAsync()//结算后调用此函数。FBInstant 。getSupportedAPIs (); // ['getLocale','initializeAsync','player.getID','context.getType',...]
getEntryPointData()返回与启动游戏的入口点关联的任何数据对象。
对象的内容是开发人员定义的,可以从不同平台上的入口点进行。对于较旧的移动客户端,以及没有与特定入口点关联的数据,这将返回null。
应该在FBInstant.startGameAsync()解析后调用此函数。
例子
//应该在FBInstant.startGameAsync()//结算后调用此函数。const entryPointData = FBInstant 。getEntryPointData ();
getEntryPointAsync()返回游戏启动的入口点。
在FBInstant.startGameAsync解决之前,不应调用此函数。
例子
//应该在FBInstant.startGameAsync()//结算后调用此函数。FBInstant 。getEntryPointAsync ()。然后(入口点=> 控制台。日志(入口点)); //'admin_message'
setSessionData()设置与当前上下文的单个游戏会话相关联的数据。
只要游戏想要更新当前会话数据,就应该调用此函数。该会话数据可用于填充各种有效载荷,例如游戏webhook。
参数
· sessionData
Object一个任意数据对象,在进行字符串化时必须小于或等于1000个字符。
例子
FBInstant 。setSessionData ({ coinsEarned :10 ,eventsSeen :[ 'start' ,...]});
返回void
startGameAsync()这表明游戏已完成初始加载并准备开始。返回的promise将解析后,上下文信息将是最新的。
例子
FBInstant 。startGameAsync ()。然后(函数(){
myGame 。开始(); });
· 抛出INVALID_PARAM
· 抛出CLIENT_UNSUPPORTED_OPERATION
shareAsync()这将调用一个对话框,让用户共享指定的内容,可以是Messenger中的消息,也可以是用户时间轴上的帖子。可以将一团数据附加到共享,从共享启动的每个游戏会话都可以从FBInstant.getEntryPointData()访问。在字符串化时,此数据必须小于或等于1000个字符。用户可以选择取消共享操作并关闭对话框,并且无论用户是否实际共享内容,对话框关闭时返回的承诺都将得到解决。
参数
例子
FBInstant 。shareAsync ({
intent :'REQUEST' ,
image :base64Picture ,
text :'X正在寻求帮助!' ,
数据:{ myReplayData :'...' },})。然后(function (){ //继续游戏。});
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 抛出INVALID_OPERATION
updateAsync()通知Facebook游戏中发生的更新。这将暂时控制Facebook,Facebook将根据更新的内容决定做什么。当Facebook将控制权返回给游戏时,返回的承诺将解决/拒绝。
参数
· payload UpdatePayload描述更新的有效内容。
例子
//这将发布自定义更新。如果游戏是在Messenger //聊天线程中播放的,那么这将使用指定的//图像和文本消息将消息发布到线程中。当人们从这个//消息启动游戏时,那些游戏会话将能够通过FBInstant.getEntryPointData()访问指定的数据blob //。FBInstant 。updateAsync ({
action :'CUSTOM' ,
cta :'Join The Fight' ,
image :base64Picture ,
text :{ default :'X刚入侵Y的村庄!' ,
本地化:{
ar_AR :'X \ u0641 \ u0642 \ u0637 \ u063A \ u0632 \ u062A' + '\ u0642 \ u0631 \ u064A \ u0629 Y!' ,
en_US :'X只是入侵了Y的村庄!' ,
es_LA :'\ u00A1X acaba de invadir el pueblo de Y!' ,} }
template :'VILLAGE_INVASION' ,
data :{ myReplayData :'...' },
策略:'IMMEDIATE' ,
通知:'NO_PUSH' ,})。
function (){ //在发布更新后关闭游戏。FBInstant 。退出(); });
· 抛出INVALID_PARAM
· 抛出PENDING_REQUEST
· 抛出INVALID_OPERATION
switchGameAsync()请求客户端切换到其他即时游戏。如果交换机失败,API将拒绝 - 否则,客户端将加载新游戏。
参数
· data
对象?可选的数据有效负载。这将被设置为切换到的游戏的入口点数据。字符串化时必须小于或等于1000个字符。
例子
FBInstant 。switchGameAsync ('12345678' )。catch (function (e ){ // Handle game change failure });
· 引发USER_INPUT
· 抛出INVALID_PARAM
· 抛出PENDING_REQUEST
· 引发CLIENT_REQUIRES_UPDATE
canCreateShortcutAsync()返回用户是否有资格请求创建快捷方式。
如果createShortcutAsync已被调用此会话,或者用户不符合创建快捷方式的条件,则返回false。
例子
FBInstant 。canCreateShortcutAsync ()。然后(函数(canCreateShortcut ){ 如果(canCreateShortcut ){ FBInstant 。createShortcutAsync () 。然后(函数(){ //创建快捷方式}) 。捕获(功能(){ //快捷方式没有创建}); } });
· 抛出PENDING_REQUEST
· 引发CLIENT_REQUIRES_UPDATE
· 抛出INVALID_OPERATION
createShortcutAsync()例子
FBInstant 。canCreateShortcutAsync ()。然后(函数(canCreateShortcut ){ 如果(canCreateShortcut ){ FBInstant 。createShortcutAsync () 。然后(函数(){ //创建快捷方式}) 。捕获(功能(){ //快捷方式没有创建}); } });
· 引发USER_INPUT
· 抛出PENDING_REQUEST
· 引发CLIENT_REQUIRES_UPDATE
· 抛出INVALID_OPERATION
放弃( )退出游戏。
例子
FBInstant 。退出();
返回void
logEvent()参数
· eventName
string事件的名称。必须为2到40个字符,并且只能包含“_”,“ - ”,“和”字母数字字符。
· valueToSum
number FB Analytics可以计算总和的可选数值。
· parameters
Object一个可选对象,最多可包含25个与事件一起记录的键值对。键必须为2到40个字符,并且只能包含“_”,“ - ”,“和”字母数字字符。值的长度必须小于100个字符。
例子
var logged = FBInstant 。logEvent ('my_custom_event' ,42 ,{ custom_property :'custom_value' },);
onPause()设置在触发暂停事件时触发的回调。
参数
例子
FBInstant 。在onPause (函数(){
控制台。日志('暂停事件被触发!' ); })
返回void
getInterstitialAdAsync()尝试创建插页式广告的实例。然后可以预加载并呈现该实例。
参数
· placementID
字符串在受众网络设置中设置的展示位置ID。
例子
FBInstant 。getInterstitialAdAsync ('my_placement_id' ,)。然后(函数(间质性){
间质性。getPlacementID (); // 'my_placement_id' });
· 抛出ADS_TOO_MANY_INSTANCES
· 抛出CLIENT_UNSUPPORTED_OPERATION
getRewardedVideoAsync()尝试创建奖励视频的实例。然后可以预加载并呈现该实例。
参数
· placementID
字符串在受众网络设置中设置的展示位置ID。
例子
FBInstant 。getRewardedVideoAsync ('my_placement_id' ,)。然后(函数(rewardedVideo ){
rewardedVideo 。getPlacementID (); // 'my_placement_id' });
· 抛出ADS_TOO_MANY_INSTANCES
· 抛出CLIENT_UNSUPPORTED_OPERATION
matchPlayerAsync()参数
· matchTag
字符串?有关用于将其与类似玩家分组的玩家的可选额外信息。玩家只能与具有完全相同标签的其他玩家分组。标签只能包含字母,数字和下划线,长度不得超过100个字符。
· switchContextWhenMatched
boolean可选的额外参数,指定在找到匹配项时是否应立即将播放器切换到新上下文。默认情况下,这将是false,这意味着玩家在匹配后需要明确按下播放以切换到新的上下文。
例子
FBInstant 。matchPlayerAsync ('level1' )。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 12345 });
FBInstant 。matchPlayerAsync ()。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 3456 });
FBInstant 。matchPlayerAsync (null ,true )。然后(函数(){
控制台。登录(FBInstant 。上下文。的getID ()); // 3456 });
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 引发USER_INPUT
· 抛出PENDING_REQUEST
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 抛出INVALID_OPERATION
返回
Promise一个promise,当玩家被添加到组线程并切换到线程的上下文时解析。
checkCanPlayerMatchAsync()检查当前播放器是否符合matchPlayerAsync API的条件。
例子
FBInstant 。checkCanPlayerMatchAsync ()。然后(canMatch => { 如果(canMatch ){ FBInstant 。matchPlayerAsync ('1级' ); } });
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
getLeaderboardAsync()获取属于此即时游戏的特定排行榜。
参数
· name
string排行榜的名称。即时游戏的每个排行榜都必须有自己独特的名称。
例子
FBInstant 。getLeaderboardAsync ('my_awesome_leaderboard' )。然后(排行榜=> {
控制台。登录(排行榜。的getName ()); // 'my_awesome_leaderboard' });
· 抛出LEADERBOARD_NOT_FOUND
· 引发NETWORK_FAILURE
· 抛出CLIENT_UNSUPPORTED_OPERATION
· 抛出INVALID_OPERATION
· 抛出INVALID_PARAM
LocalizationsDict
APIERRORInstant Games SDK返回的API错误
码相关的错误代码
信息描述错误的消息
SignedPlayerInfo代表有关播放器的信息以及签名,以验证它确实来自Facebook。
getPlayerID()获取播放器的ID。
例子
FBInstant 。球员。getSignedPlayerInfoAsync ()。然后(函数(结果){
结果。getPlayerID (); //相同的值FBInstant.player.getID()});
getSignature()用于验证此对象的签名确实来自Facebook。该字符串是base64url编码的,并根据OAuth 2.0规范使用您的App Secret的HMAC版本进行签名。
您可以使用以下4个步骤对其进行验证:
· 将签名拆分为由“。”分隔的两个部分。字符。
· 使用base64url编码解码第一部分(编码签名)。
· 使用base64url编码解码第二部分(响应有效负载),该编码应该是具有以下字段的JSON对象的字符串表示:** algorithm - 始终等于HMAC-SHA256 ** issued_at - 此响应时的unix时间戳发出。** player_id - 播放器的唯一标识符。** request_payload - 调用FBInstant.player.getSignedPlayerInfoAsync时指定的requestPayload字符串。
· 使用HMAC SHA-256和您的app secret来散列整个响应有效负载字符串,并确认它等于编码签名。
· 您可能还希望验证响应有效内容中的issued_at时间戳,以确保最近发出请求。
签名验证应该只在您的服务器上进行。永远不要在客户端这样做,因为它会危及您的应用程序密钥。
例子
FBInstant 。球员。getSignedPlayerInfoAsync ()。然后(函数(结果){
结果。getSignature (); // Eii6e636mz5J47sfqAYEK40jYAwoFqi3x5bxHkPG4Q4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwMDM5ODY3NSwicGxheWVyX2lkIjoiMTI0OTUyNTMwMTc1MjIwMSIsInJlcXVlc3RfcGF5bG9hZCI6Im15X2ZpcnN0X3JlcXVlc3QifQ });
ConnectedPlayer表示有关连接到当前玩家的玩家的信息。
getID()获取已连接播放器的ID。
getName()获取玩家的全名。
getPhoto()获取播放器的公开个人资料照片。
ContextPlayer表示有关当前玩家正在玩的上下文中的玩家的信息。
getID()获取上下文播放器的ID。
getName()获取播放器的本地化显示名称。
getPhoto()获取播放器的公开个人资料照片。
AdInstance表示广告的实例。
getPlacementID()返回此广告实例的受众群体展示位置ID。
loadAsync()预加载广告。返回的promise在预加载完成时解析,如果失败则拒绝。
例子
FBInstant 。getInterstitialAdAsync ('my_placement_id' ,)。然后(函数(间质性){ 返回间质性。loadAsync (); })。然后(function (){ // Ad loaded });
· 抛出ADS_FREQUENT_LOAD
· 抛出ADS_NO_FILL
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
showAsync()展示广告。当用户完成观看广告时,返回的承诺会解决,如果广告在广告期间未能出现或已关闭,则拒绝承诺。
例子
var ad = null ; FBInstant 。getRewardedVideoAsync ('my_placement_id' ,)。然后(函数(rewardedVideo ){
广告= rewardedVideo ; 返回广告。loadAsync (); })。然后(函数(){ //加载广告返回广告。showAsync (); })。然后(function (){ //广告观看});
· 抛出ADS_NOT_LOADED
· 抛出INVALID_PARAM
· 引发NETWORK_FAILURE
· 抛出INVALID_OPERATION
产品代表游戏的产品信息。
属性
· imageURI
字符串?指向产品相关图像的链接
ContextFilter可以应用于上下文选择操作'NEW_CONTEXT_ONLY'的过滤器 - 更喜欢仅表面上下文之前尚未播放的游戏。'INCLUDE_EXISTING_CHALLENGES' - 包括“现有挑战”部分,该部分显示了玩家所属的主动上场情节。'NEW_PLAYERS_ONLY' - 在包含个人的部分中,更喜欢没有玩过游戏的人。
类型:("NEW_CONTEXT_ONLY"| "INCLUDE_EXISTING_CHALLENGES"| "NEW_PLAYERS_ONLY")
平台表示用户正在播放的当前平台。
类型 "IOS"| "ANDROID"| "WEB"| "MOBILE_WEB")
ContextSizeResponse如果当前上下文大小介于对象中指定的minSize和maxSize值之间,则answer字段为true,否则为false。
采购代表个人购买游戏产品。
属性
· developerPayload
字符串?购买产品期间提供的开发人员指定的字符串
· purchaseTime
string发生购买时的Unix时间戳
· purchaseToken
字符串表示可用于消费购买的购买的标记
排行榜即时游戏排行榜
getName()排行榜的名称。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){
控制台。日志(排行榜。的getName ()); // my_leaderboard });
getContextID()排行榜与之关联的上下文的ID,如果排行榜未与特定上下文绑定,则为null。
例子
FBInstant 。getLeaderboardAsync ('contextual_leaderboard' )。然后(函数(排行榜){
控制台。登录(排行榜。getContextID ()); // 12345678 });
FBInstant 。getLeaderboardAsync ('global_leaderboard' )。然后(函数(排行榜){
控制台。日志(排行榜。getContextID ()); //空});
getEntryCountAsync()获取排行榜中玩家条目的总数。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getEntryCountAsync (); }) 。然后(函数(计数){ 控制台。日志(计数); }); // 24
· 引发NETWORK_FAILURE
· 抛出RATE_LIMITED
setScoreAsync()更新玩家的分数。如果玩家具有现有分数,则只有在新分数优于其时才会替换旧分数。注意:如果排行榜与特定上下文相关联,则游戏必须在该上下文中为玩家设置分数。
参数
· score
number玩家的新分数。必须是64位整数。
· extraData
string?= // 2与存储的分数关联的元数据。大小必须小于2KB。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。setScoreAsync (42 ,'{种族: “小精灵”,级别:3}' ); }) 。然后(函数(条目){
控制台。日志(条目。getScore ()); // 42
控制台。日志(条目。
getExtraData ()); //'{race:“elf”,等级:3}' });
· 抛出LEADERBOARD_WRONG_CONTEXT
· 引发NETWORK_FAILURE
· 抛出INVALID_PARAM
· 抛出INVALID_OPERATION
· 抛出RATE_LIMITED
getPlayerEntryAsync()检索当前播放器的排行榜条目,如果播放器尚未设置,则返回null。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getPlayerEntryAsync (); }) 。然后(函数(条目){
控制台。日志(条目。getRank ()); // 2
控制台。日志(条目。getScore ()); // 42
控制台。
日志(入口。getExtraData ()); //'{race:“elf”,等级:3}' });
· 引发NETWORK_FAILURE
· 抛出INVALID_OPERATION
· 抛出RATE_LIMITED
getEntriesAsync()检索一组排行榜条目,按排行榜中的分数排名排序。
参数
· count
number尝试从排行榜获取的条目数。如果未指定,则默认为10。目前,每个查询最多可以获取100个条目。
· offset
number从排行榜顶部开始的条目,即从中获取条目。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getEntriesAsync (); }) 。然后(功能(项){
控制台。日志(条目。长度); // 10
控制台。登录(条目[ 0 ]。getRank ()); // 1
控制台。log (entries [ 0 ] .getScore ()); // 42
台。log (entries [ 1 ] .getRank ()); // 2
控制台。log (entries [ 1 ] .getScore ()); // 40 });
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getEntriesAsync (5 ,3 ); }) 。然后(功能(项){
控制台。日志(条目。长度); // 5
控制台。日志(条目[ 0 ]。
getRank ()); // 4
控制台。log (entries [ 0 ] .getScore ()); // 34
控制台。log (entries [ 1 ] .getRank ()); // 5
控制台。log (entries [ 1 ] .getScore ()); // 31 });
· 引发NETWORK_FAILURE
· 抛出RATE_LIMITED
getConnectedPlayerEntriesAsync()检索当前玩家的连接玩家(包括当前玩家)的排行榜得分条目,按照连接玩家组中的本地排名排序。
参数
· count
number尝试从排行榜获取的条目数。如果未指定,则默认为10。目前,每个查询最多可以获取100个条目。
· offset
number从要获取的有序连接玩家得分条目集的偏移量。
例子
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getConnectedPlayerEntriesAsync (); }) 。然后(功能(项){
控制台。日志(条目。长度); // 10
控制台。登录(条目[ 0 ]。getRank ()); // 1
控制台。log (entries [ 0 ] .getScore ()); // 42
台。log (entries [ 1 ] .getRank ()); // 2
控制台。log (entries [ 1 ] .getScore ()); // 40 });
FBInstant 。getLeaderboardAsync ('my_leaderboard' )。然后(函数(排行榜){ 返回排行榜。getConnectedPlayerEntriesAsync (5 ,3 ); }) 。然后(功能(项){
控制台。日志(条目。长度); // 5
控制台。日志(条目[ 0 ]。
getRank ()); // 4
控制台。log (entries [ 0 ] .getScore ()); // 34
控制台。log (entries [ 1 ] .getRank ()); // 5
控制台。log (entries [ 1 ] .getScore ()); // 31 });
· 引发NETWORK_FAILURE
· 抛出RATE_LIMITED
SharePayload表示要由用户共享的内容。
属性
· intent ("INVITE"| "REQUEST"| "CHALLENGE"| "SHARE")表示共享的意图。
· data
对象?要附加到共享的数据blob。从共享启动的所有游戏会话都可以通过FBInstant.getEntryPointData()访问此blob。
UpdateAction表示要执行的更新操作的类型。
属性
· CUSTOM
字符串自定义更新,包含游戏指定的所有内容。
· LEADERBOARD
字符串与即时游戏排行榜相关联的更新。
错误代码Instant Games API可能返回的错误代码
属性
· ADS_FREQUENT_LOAD
字符串广告过于频繁地加载。
· ADS_NO_FILL
字符串我们无法向当前用户投放广告。如果用户在其设备上选择停用针对用户兴趣的广告,或者我们没有为该用户展示广告资源,则可能会发生这种情况。
· ADS_NOT_LOADED
string尝试显示尚未成功加载的广告。
· ADS_TOO_MANY_INSTANCES
字符串并发广告实例太多。在创建新广告实例之前加载并显示它们。
· ANALYTICS_POST_EXCEPTION
字符串分析API在尝试发布事件时遇到问题。
· CLIENT_REQUIRES_UPDATE
string [已弃用] - 客户端需要更新才能访问返回此结果的功能。如果在Web上返回此结果,则表示Web客户端尚不支持该功能。在v5.0及更高版本中不推荐使用CLIENT_UNSUPPORTED_OPERATION
· CLIENT_UNSUPPORTED_OPERATION
string客户端不支持当前操作。这可能是由于客户端版本或平台缺乏支持,或者因为游戏或播放器不允许操作。
· INVALID_OPERATION
string请求的操作无效或当前游戏状态。这可能包括违反限制的请求,例如超出存储阈值,或者在某种状态下不可用,例如在独立上下文中生成特定于上下文的请求。
· INVALID_PARAM
string传递给API的参数无效。可以指示不正确的类型,无效的参数数量或语义问题(例如,将不可序列化的对象传递给序列化函数)。
· LEADERBOARD_NOT_FOUND
string找不到具有所请求名称的排行榜。排行榜尚未存在,或者名称与游戏的任何已注册排行榜配置都不匹配。
· LEADERBOARD_WRONG_CONTEXT
string尝试写入与当前正在播放游戏之外的上下文关联的排行榜。
· NETWORK_FAILURE
string客户端遇到网络请求问题。这可能是由于一个短暂的问题,例如玩家的互联网连接下降。
· PAYMENTS_NOT_INITIALIZED
字符串客户端尚未完成设置付款或未接受付款API调用。
· PENDING_REQUEST
string表示由于与此冲突冲突的现有请求而导致的拒绝。例如,当另一个依赖于Facebook UI的请求待处理时,我们将拒绝任何会显示Facebook UI的调用。
· RATE_LIMITED
string过于频繁地调用某些API或操作。这可能是由于游戏在很短的时间内调用特定API的次数过多。降低请求率应该会导致此错误消失。
· SAME_CONTEXT
string游戏尝试执行上下文切换到当前上下文。
· UNKNOWN
string发生未知或未指定的问题。这是客户端未指定代码时返回的默认错误代码。
· USER_INPUT
string用户做出了导致拒绝的选择。例如,如果游戏调出Context Switch对话框并且播放器将其关闭,则此错误代码将包含在promise promise中。
例子
FBInstant 。startGameAsync ()。捕捉(函数(é ){
控制台。日志(ë ); }); // {code:'CLIENT_UNSUPPORTED_OPERATION',消息:'...'}
ErrorCodeType
SignedPurchaseRequest例子
Eii6e636mz5J47sfqAYEK40jYAwoFqi3x5bxHkPG4Q4 。eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwMDM5ODY3NSwicGxheWVyX2lkIjoiMTI0OTUyNTMwMTc1MjIwMSIsInJlcXVlc3RfcGF5bG9hZCI6Im15X2ZpcnN0X3JlcXVlc3QifQ
PurchaseConfig注册到游戏的产品的购买请求的配置。
属性
· developerPayload
字符串?可选的开发人员指定的有效负载,包含在已退回购买的已签名请求中。
CustomUpdatePayload表示自定义更新FBInstant.updateAsync。请注意,如果未提供本地化内容,则Facebook提供的本地化字符串将用于号召性用语和文本。
该default字符串应该是英文。
属性
· cta
(string?| LocalizableContent?)可选的号召性用语按钮文字。默认情况下,我们将使用本地化的“播放”作为按钮文本。要提供自己的号召性用语的本地化版本,请使用默认cta作为'default'的值传递对象,将另一个对象映射到翻译作为'localizations'的值。
· image
string base64编码图像的数据URL。
· data
对象?要附加到更新的数据blob。从更新启动的所有游戏会话都可以通过FBInstant.getEntryPointData()访问此blob。字符串化时必须小于或等于1000个字符。
· strategy
字符串?指定应如何传递更新。这可以是以下之一:'IMMEDIATE' - 应立即发布更新。'LAST' - 更新应在游戏会话结束时发布。使用“最后”策略发送的最新更新将是发送的更新。'IMMEDIATE_CLEAR' - 更新立即发布,并清除所有其他待处理的更新(例如使用'LAST'策略发送的更新)。如果未指定策略,则默认为“IMMEDIATE”。
· notification
字符串?指定自定义更新的通知设置。这可以是'NO_PUSH'或'PUSH',默认为'NO_PUSH'。仅对具有高信号且可立即为收件人操作的更新使用推送通知。另请注意,根据用户设置和平台策略,并不总能保证推送通知。
LeaderboardUpdatePayload表示FBInstant.updateAsync的排行榜更新。
属性
· action
UpdateAction对于排行榜更新,这应该是'LEADERBOARD'。文本。默认情况下,我们将使用本地化的“立即播放”作为按钮文本。
· text
字符串?可选的短信。如果未指定,则将提供本地化回退消息。
LocalizableContent表示具有本地化的字符串和要重新使用的默认值。
属性
· default
string如果查看者的语言环境不是本地化对象中的键,则使用的
字符串的默认值。
LeaderboardEntry即时游戏排行榜的分数条目
getScore()获取与条目关联的分数。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。登录(条目。getScore ()); // 9001 });
getFormattedScore()获取与条目关联的分数,使用与排行榜关联的分数格式进行格式化。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。登录(条目。getFormattedScore ()); // '900.01米});
getTimestamp()获取上次更新排行榜条目的时间戳。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。登录(条目。getTimestamp ()); // 1515806355 });
getRank()获取排行榜中玩家得分的排名。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。登录(条目。getRank ()); // 2 });
getExtraData()获取与分数关联的开发人员指定的有效内容,如果未设置,则返回null。
例子
排行榜。setScoreAsync (42 ,'{race:“elf”,level:3}' ); 。然后(函数(条目){
控制台。登录(条目。getExtraData ()); // '{种族: “小精灵”,级别:3}' });
返回
字符串?与分数关联的可选开发人员指定的有效负载。
getPlayer()获取有关与条目关联的播放器的信息。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。日志(条目。getPlayer ()。的getName ()); //萨利});
LeaderboardPlayer有关与分数条目相关联的玩家的详细信息。
getName()获取播放器的本地化显示名称。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。日志(条目。getPlayer ()。的getName ()); //萨利});
getPhoto()返回玩家公开个人资料照片的网址。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。日志(条目。getPlayer ()。getPhoto ()); // <
HOTO_URL> });
getID()获取游戏的唯一标识符。
例子
排行榜。setScoreAsync (9001 )。然后(函数(条目){
控制台。登录(条目。getPlayer ()。的getID ()); // 12345678 });
为方便大家群策群力,我们创建了一个 Facebook Instant Game 交流群:814298516 。 欢迎同学们加入交流开发和运营经验。
作者: OniSaku1024 时间: 2018-8-20 18:24
辛苦翻译,不过因为是机翻所以还请有空的时候修改一下吧,毕竟“FBInstant.player”可以获取到对象而“FBInstant.播放器”获取不到
作者: jyj345 时间: 2018-8-21 08:57
没问题
欢迎光临 Facebook开发者社区 (http://bbs.zcsftek.com/) |
Powered by Discuz! X3.2 |