将PHP与JSON配合使用,使得PHP和iOS之间的通信变得非常容易。
在服务器上,可以将数组格式化为 JSON,如下所示:
服务器示例
<?php
$response = cydia_check("eswick", $_GET['package'], $_GET['version'], $_GET['udid'], $_SERVER['REMOTE_ADDR'], "local", $apikey);//Example function, returns an array. (In this case, checks an activation server to verify if the app was really purchased.)
print json_encode($response);//Prints JSON encoding of array to stdout.
?>
从 iOS 5 开始,感谢 Twitter,Foundation 包含了一个类,使解析 JSON 变得简单。下面是一些调用和解析上述 PHP 函数的示例代码:
客户端示例
#define PACKAGE "com.eswick.drmtest"
#define VERSION "0.8"
NSString *requestAddress = [NSString stringWithFormat:@"http://www.eswick.com/check.php?package=%@&version=%@&udid=%@", PACKAGE, VERSION, MGCopyAnswer(kMGUniqueDeviceID)];
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestAddress]];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *responseCode = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];//Get the output of the PHP page we loaded.
if(!responseData)
return false;
NSError *parseError = nil;
id result = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&parseError];//Parse the JSON output from responseData.
if ([result isKindOfClass:[NSDictionary class]]){//Make sure the output is an array.
NSString *state = [result valueForKey:@"state"];//Check the array returned by PHP for a value named 'state'.
if (!state){//If it doesn't exist, fail.
return false;
}else{
if([state isEqualToString:@"purchased"])//If app is truly purchased, return success.
return true;
}
}
这应该让您大致了解它的工作原理。您必须对其进行更改以满足您的需求,但这是一个非常基本的概念。
显然,不要实际上将此示例代码用作 DRM。