2012-03-06 5 views
0

사용자가 Facebook을 통해 로그인 할 수있는 앱이 있고 등록 된 모든 사용자가 Google 데이터베이스에 저장된 Facebook ID를 가지고있어 누가 누구와 누구와 통화했는지 알 수 있습니다 Google 앱을 등록하지 않았습니다. 매우 표준적인 것이고 그 부분은 모두 잘 작동하고 테스트를 마쳤습니다.PHP를 통해 mySQLi 데이터베이스에서 Xcode로 비교 데이터 가져 오기

다음으로 사용자가 이미 친구가있는 앱 (즉, 등록 된 앱)을 볼 수 있도록해야합니다.

친구 목록을 Facebook에서 가져 와서 모든 사용자 ID의 JSON 문자열을 만들고이 JSON 문자열을 내 PHP 스크립트로 보내고이 JSON 문자열을 모든 사용자와 비교하는 방법을 알아야합니다. 데이터베이스는 이미 JSON 문자열과 DB 모두에있는 ID 배열을 만듭니다. 그런 다음 배열을 PHP (아마 JSON으로 다시)를 통해 앱으로 보내야합니다. 그러면 Facebook 친구의 사용자 목록에서 등록되지 않은 ID를 필터링 할 수 있습니다.

나는 현재 요청을 보낼 수있는 응용 프로그램에 다음과 같은 형식을 사용하고있는 사용자를 등록하려면 내 PHP에서

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]; 

나는 (내가 연결 부분을 떠날거야이 라인을 따라 뭔가를 사용을 내가 상상하는 모든 작품과 같은 DB 등, 그리고) 모든 응용 프로그램에 대한 표준입니다 :

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 스크립트로 JSON 문자열을 보내기

  • :

    내가에 붙어 무엇을 요약합니다.
  • JSON을 mySQLi DB의 한 열에있는 모든 항목을 포함하는 배열과 비교합니다.
  • 일치하는 항목의 배열을 다시 앱으로 반환합니다.

나는 과거에 PHP 나 MySQL과 관련하여 거의 일을하지 않았기 때문에 누구에게나 도움을 줄 수있어서 고맙겠습니다. 그래서 다음에 어디로 갈지 잘 모르겠습니다.

감사합니다 모두 :-)

편집 : 난 그냥이 PHP 코드로 JSON 문자열을 보낼 때 단지 어떻게되는지, 브라우저에서 실행하는 가짜 URL 요청을 시도했습니다 (난 그냥이 결과를 에코합니다.) 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

GETing 대신 POSTing을 시도해보십시오. GET을 사용하여 쿼리 문자열에 밀어 넣을 수있는 데이터의 양에는 제한이 있습니다. –

+0

요청이 많은 사용자에게 얼마나 오래 걸릴지 테스트하려면 – miki

+0

도 여러 요청으로 분할해야 할 수 있습니다. 그런 다음 GET 메소드를 수행하는 NSURLRequest 메소드가 있습니까? – TheBestBigAl

답변

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); 
} 

이 내 데이터베이스에서 사용자 아이디의 모든 가져오고 그것 ($ jsonArg)를 통해 전달 된 배열과 비교합니다. 그 차이가 계산 된 다음 echo는 friendReturnData로 다시 앱에 반환합니다.

POST 메서드 사용을 제안한 사람들 덕분에 모든 것이 제대로 작동하는 것 같습니다. GET 메서드가 만족 스러웠습니다.

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); 
} 
관련 문제