[Part.2] 利用URLSchemes功能通过邮件发送“游戏关卡”的解决方案

3.在游戏内发送邮件

在我们使用URLSchemes之前,首先先要来实现一下游戏内发送邮件的功能。
通过使用MFMailComposeViewController可以简单得实现这个功能,具体可以看以下我以前写过的Demo:

http://www.supersuraccoon-cocos2d.com/2011/03/29/send-e-mail-demo/

对本项目来说,最重要的是邮件的正文部分,我们需要将游戏关卡的JSON字符串内容嵌入到超链接中:

NSString *emailBody = [NSString stringWithFormat:@”Launch Demo!!!“, jsonString];

接下来我们就来使用URLSchemes功能实现关卡数据的发送和接受。

4.使用URLSchemes发送和接收数据

首先我们要做的是为我们的项目设置URLSchemes,具体可以看以下这个教程:

http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

本项目使用的URL是“URLSchemesDemo://”,通过本URL来启动我们的程序
.
另外,在URLSchemes中添加数据一并发送以及接收数据的时候,都需要对数据进行加密解密:

[cc lang=”objc”] – (NSString *)encodeToPercentEscapeString: (NSString *) input
{
// Encode all the reserved characters, per RFC 3986
// ()
NSString *outputStr = (NSString *)
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)input,
NULL,
(CFStringRef)@”!*'();:@&=+$,/?%#[]”,
kCFStringEncodingUTF8);
return outputStr;
}

– (NSString *)decodeFromPercentEscapeString: (NSString *) input
{
NSMutableString *outputStr = [NSMutableString stringWithString:input];
[outputStr replaceOccurrencesOfString:@”+”
withString:@” “
options:NSLiteralSearch
range:NSMakeRange(0, [outputStr length])];

return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
[/cc]

4.1 通过URLSchemes发送游戏关卡数据:

为了使用户在点击我们注册的URLSchemes启动我门的数据的时候,同时将数据传到我们的app中,需要在发送邮件时,在链接中嵌入JSON的游戏关卡数据:

[cc lang=”objc”] jsonString = [[GameDataManager sharedGameDataManager] encodeToPercentEscapeString:jsonString];
NSString *emailBody = [NSString stringWithFormat:@”Launch Demo!!!“, jsonString];
[/cc]

这样,我们的数据就会随着程序启动被传到app中了。

4.2 接收URLSchemes传来的游戏关卡数据:

接收数据还是比较简单的:

[cc lang=”objc”] – (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (!url) {
return NO;
}

[[GameDataManager sharedGameDataManager] processReceivedGameLevel:[url absoluteString]];

return YES;
}
[/cc]

这样,我们就成功的在app启动的时候将附在URLSchemes中的数据接收了下来,接下来只要通过“processReceivedGameLevel”来进行字符串的解密和解析,并将其保存为JSON文件的游戏关卡就可以了。

5.总结

至此,我们的演示项目就全部完成了,主要涵盖了一下的功能:

1.生成“游戏关卡”并保存为JSON文件
2.通过邮件发送生成的“游戏关卡”
3.使用URLSchemes功能来启动app,并附上自定义的游戏数据
4.接收随URLSchemes发送的数据并将其解析成JSON格式的游戏关卡
5.加载保存好的“已发送/已接收”游戏关卡

一些值得注意的地方:

1.对于一个真正的游戏来说,当然应该提供一个让用户方便使用的“游戏编辑器”而不是像项目中一样只是简单的生成一个游戏关卡

2.对于URLSchemes的长度限制问题,虽然我没有查到具体的文档记载的长度限制值,但是我简单的试验了一下,长度在10,0000的时候还是可以正常发送的,所以对于大多数情况应该还是适用的^_^

程序截图:

To Download Page…

☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

If you feel all the stuffs in this site helped you a lot and you would buy me a beer 🙂

Or get a game I made 🙂


☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆