Facebook Instant Game 小游戏快速入门

小游戏快速入门
设置应用
即便您已有托管到 Facebook.com 的网页游戏,或托管到移动应用商店的移动游戏,也需要为自己的小游戏创建一款新应用。您无法使用与其他应用相同的 Facebook 应用编号制作一款小游戏。

将类别设置为“游戏”
前往应用面板的基本设置版块,确保将类别设置为游戏。保存更改。

为应用添加管理员、开发者和测试员
Facebook 正在逐步面向更广泛的受众推广小游戏,您的游戏目前可能无法对所有用户开放。要确保游戏的所有发开者和测试员拥有访问权限,请在应用面板的用户身份选项卡中将他们添加为应用的管理员、开发者或测试员(请参见下方截图)。详细了解用户身份。

在应用面板中启用小游戏功能
请注意:请勿向针对 iOS、Android 或 Web 环境配置的原有 Facebook 应用添加小游戏。为小游戏创建的 Facebook 应用编号不适用于其他平台。

新建 Facebook 应用
要为应用启用*小游戏功能,点击导航菜单底部的 + 添加商品按钮。 这一操作将打开应用中的可用产品列表。在列表中找到小游戏,并点击开始按钮。这一操作将为菜单添加一个小游戏版块。确保开启在小游戏平台上架开关。保存更改,然后继续。

SDK 第一步
导入
现在您已设置好应用,需要开始创建游戏客户端。 游戏客户端根目录下需要有一个 index.html 文件。请首先从此文件导入小游戏 SDK。

初始化
我们的 SDK 广泛使用 Promises 来实现异步功能。您只能在 FBInstant.initializeAsync() 解析完成后与加载的用户界面互动。

FBInstant.initializeAsync()
.then(function() {
// Start loading game assets here
});
游戏客户端不会一次性下载所有捆绑包(.zip 文件),而是会搜索配置根文件 (fbapp-config.json) 和主文件 (index.html)。之后,它将开始执行主文件中所含的逻辑,并开始从此处下载资产。开发者可以全权控制资产加载的顺序和时间。

在开始下载初始化游戏所需的资产后,您需要将加载进度告知 SDK,以便我们向玩家展示加载进度环。

var images = [‘sprite1’, ‘sprite2’, …];
for (var i=0; i < images.length; i++) {
var assetName = images[i];
var progress = ((i+1)/images.length) * 100;
game.load.image(assetName);

// Informs the SDK of loading progress
FBInstant.setLoadingProgress(progress);
}

// Once all assets are loaded, tells the SDK
// to end loading view and start the game
FBInstant.startGameAsync()
.then(function() {
// Retrieving context and player information can only be done
// once startGameAsync() resolves
var contextId = FBInstant.context.getID();
var contextType = FBInstant.context.getType();

var playerName = FBInstant.player.getName();
var playerPic = FBInstant.player.getPhoto();
var playerId = FBInstant.player.getID();

// Once startGameAsync() resolves it also means the loading view has 
// been removed and the user can see the game viewport

game.start();

});
如需详细了解 initializeAsync()、setLoadingProgress() 和 startGameAsync() 方法,请参阅 SDK 参考文档。

测试和上传
小游戏内容在 Facebook 基础设施上托管,因此,无需自行托管游戏内容或使用第三方服务。在准备好游戏进行测试后,将所有游戏文件打包为一个 .zip 文件。请注意,index.html 文件应位于此存档的根文件夹中,而不应位于任何子文件夹中。

要上传 .zip 文件,请点击应用面板中的虚拟主机选项卡。从该选项卡的下拉菜单中选择“小游戏”,然后单击 +上传版本,即可将 .zip 文件上传到 Facebook 的托管服务中。

之后,构建版本会处理文件,仅需数秒时间。状态更改为“待命”时,单击“★”按钮将构建版本推送到生产。
这里写图片描述

之后,您可以在移动设备中测试构建版本。现在,在 Messenger 内的游戏列表中,您可以在“开发中”版块下看见已发布的构建版本。为了加快开发流程,您可以参考此指南,了解如何通过图谱 API 从命令行上传构建版本,或者如何直接从开发服务器进行测试:测试、发布和分享小游戏

游戏环境更新
我们已经介绍过使用小游戏 SDK 的基本知识,现在来看看如何让您的游戏与游戏环境互动。

我们用游戏环境一词来定义可以玩游戏的任何环境。更多情况下,游戏环境是指 Messenger 对话,但如果游戏不是在 Messenger 中玩,游戏环境也可以指其他各种位置,例如 Facebook 帖子或小组。

以下示例说明了如何发送游戏环境更新及其在 Messenger 对话中的展示效果。

第 1 步:在配置文件中声明模板
为了声明自定义更新,您需要创建名为 fbapp-config.json 的配置文件,并将其放在捆绑包的根目录中,与 index.html 文件放在一起。如需详细了解受支持的配置,请参阅捆绑包配置部分。 在本示例中,文件内容应该如下所示:

{
“instant_games”: {
“platform_version”: “RICH_GAMEPLAY”,
“custom_update_templates”: {
“play_turn”: {
“example”: “Edgar played their move”
}
}
}
}
通过自定义更新模板配置,我们可以为每个特定的自定义更新分配一个编号,从而更好地进行分析。您必须为所有游戏分配模板编号。

第 2 步:使用 updateAsync 发送自定义更新
在配置文件中声明模板后,便可将模板用于填充 FBInstant.updateAsync 中的必填 template 字段。以下示例说明井字棋游戏如何利用调用通知对手轮到他们出棋。您可以在右侧看到消息的展示效果。

// 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: ‘Play’,
image: base64Picture,
text: {
default: ‘Edgar played their move’,
localizations: {
en_US: ‘Edgar played their move’,
es_LA: ‘\u00A1Edgar jug\u00F3 su jugada!’
}
}
template: ‘play_turn’,
data: { myReplayData: ‘…’ },
strategy: ‘IMMEDIATE’,
notification: ‘NO_PUSH’
}).then(function() {
// closes the game after the update is posted.
FBInstant.quit();
});

这里写图片描述
有关自定义游戏环境更新的更多信息,请参阅我们的小游戏 SDK 参考文档。

如需查看相关最佳实践指南,了解何时向其他玩家发送消息、何时向他们发送通知以及最好在游戏环境更新中添加哪些内容,请参阅我们的最佳实践部分。

请注意,游戏环境更新不会发送到 Messenger 以外的地方。通过使用 context.getType() 方法和检测 THREAD 来定制游戏体验非常有用。您可以使用 context.switchAsync、context.chooseAsync 或 context.createAsync 切换到更为合适的游戏环境。

(可选)设置游戏智能助手,再次吸引玩家
小游戏的一项重要功能是能附加 Messenger 平台智能助手。这项功能虽为选择性配置,却为游戏提供了一个强有力的再参与渠道。以下指南说明了如何创建和设置游戏智能助手。

第 1 步:创建主页
如需创建游戏智能助手,您首先需要创建 Facebook 主页。主页要正确地与小游戏关联,需要具备一些特殊的属性:

主页类别需要是应用主页
主页名称需要包含应用名称。
主页不能与其他应用关联。
您可以前往“应用面板”,在小游戏产品的应用主页版块创建满足这些特殊条件的主页。 在执行下一步操作前,请确保应用主页版块如右图所示:

这里写图片描述
注意:如果小游戏未与上述类型的主页正确关联,智能助手将不会收到 messaging_game_plays 事件

第 2 步:激活智能助手
创建主页后,您需要确保响应其消息 webhooks。Webhooks 是在向您的主页发送消息事件时,我们向您的后端发送的 HTTP 调用。之后,您的服务器的逻辑将决定如何正确地响应每个事件(如果响应适用)。 如需将服务器的端点与主页事件相关联,请按照 Messenger 平台快速入门教程中的说明为主页启用智能助手。下表介绍了将智能助手与小游戏关联所需的 webhooks 和权限:

部分 值
主页事件

messages 和 messaging_game_plays

权限

pages_messaging

小游戏智能助手仅可使用标准消息和 GAME_EVENT消息标签,不能使用 pages_messaging_subscriptions。

如果您的智能助手具有需要用到订阅消息或客户匹配的其他功能,您应创建单独的应用并重新申请 Messenger 平台权限。

第 3 步:响应 messaging_game_plays webhooks
正确配置智能助手后,您的服务器端应用程序将开始在玩家每次关闭小游戏时接收 messaging_game_plays webhooks。下面是服务器端应用程序检测到并响应一个 webhook 的示例。

if (event.game_play) {
var senderId = event.sender.id; // Messenger sender id
var playerId = event.game_play.player_id; // Instant Games player id
var contextId = event.game_play.context_id;
var payload = event.game_play.payload;
var playerWon = payload[‘playerWon’];
if (playerWon) {
sendMessage(
senderId,
contextId,
‘Congratulations on your victory!’,
‘Play Again’
);

} else {
sendMessage(
senderId,
contextId,
‘Better luck next time!’,
‘Rematch!’
);
}
}
您可以参阅 Messenger 平台文档,详细了解 webhook:“玩游戏”Webhook 文档。

第 4 步:吸引玩家重回游戏
以下是如何使用图谱 API 向玩家发送 game_play 按钮的示例。

curl “https://graph.facebook.com/v2.6/me/messages?access_token=<PAGE_ACCESS_TOKEN>”
-X POST
-H “Content-Type: application/json”
-d ‘{
“messaging_type”: “UPDATE”,
“recipient”: {
“id”: “<RECIPIENT_ID>”
},
“message”: {
“attachment”: {
“type”: “template”,
“payload”: {
“template_type”: “generic”,
“elements”: [
{
“title”: “It has been a while since your last game. Time to get back”,
“buttons”: [
{
“type”: “game_play”,
“title”: “Play Tic-Tac-Toe.”,
“payload”: “{}”,
“game_metadata”: {
“context_id”: “<CONTEXT_ID>”
}
}
]
}
]
}
}
}
}’
这里写图片描述
您可以参阅 Messenger 平台文档,详细了解此按钮:“玩游戏”按钮文档。

第 5 步:遵循我们的指南和政策
发布至生产阶段后,您的游戏智能助手应进入 Messenger 平台提交流程。提交智能助手之前,请确保遵守下面的最佳实践:

建议:
向玩家提供相关、及时且有价值的更新。如需获取更多信息,请访问我们的最佳实践版块。

给予用户掌控权(例如:让用户确认他们是否想要接收通知以及以接收的频率)。

对玩游戏按钮使用入口点数据,以环境相关的方式加载游戏。

为智能助手设置与游戏相同的名称。

利用社交更新,如回合提醒、比赛结果、限时奖励和挑战。

确保为玩家提供适当的奖励刺激,促使他们通过智能助手消息打开游戏。为此,您可使用消息负载为玩家提供有价值的游戏内奖励。一般来说,如果智能助手消息打开的是游戏的开始页面,这条消息便没有什么价值。

使用固定菜单提供常见操作,如启动游戏。

设置默认操作,在自定义更新中使用 game_play,以便整个图片都能将用户带入游戏中。

通过智能助手公布新功能或内容。

针对每位用户优化每天的消息发送时段,考虑用户所在的时区。

借鉴 Messenger 智能助手的通用最佳实践。

请勿:

在玩家关闭游戏后立即发送消息。

发送没有任何背景信息的消息再次吸引玩家(例如:“立即回到游戏中!”)。建议首选包含丰富背景信息的消息来重新吸引玩家(例如:“你的侦查员为你带回了更多信息”)

使用其他 Facebook 用户的口吻,或误导玩家以为他们好友在与他们沟通。

在用户屡次不想加入游戏的情况下继续向他们发送智能助手消息。这种情况将适用政策限制,并阻止您发送消息。当前的限制为,自最后一次游戏会话结束后 10 天最多可发送 5 条消息。如需详细了解,请参阅我们的开放平台政策文档中的第 9.4 条

将 messaging_type 设置为 RESPONSE 或 UPDATE 以外的其他任何值

链接至任何应用商店。

后续步骤
了解如何构建和配置小游戏和游戏智能助手后,请务必参阅下面的指南:

最佳实践 — 优化游戏表现的最佳实践和建议
发布检查表 — 提交游戏之前需要检查的各个方面
常见问题 — 常见问题和疑难解决方法

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

在这里插入图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xiaojiezi_2005/article/details/81449495