Facebook 游戏开发更新文档API 参考文档 v5.0

更新日志

1.广告 API两款全新的 API 可方便投放插屏广告和奖励式视频广告。要求 配置游戏以便在小游戏中投放广告。

2.Player StatsAPI,用于设置、获取并自动增加与玩家相关的 整数统计数据。辅以捆绑包配置的新增内容, 可为玩家统计数据配置元数据, 通过 Facebook 平台级集成显示统计数据。

3.getEntryPointAsyncAPI,获取启动游戏的入口点。

4.Custom Update Dev Localization自定义更新 API 的增补, 让开发者能够提供更新内容的本地化版本。

5.重大更改将 CLIENT_REQUIRES_UPDATE 更名为 CLIENT_UNSUPPORTED_OPERATION

FBInstant

小游戏 SDK 的顶级命名空间。

player

包含与当前玩家相关的功能和属性。

getID( )

玩家的唯一标识。Facebook 用户的玩家编号 将保持不变,且仅限于特定游戏范围。这意味着 同一个用户在不同的游戏中有不同的玩家编号。 仅当 FBInstant.initializeAsync() 被解析后才应调用此 函数。

示例

// This function should be called after FBInstant.initializeAsync()// resolves.var playerID = FBInstant.player.getID();

返回字符串?玩家的唯一标识。

getSignedPlayerInfoAsync( )

获取玩家的唯一标识和签名,签名用于验证标识确实 来自 Facebook,且没有被篡改。 仅当 FBInstant.initializeAsync() 被解析后才应调用此 函数。

参数

·

requestPayload字符串?开发者指定的包含于 已签名响应中的负载。

·

示例

// 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( )

经本地化显示的玩家姓名。仅当 FBInstant.startGameAsync() 被解析后 才应调用此函数。

示例

// This function should be called after FBInstant.startGameAsync()// resolves.var playerName = FBInstant.player.getName();

返回字符串?经本地化显示的玩家姓名。

getPhoto( )

玩家公开头像的网址。此照片始终为正方形, 尺寸至少为 200x200 像素。在游戏中显示时, 确切的尺寸可能会有所变化。建议 始终在显示之前将图片调整为需要的尺寸。 对应的值将始终为 null,直至 FBInstant.startGameAsync() 被解析。

警告:由于使用 CORS 机制,在游戏 Canvas 中使用这些照片会导致照片 损坏,这有碍于提取 Canvas 数据。 为防止出现这种情况,应将您使用的图片的 cross-origin 属性设置为 “anonymous”。

示例

var playerImage = new Image();

playerImage.crossOrigin = 'anonymous';// This function should be called after FBInstant.startGameAsync()// resolves.

playerImage.src = FBInstant.player.getPhoto();

返回字符串?玩家公开头像的网址。

getDataAsync( )

从指定的云存储中检索当前玩家的数据。

参数

·

keys数组<字符串>唯一键数组,数据检索将针对这些键展开。

·

示例

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 将在获得 包含下列信息的对象时被解析:输入数组中指定的每个键的 当前键值对(如存在)。

setDataAsync( )

设置要保存到指定云存储的当前玩家 的数据。对于每个独立玩家,游戏最多可存储 1MB 的数据。

参数

·

data对象此对象包含 应该保存到云存储的一组键值对。对象必须仅包含 可序列化的值 — 任何不可序列化的值都会导致 整个修改被拒绝。

·

示例

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 将在输入值设定时被解析。 注意:promise 被解析并不一定意味着输入 已被存储,而是这意味着相关数据有效 并已安排要被存储。这还能保证设置的所有值 现在可在 player.getDataAsync 中使用。

flushDataAsync( )

立即将玩家数据的任何更改刷新到指定的 云存储中。此函数的调用成本较高, 应主要用于需要立即存储并告知游戏的 重要更改。非重要更改应依赖于开放平台在后台 进行存储。 注意:当此函数的结果待定时, player.setDataAsync 调用将被拒绝。

示例

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( )

从指定云存储检索当前玩家的统计数据。

参数

·

keys数组<字符串>?唯一键数组(可选),针对这些键检索 统计数据。如果调用函数时没有设置此参数,则会提取所有统计数据。

·

示例

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 将在获得 包含下列信息的对象时被解析:输入数组中指定的每个键的 当前键值对(如存在)。

setStatsAsync( )

设置要保存到指定云存储的当前玩家 的统计数据。

参数

·

stats对象此对象包含应作为统计数据 保存到云存储的键值对,能以各种方式显示或 使用这些数据以提高玩家参与度。对象必须 仅包含数值,任何非数值会导致整个 修改被拒绝。

·

示例

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 将在输入值设定时被解析。 注意:promise 被解析并不一定意味着输入 已被存储,而是这意味着相关数据经过验证 并已安排要被存储。这还能保证设置的所有值 现在可在 player.getStatsAsync 中使用。

incrementStatsAsync( )

保存到指定云存储的当前玩家 的增量统计数据。

参数

·

increments对象此对象包含一组键值对, 这些键值对表示云存储中每个统计数据的增量是多少。对象必须 仅包含数值,任何非数值会导致整个 修改被拒绝。

·

示例

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 并不一定意味着更改 已被存储,而是意味着 增量有效且已安排要被执行 。这还能保证增加的所有值 现在可在 player.getStatsAsync 中使用。

getConnectedPlayersAsync( )

提取 ConnectedPlayer 对象的数组,这些对象包含与当前玩家 关联的玩家的信息。

注意:只有当 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<数组<ConnectedPlayer>>此 promise 将在 获得关联玩家对象列表时被解析。

context

包含与当前游戏环境相关的功能和属性。

getID( )

当前游戏环境的唯一标识。这表示 玩游戏的特定环境(例如:特定的 Messenger 对话或 Facebook 帖子)。如果用户在独立环境中玩游戏,则此标识将 为 null。仅当 FBInstant.startGameAsync 被解析后 才应调用此函数。

示例

// This function should be called after FBInstant.startGameAsync()// resolves.var contextID = FBInstant.context.getID();

返回字符串?当前游戏环境的唯一标识。

getType( )

当前游戏环境的类型。

仅当 FBInstant.startGameAsync 被解析后才应调用此函数。

示例

// This function should be called after FBInstant.startGameAsync()// resolves.var contextType = FBInstant.context.getType();

返回("POST"|"THREAD"|"GROUP"|"SOLO")当前游戏环境的类型。

isSizeBetween( )

此函数用于确定加入当前游戏环境的玩家 数量是否在给定的最小值和最大值之间(包括最小值和最大值)。仅当其中一个边界值为 null 时, 才会根据另一个边界值进行检查。在特定 的游戏会话中,此函数始终会返回某 环境内发出的第一个调用的最初结果。后续调用(无论参数是什么)将返回 原始查询的答案,除非游戏环境发生变化且 查询结果被重置。

仅当 FBInstant.startGameAsync 被解析后才应调用此函数。

如果提供的一个或两个参数无效,我们没有适合当前游戏环境 的玩家数量,或者 API 在 startGameAsync() 解析之前被调用, 此参数都会为 null。

参数

·

minSize数字?环境规模查询的最小边界值。

·

·

minSize数字?环境规模查询的最大边界值。

·

·

maxSize数字?

·

示例

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( )

请求切换到指定环境。如果玩家没有进入该环境的权限, 或玩家未向游戏提供进入 该环境的权限,请求将被拒绝。 promise 将在 游戏切换到指定环境时被解析。

参数

·

id字符串目标环境的编号。

·

示例

console.log(FBInstant.context.getID());// 1122334455FBInstant.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 将在游戏切换到指定环境时被解析, 在切换失败时被拒绝。

chooseAsync( )

为玩家打开一个环境选择对话框。如果玩家选择可用的环境, 客户端将尝试切换到这个环境, 并在成功时解析。而如果玩家退出菜单或 客户端未能切换到新环境,此函数 将被拒绝。

参数

·

options对象?此对象用于指定应提供 的环境选项。

·

·

options.filters数组<ContextFilter>?适用于环境推荐的一组筛选条件 。

·

·

options.maxSize数字?在理想情况下,推荐环境应有 的最大玩家数量。

·

·

options.minSize数字?在理想情况下,推荐环境应有 的最小玩家数量。

·

示例

console.log(FBInstant.context.getID());// 1122334455FBInstant.context

.chooseAsync()

.then(function() {

console.log(FBInstant.context.getID());

// 1234567890

});

console.log(FBInstant.context.getID());// 1122334455FBInstant.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 将在游戏切换到用户选择的环境时 被解析。否则此 promise 将被拒绝 (例如用户退出对话框)。

createAsync( )

尝试在指定玩家和当前玩家之间创建环境或 切换环境。如果列出的玩家不是当前玩家的关联玩家, 或玩家未提供进入新环境的权限, 则返回的 promise 将被拒绝。 当游戏切换到新环境时, promise 将被解析。

参数

·

playerID字符串玩家的编号

·

示例

console.log(FBInstant.context.getID());// 1122334455FBInstant.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 将在游戏切换到新环境时被解析, 在切换失败时被拒绝。

getPlayersAsync( )

获取#contextplayer对象的数组, 其中包含与当前环境相关的活跃玩家 (在过去 90 天内玩过游戏的用户)的信息。这可能包含当前 玩家。

注意:只有当 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<数组<ContextPlayer>>

getLocale( )

当前的语言设置。根据这一结果确定当前的游戏应本地化 为哪种语言。在 FBInstant.startGameAsync() 被解析之前,对应的值将不准确。

示例

// This function should be called after FBInstant.startGameAsync()// resolves.var locale = FBInstant.getLocale(); // 'en_US'

返回字符串?当前的语言设置。

getPlatform( )

当前运行游戏的平台。对应的值将始终为 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 库。应在调用其他任何 SDK 函数 之前调用此函数。

示例

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( )

报告游戏的初始加载进度。

参数

·

percentage数字介于 0 和 100 之间的数字。

·

示例

FBInstant.setLoadingProgress(50); // Assets are 50% loaded

返回void

getSupportedAPIs( )

提供客户端支持的 API 函数的列表。

示例

// This function should be called after FBInstant.initializeAsync()// resolves.FBInstant.getSupportedAPIs();// ['getLocale', 'initializeAsync', 'player.getID', 'context.getType', ...]

返回数组<字符串>客户端显式支持的 API 函数 列表。

getEntryPointData( )

返回与启动游戏的入口点相关的任何数据 对象。

对象内容由开发者定义,可通过不同平台 的入口点触发。对于较旧版本的移动客户端, 以及没有与特定入口点相关的数据时, 此函数会返回 null。

仅当 FBInstant.startGameAsync() 被解析后 才应调用此函数。

示例

// This function should be called after FBInstant.initializeAsync()// resolves.const entryPointData = FBInstant.getEntryPointData();

返回对象?与当前入口点相关的数据。

getEntryPointAsync( )

返回启动游戏的入口点

示例

// This function should be called after FBInstant.initializeAsync()// resolves.FBInstant.getEntryPointAsync().then(entrypoint => console.log(entrypoint));// 'admin_message'

返回字符串用户启动游戏时所在的入口点的 名称

setSessionData( )

为当前环境设置与单个游戏会话相关的 数据。

当游戏需要更新当前的会话数据时, 应调用此函数。此会话数据可用于填充各种负载, 如玩游戏 webhook。

参数

·

sessionData对象一个随机数据对象,转变为字符串后,必须小于 或等于 1000 个字符。

·

示例

FBInstant.setSessionData({coinsEarned: 10, eventsSeen: ['start', ...]});

返回void

startGameAsync( )

表示游戏已完成初始加载, 并准备就绪可以开始游戏。当返回的 promise 被解析时, 环境信息即为最新。

示例

FBInstant.startGameAsync().then(function() {

myGame.start();});

·

抛出INVALID_PARAM

·

·

抛出CLIENT_UNSUPPORTED_OPERATION

·

返回Promise此 promise 将在游戏应该启动时被解析。

shareAsync( )

此函数会调用一个对话框,让用户以下列方式分享指定的内容:在 Messenger 中发送消息,或在用户时间线上发布帖子。可以在分享中添加数据块, 通过此次分享启动的每个游戏会话 都可以通过 FBInstant.getEntryPointData() 访问此数据块。转变为字符串时, 此数据必须小于或等于 1000 个字符。用户 可以选择取消分享操作和关闭对话框, 但无论用户实际是否分享了内容, 返回的 promise 都将在对话框关闭时解析。

参数

·

payloadSharePayload,指定要分享的内容。详情 请参阅示例。

·

示例

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 通知游戏内发生的更新。这会 暂时将控制权移交给 Facebook,且 Facebook 将确定要 根据更新内容采取什么操作。返回的 promise 将在 Facebook 把 控制权返还给游戏时解析/拒绝。

参数

·

payloadCustomUpdatePayload描述更新的负载。

·

示例

// 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 把控制权交还给游戏时 被解析。

quit( )

退出游戏。

示例

FBInstant.quit();

返回void

logEvent( )

通过 Facebook 分析记录应用事件。请参阅https://developers.facebook.com/docs/javascript/reference/v2.8#app_events详细了解 Fcaebook 分析。

参数

·

eventName字符串事件名称。必须为 2 到 40 个字符, 且只能包含“_”、“-”、“ ”和字母数字字符。

·

·

valueToSum数字可选的数值,Facebook 分析利用此参数来 计算总和。

·

·

parameters对象可选的对象,最多可包含 25 个要与事件一同记录的键值对。键必须为 2 到 40 个字符, 且只能包含“_”、“-”、“ ”和 字母数字字符。值的长度必须小于 100 个字符。

·

示例

var logged = FBInstant.logEvent(

'my_custom_event',

42,

{custom_property: 'custom_value'},);

返回APIError?如果事件记录错误,将返回错误; 否则返回 null。

onPause( )

设置发生暂停事件时将触发的回调。

参数

·

func函数发生暂停事件时将调用的函数。

·

返回void

getInterstitialAdAsync( )

尝试创建插屏广告的实例。此实例可在之后 预载和显示。

参数

·

placementID字符串在 Audience Network 设置中设置的 版位编号。

·

示例

FBInstant.getInterstitialAdAsync(

'my_placement_id',).then(function(interstitial) {

interstitial.getPlacementID(); // 'my_placement_id'});

·

抛出ADS_TOO_MANY_INSTANCES

·

·

抛出CLIENT_UNSUPPORTED_OPERATION

·

返回Promise此 promise 将在获得#adinstance时被解析;在获得#apierror时被拒绝 (如果未能创建)。

getRewardedVideoAsync( )

尝试创建奖励式视频广告的实例。此实例可在之后 预载和显示。

参数

·

placementID字符串在 Audience Network 设置中设置的 版位编号。

·

示例

FBInstant.getRewardedVideoAsync(

'my_placement_id',).then(function(rewardedVideo) {

rewardedVideo.getPlacementID(); // 'my_placement_id'});

·

抛出ADS_TOO_MANY_INSTANCES

·

·

抛出CLIENT_UNSUPPORTED_OPERATION

·

返回Promise此 promise 将在获得#adinstance时被解析;在获得#apierror时被拒绝 (如果未能创建)。

LocalizationsDict

代表特定字符串的语言设置与翻译之间的映射。 每个属性均为可选且包含五个字符的 Facebook 语言代码,格式为 xx_XX。 请参阅https://www.facebook.com/translations/FacebookLocales.xml, 获取受支持的语言代码的完整列表。

类型:对象

APIError

小游戏 SDK 返回的 API 错误

code

相关的错误代码

类型:ErrorCodeType

message

描述错误的消息

类型:字符串

SignedPlayerInfo

代表玩家信息,并包含签名, 签名用于验证对应信息确实来源于 Facebook。

getPlayerID( )

获取玩家的编号。

返回字符串玩家的编号

getSignature( )

用于验证此对象确实来源于 Facebook 的签名。此字符串 使用 base64url 编码, 并根据 OAuth 2.0 协议使用 HMAC 版本的应用密钥签名。

您可以通过以下 4 步进行验证:

·

将签名分为两个部分,以“.”字符隔开。

·

·

通过 base64url 编码对第一部分(编码后的签名)进行解码。

·

·

通过 base64url 编码对第二部分(响应负载)进行解码, 第二部分应该是代表 JSON 对象(包含下列字段)的字符串: ** algorithm — 始终等于 HMAC-SHA256。 ** issued_at — 发出此响应的 unix 时间戳。 ** player_id — 玩家的唯一标识。 ** request_payload — 您在调用 FBInstant.player.getSignedPlayerInfoAsync 时 指定的 requestPayload 字符串。

·

·

请采用 HMAC SHA-256 和您的应用密钥散列处理 整个响应负载字符串,并确定它等同于经编码的签名。

·

·

还建议您验证响应负载中 的 issued_at 时间戳,确保请求是最近发出的。

·

应仅在您的服务器中进行签名验证。不要在客户端进行签名验证, 因为客户端可能会泄漏您的应用密钥。

示例

Eii6e636mz5J47sfqAYEK40jYAwoFqi3x5bxHkPG4Q4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwMDM5ODY3NSwicGxheWVyX2lkIjoiMTI0OTUyNTMwMTc1MjIwMSIsInJlcXVlc3RfcGF5bG9hZCI6Im15X2ZpcnN0X3JlcXVlc3QifQ

返回字符串签名字符串。

ConnectedPlayer

代表与当前玩家关联的玩家的信息。

getID( )

获取关联玩家的编号。

返回字符串关联玩家的编号

getName( )

获取玩家的全名。

返回字符串?即玩家的全名

getPhoto( )

获取玩家公开头像的网址。

返回字符串?玩家公开头像的网址

ContextPlayer

代表与当前玩家在相同环境中玩游戏 的玩家的信息。

getID( )

获取相同环境玩家的编号。

返回字符串相同环境玩家的编号

getName( )

获取经本地化显示的玩家姓名。

返回字符串?经本地化显示的玩家姓名。

getPhoto( )

获取玩家公开头像的网址。

返回字符串?玩家公开头像的网址

AdInstance

代表广告实例。

getPlacementID( )

返回此广告实例的 Audience Network 版位编号。

loadAsync( )

预加载广告。返回的 promise 将在预加载完成时被解析, 在预加载失败时被拒绝。

示例

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 将在用户 观看完广告时被解析,在广告展示失败或 用户在广告展示期间关闭广告时被拒绝。

示例

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

适用于环境选择操作的筛选条件。 “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。

类型:{answer:boolean, minSize:number?, maxSize:number?}

SharePayload

代表用户分享的内容。

类型:对象

属性

·

intent("INVITE"|"REQUEST"|"CHALLENGE"|"SHARE")表示分享的意图。

·

·

image字符串要分享的 base64 编码图片。

·

·

text字符串要分享的文本消息。

·

·

data对象?要附加到分享中的数据块。通过分享 开始的所有游戏会话都可以通过 FBInstant.getEntryPointData() 访问此数据块。

·

错误代码

小游戏 API 可能会返回的错误代码

属性

·

ADS_FREQUENT_LOAD字符串广告加载太频繁。

·

·

ADS_NO_FILL字符串我们无法向当前的用户投放 广告。如果用户在设备中退订基于兴趣的广告 ,或我们没有广告可展示给该用户,就会出现这种情况

·

·

ADS_NOT_LOADED字符串尝试显示此前未成功 加载的广告。

·

·

ADS_TOO_MANY_INSTANCES字符串同时展示的广告实例 太多。建议您先加载和展示现有广告实例,再新建广告。

·

·

ANALYTICS_POST_EXCEPTION字符串分析 API 在尝试发布事件 时遇到问题。

·

·

CLIENT_REQUIRES_UPDATE字符串[已停用] — 客户端要求获得 更新,以便访问返回此结果的功能。如果在网页端 返回这一结果,则意味着该网页客户端还不支持 此功能。v5.0 及更高版本已停用这一代码,以便支持 CLIENT_UNSUPPORTED_OPERATION

·

·

CLIENT_UNSUPPORTED_OPERATION字符串客户端不支持 当前操作。这可能是因为客户端版本或平台不提供 相关支持,或不允许对游戏或玩家执行此 操作。

·

·

INVALID_OPERATION字符串所请求的操作无效, 或表示当前的游戏状态。这包括违反限制 (如超出存储上限)或不适用于特定状态 (如在独立的环境中针对特定环境发出请求) 的情况。

·

·

INVALID_PARAM字符串传递给 API 的参数 无效。可表示错误类型、参数的无效数字,或 语义问题(例如,将不可序列化的对象传递到 序列化函数)。

·

·

NETWORK_FAILURE字符串客户端处理网络请求时 出现问题。这可能是由暂时性问题导致的, 如玩家的网络连接中断。

·

·

PENDING_REQUEST字符串表示因存在与此请求冲突的 一项请求而被拒绝。例如,当某个依赖于 Facebook 用户界面的请求处于待处理状态时, 我们就会拒绝显示 Facebook 用户界面的其他任何调用。

·

·

SAME_CONTEXT字符串游戏尝试切换到 当前环境。

·

·

UNKNOWN字符串发生了未知或未指定的问题。这是 客户端未指定代码时返回的默认错误代码。

·

·

USER_INPUT字符串用户的选择导致 被拒绝。例如,如果游戏调用环境切换对话框, 而玩家关闭此对话框, 则 promise 拒绝中就会包含此错误代码。

·

示例

FBInstant.startGameAsync().catch(function(e) {

console.log(e);});// {code: 'CLIENT_UNSUPPORTED_OPERATION', message: '...'}

ErrorCodeType

小游戏错误代码,#errorcode中的一种

类型:字符串

CustomUpdatePayload

代表 FBInstant.updateAsync 的自定义更新。

类型:对象

属性

·

action字符串对于自定义更新,此属性应为“CUSTOM”。

·

·

template字符串此自定义更新所使用模板的编号。 模板应在 fbapp-config.json 中预定义。请参阅 [捆绑包配置文档]https://developers.facebook.com/docs/games/instant-games/bundle-config,获取有关 fbapp-config.json 的文档。

·

·

cta(字符串?|LocalizableContent?)可选的行动号召按钮 文本。默认情况下,我们会使用经本地化的“Play”作为按钮文本。 若要提供自定义行动号召的本地化版本, 应传递一个包含默认行动号召的对象作为“default”值,以及将语言键映射到翻译的 另一个对象作为“localizations”值。

·

·

image字符串base64 编码图片的数据网址。

·

·

text(字符串|LocalizableContent)一条文本消息, 或者是一个包含默认文本作为“default”值的对象 以及另一个将语言键映射到翻译内容作为“localizations”值的对象。

·

·

data对象?要附加到更新中的数据块。通过更新 开始的所有游戏会话都可以通过 FBInstant.getEntryPointData() 访问此数据块。转变为字符串时, 此数据块必须小于或等于 1000 个字符。

·

·

strategy字符串?指定更新的发布 方式。可以是下列方式之一: “IMMEDIATE”— 更新应立即发布。 “LAST”— 更新应在游戏会话结束时发布。使用 “LAST”策略发送的是最近发送的更新。 “IMMEDIATE_CLEAR”— 更新将立即发布,并清除其他任何待处理的 更新(如通过“LAST”策略发布的更新)。 如果未指定策略,我们将默认为“IMMEDIATE”。

·

·

notification字符串?指定自定义更新的 通知设置。可以是“NO_PUSH”或“PUSH”,默认为“NO_PUSH”。 仅将推送通知用于 对接收人来说非常显著且可立即操作的更新。另请注意,并不一定 会发送推送通知,具体取决于用户设置和平台政策。

·

LocalizableContent

代表一个字符串,其中包含最终使用的本地化内容和默认值。

类型:对象

属性

·

default字符串要使用的字符串的默认值 (查看者的语言设置不是 localizations 对象中的键时)。

·

·

localizationsLocalizationsDict指定每种语言设置中用于观看者 的字符串。 请参阅https://www.facebook.com/translations/FacebookLocales.xml, 获取受支持的完整语言列表。

为方便大家群策群力,我们创建了一个 Facebook Instant Game 交流群:814298516 。 欢迎同学们加入交流开发和运营经验。