我有一个应用程序,允许用户通过Facebook登录,所有已注册的用户都将他们的Facebook ID存储在我们的数据库中,以便我们知道谁拥有谁以及谁没有注册我们的应用程序。非常标准的东西,这部分一切正常,并已经过测试等。
接下来,我需要让用户看看他们的朋友已经拥有该应用(即哪些已经注册)。
我从Facebook获取他们的好友列表,制作一个包含所有用户ID的JSON字符串,现在我需要知道如何将这个JSON字符串发送到我的PHP脚本并让它将JSON与所有用户进行比较。数据库已经创建了一个ID数组,可以在JSON字符串和数据库中找到。 然后我需要通过PHP将该数组发送回应用程序(可能再次作为JSON),以便我可以从Facebook好友的用户列表中过滤出未注册的ID。
要注册用户,我当前在应用程序中使用以下格式发送请求:
NSString *host = @"my.domain";
NSString *urlString = [@"myPHP.php?"stringByAppendingString:@"task=register"];
//list of args which are sent
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:host path:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSError *requestError = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&requestError];
在我的PHP中,我使用了这些内容(我将省略连接到数据库等的部分,因为这一切都有效,我想这是所有应用程序的标准):
function __construct($db, $args=NULL) {
$this->db = $db;
$this->checkSetup();
$this->apnsData = array(
'production'=>array(
'certificate'=>$this->certificate,
'ssl'=>$this->ssl,
'feedback'=>$this->feedback
),
'sandbox'=>array(
'certificate'=>$this->sandboxCertificate,
'ssl'=>$this->sandboxSsl,
'feedback'=>$this->sandboxFeedback
)
);
if(!empty($args)){
switch($args['task']){
case "register":
$this->_registerDevice(
$args['appname'],
$args['devicetoken'],
$args['facebookID']
);
break;
//etc
正如我所说,一切正常,我使用类似的东西来做另一个功能。然而,这两个函数都不需要将任何内容发送回应用程序本身,所以我非常感谢有关下一步该怎么做的任何帮助。
总结一下我坚持的事情:
我很感激任何人都可以给予任何帮助,因为我过去很少使用PHP或mySQL,所以我不知道下一步该去哪里。
谢谢大家: - )
编辑:我刚刚尝试在浏览器中创建一个虚假的URL请求,只是为了看看当我将一个JSON字符串发送到PHP代码时会发生什么(我只是让它回显结果)。我收到414错误(URI太长)。这是否意味着这不是检索我想要的结果的合适方法?我在JSON字符串中有大约200个朋友的ID,但是很多人会有更多的东西。
编辑2:除了留下的评论之外,这样的事情会更适合发送数据:
NSString *jsonString = [friendsIDArray JSONRepresentation];
NSMutableURLRequest *mrequest = [[NSMutableURLRequest alloc] init];
NSString *post = [NSString stringWithFormat:@"json=%@", jsonString];
NSLog(post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
[mrequest setURL:[NSURL URLWithString:@"http://plantpot.co/app_Boom_php/apns.php"]];
[mrequest setHTTPMethod:@"POST"];
[mrequest setHTTPBody:postData];
[[NSURLConnection alloc] initWithRequest:mrequest delegate:self];
答案 0 :(得分:0)
最终使用GET进行管理以使其正常工作。
NSString *jsonString = [friendsIDArray JSONRepresentation];
//send this to the server
NSString *friendHost = @"ourdomain.com";
NSString *friendurlString = [@"/thephp.php?"stringByAppendingString:@"task=getRegistered&jsonList=%@", jsonString];
NSURL *friendURL = [[NSURL alloc] initWithScheme:@"http" host:friendHost path:friendurlString];
NSURLRequest *friendRequest = [[NSURLRequest alloc] initWithURL:friendURL];
NSError *friendRequestError = nil;
//the reply is the list of ID's which are NOT registered on the database
NSData *friendReturnData = [NSURLConnection sendSynchronousRequest:friendRequest returningResponse:nil error:&friendRequestError];
NSString *stringReply = (NSString *)[[NSString alloc] initWithData:friendReturnData encoding:NSUTF8StringEncoding];
//convert this string to an array
NSArray *unregisteredFriends = [stringReply JSONValue];
然后在PHP脚本中我做了以下事情:
function _returnRegisteredFriends($jsonArg)
{
$db = new DbConnect();
$column = array();
$result = $db->query("SELECT facebookID FROM registered_users");
//populate column array with all of the facebook user IDs
while($row = $result->fetch_array(MYSQLI_ASSOC)){
$column[] = $row['facebookID'];
}
$newphrase = str_replace('\\', '', $jsonArg);//remove escape characters
$decoded = json_decode($newphrase);//from json to array
$arrayresult = array_diff($decoded, $column);
echo json_encode($arrayresult);
}
这将从我的数据库中获取所有用户ID,并将其与传递给它的数组($ jsonArg)进行比较。然后计算出差异,然后echo将其作为friendReturnData返回给应用程序。
所有似乎都应该正常工作,感谢那些建议使用POST方法的人 - 结果证明GET方法令人满意。
答案 1 :(得分:0)
-(IBAction)Btn_Login:(id)sender
{
NSString *Post = [NSString stringWithFormat:@"email=%@&password=%@", Text_Email.text, Text_Pass.text];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@LoginTest.php?%@", ServerPath, Post]];
NSData *Returndata = [NSData dataWithContentsOfURL:url];
NSString *Response = [[NSString alloc] initWithData:Returndata encoding:NSUTF8StringEncoding];
Response = [Response stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@",Response);
}