我已经在Android上开发了一个简单的蓝牙对战国际象棋游戏。现在想通过互联网来扩展它,让玩家可以在互联网上对战。每当一名选手下棋,该步骤应通过互联网传输给另一名选手。
如何实现这个功能?
我听说过C2DM机制。这种机制是否适合我所描述的情况,并且是否可靠?
谢谢:)
我已经在Android上开发了一个简单的蓝牙对战国际象棋游戏。现在想通过互联网来扩展它,让玩家可以在互联网上对战。每当一名选手下棋,该步骤应通过互联网传输给另一名选手。
如何实现这个功能?
我听说过C2DM机制。这种机制是否适合我所描述的情况,并且是否可靠?
谢谢:)
是的,C2DM非常适合这种类型的游戏。这就是我自己的游戏(http://www.chesspresso.net)所使用的内容,它是一款安卓通讯国际象棋客户端。
在使用C2DM时需要考虑以下事项:
你不会将信息发送到设备,而是通知设备移动已经发生。你不使用C2DM来传输数据,而是用它来通知某些事情已经改变。
它适用于2.2+的Android系统,这是大多数设备的系统版本。但是如果你想支持旧设备,你需要考虑替代方案。我在旧设备上使用轮询。
你必须申请开发者访问权限,然后一旦你的应用程序准备好了,你就必须申请生产状态。如果你不这样做,一旦发布,你很快就会达到开发者状态配额!他们非常慷慨地提供生产配额,但你必须解释你要用它做什么,而且可能需要几周才能被接受!
你的用户必须拥有一个经过授权的Google帐户,否则C2DM将无法工作。大多数用户都会有与其设备关联的帐户,但有些用户没有,这意味着你可能需要验证是否存在帐户以通知用户。
它是可靠的,但有时设备必须等待消息。有时需要几分钟时间。通常是即时的。
希望这可以帮到你!
更新: C2DM现已被弃用,取而代之的是Google的GCM。
此外,我强烈建议考虑其他选项,因为将自己限制在谷歌特定的API上意味着您将无法支持外部市场。作为替代方案,我目前正在评估Amazon SNS,并且我还将查看Urban Airship。可能还有其他替代方案我尚未考虑评估。
更新: 非Google基础推送通知的评估更新: 对于这个任务,Amazon SNS并不适合,而对于绝大多数应用程序来说,Urban Airship太昂贵了。不幸的是,所有其他替代方案都非常昂贵,特别是如果您的应用程序(像我的一样)严重依赖推送。
在我看来,C2DM正是象棋游戏所需要的通知方式;当对手进行回合时(可能是几分钟/几小时/几天后?),您会收到通知。我已经与一些Google Android开发人员讨论过我的游戏,并且他们表示C2DM非常适合这个用途。不过,您需要通过一个集中式服务器(虽然不是必需的,但非常建议)进行操作,因为可能存在重新同步游戏状态等问题。担心“达到限制”吗?嗯,首先我的C2DM账户每天只能发送“仅仅”100,000条消息。如果您超过了这个限制,我想您得请客!
国际象棋经常通过电子邮件进行游戏。您也可以这样做。
当然,任何集中/联合的消息系统都可以使用。
对于您的用途来说,更好的方法是将jabber客户端添加到应用程序中,并让程序生成用于自动消息传递的帐户名称。您可以托管jabber服务器或在免费提供商上生成帐户。
我为我的在线2D RPG做了这个:http://developingthedream.blogspot.com
基本上,使用一个中间服务器来协调所有客户端之间的数据。您只需打开一个套接字并与中间服务器通信,它会负责将信息传递给任何其他连接的客户端。
我不建议使用C2DM,因为有消息限制,并且延迟仍然太大。使用自己的服务器,您可以进行优化,而且您将是唯一使用该服务的人,因此您的数据将被更快地传送。
我认为C2DM不是下棋的正确方式,因为无法保证消息的传递。你需要更可靠的数据传输方式。