[Part.2] EメールよりURLSchemes機能を活用してゲームレベルデータを送信する解決方法

3.アプリ内でメールを送信する

URLSchemes機能を使う前にアプリ内でメールを送信する機能を実現しなければならない。

MFMailComposeViewControllerより’簡単にできますからこのポストを参考してくださいね:

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

このプロジェクトとにとては一番重要な部分はメールの中身です、リンク内に先ほど生成したJSON文字列をこういう風に挿入すべきです::

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

これでアプリ内でのメールを送信する機能が完成しました、そしてメール内含まれたリンクにJSON文字列が付いてます。

次はこの文字列をURLSchemes機能利用してゲームレベルを送信する。

4.URLSchemesの使い方(送信・受信)

URLSchemesについての紹介と簡単な使いかたまずこのポストを参考してください:

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

このデモに使うURLSchemesはこちになります:”urlschemesdemo://”

一つ注意すべきことがあります、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;
}
[/cc]

もちろんデータが受信した後すぐデコードすべきです:

[cc lang=”objc”] – (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の後ろに追加してユーザがそのリンクをクリクしてアプリを起動する時そのデータも一緒に送信されるんです:

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

4.2 ゲームレベルデータを受信する:

受信の時は簡単です:

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

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

return YES;
}
[/cc]

これで先ほど送信したデータをちゃんと取りました、後は”processReceivedGameLevel”でそれを一回デコードし、解析してJSONファイルとして保存すればオーケです^_^

5.まとめ

ここまで完成したデモは以下すべての機能が実現しました:

1.”ゲームレベル”を生成してJSONファイルとして保存する
2.アプリ内メールで”ゲームレベル”を送信する
3.URLSchemesよりアプリを起動する、同時に”ゲームレベル”をアプリに送信する
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 🙂


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