在Kongregate游戏中处理访客

由于访客不允许访问API的许多不同部分,每个开发人员必须决定他们想要如何对待它们。这份文件将检查如何检测当用户在页面上从一个访客转换为一个注册用户,它可能在您的游戏未被重新加载时发生。本文档是为了补充其他所有API文档,它假设您能大致了解我们的API如何工作,并有兴趣改善玩我们游戏的访客的体验。

您可以首先判定用户是否是一个访客,通过调用Kongregate API服务对象上的isGuest()函数:

kongregate.services.isGuest()

测试访客功能

为了作为一名访客测试你的游戏,而它仍然在预览状态,你必须附加一个特殊的guest_access_key参数到你游戏的网址。更多信息获取此密钥,以及如何使用它,可以在这里找到

访客到用户的转换

当一个用户登录时,为了检测必须使用AS2或AS3客户端API。有两种不同的方法可以用于检测变化:手动投票,或监听一个事件。

手动投票

这往往是捕捉username/ user_id变化最简单的方法,你可以自己去做,并且在你准备好时去处理变化。

您可以手动检查因为调用kongregate.services对象上的getUsername函数会引起用户名的变化。如果作为访客用户启动,然后他们登录,该函数将返回到他们的新用户名,您可以使用game_auth_tokenuser_id函数检索它们的getGameAuthTokengetUserId

用户登录事件

当一个用户使用欢迎框或从聊天链接登录,您的应用程序将收到一个事件(如果您已经为它注册过),你可以随心所欲处理它。一旦用户登录,它们将能够保存数据,提交统计等。

连接

一旦Kongregate客户端API已成功加载到你的应用程序,您可以注册一个事件监听器,、当一名玩家从访客转化为注册用户会让你知道:


// 监听一个访客->用户转换,无需刷新即可产生
kongregate.services.addEventListener("login", onKongregateInPageLogin);

private function onKongregateInPageLogin(event:Event){
  //获取用户的新登录证明
  var user_id:Number = kongregate.services.getUserId();
  var username:String = kongregate.services.getUsername();
  var token:String = kongregate.services.getGameAuthToken();
    
  // 在这里登录新证明
}

AS2连接

不幸的是,目前没有官方的API是可用于AS2,但下面的代码模板(虽然有点乱)应足以使用:

// 首先检查用户是否是访客 
var services = _global.kongregate.services;
var isGuest:Boolean = services.isGuest();

// 如果用户是访客,注册一个事件监听器,否则我们可以跳过它
if( isGuest ){
  services.addMessageHandler({handleMessage:myMessageHandler});
}

// 这个函数处理内部Kongregate API消息,我们用它来监听
// 登录的消息,因此当一个玩家从访客转换成用户时我们会被通知。
// guest to a user. 
function myMessageHandler(msg):Void{
    // 确保只处理"user.info"消息
  if( msg.getOpcode() == "user.info"){
    // 如果我们作为一个访客并且别无其他启动,一个sign-in会出现
    if( isGuest && !services.isGuest() ){
      // 不要处理消息超过一次
      isGuest = false;

      // 此刻services.getUsername()将包含新的用户名
      // services.getUserId()将包含玩家的Kongregate user_id
      // 并且services.getGameAuthToken()将包含新的auth_token
    }
  }
}

显示登录亮框

您可以使用Kongregate API来显示一个sign-in/register亮框给用户。此功能便于向用户推销创建一个Kongregate帐户,比方说如果他们想购买一个物品。

这将以一个重复占位段显示,就好像他们在聊天界面点击了“登录”或“注册”链接:

kongregate.services.showSignInBox();

如果用户成功登录,或注册一个帐号,你将收到如上文所述的登录事件,其中包含他们的新用户名和game_auth_token。

Edit | Translate | Destroy