0

Am trying to post some user data from ios to my php api, but the data am receiving is not properly formatted as a json file. Please can someone help me out as i am very new to ios and objective c.

Here is my php sample

<?php 
if(isset($_REQUEST['data']) ){
    if(!empty($_REQUEST['data']) && strlen($_REQUEST['data']) > 3){
        $api_data = $_REQUEST['data'];
        $json_data = json_decode($api_data, true);
        $hash_key = md5($api_data);
        $post_var  = array(
            'date' => date('m-d-Y h:m:sA'),
        );
        $post_var  = '{"apiData":'.$api_data.', "moreData":'.json_encode($post_var).'}';
        $readTheApis = __DIR__ . '/cdn/api_request_note.txt';
        $handl_log = fopen($readTheApis, "a+") or die("Failed to create log");
        $addlog = fwrite($handl_log, $post_var. "\r\n");
        fclose($handl_log);
        foreach ($json_data as $key => $val) {
            echo $key . ' | ' . $val;
        }
    }
}

OBJECTIVE C

-(void)HitAPI{

    [SVProgressHUD showWithStatus:@"Wait.."];

    NSDictionary *jsonUserDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
        Str_LatPost, @"lat",
        Str_LongPost, @"long",
        [[FIRInstanceID instanceID] token], @"fcmtoken",
        [[UIDevice currentDevice] name], @"device",
        deviceName(), @"device_type",
        [[NSUserDefaults standardUserDefaults] valueForKey:@"pref_mytoken"], @"deviceid",
        @"FRaVY4cXVoVjA", @"key", nil];

    NSMutableArray *mutArrData = [NSMutableArray array];
    [mutArrData addObject:jsonUserDictionary];

    NSString*StrPost = [NSString stringWithFormat:@"data=%@",mutArrData];
    NSString *jsonString = StrPost;
    jsonString = [jsonString stringByReplacingOccurrencesOfString:@" " withString:@""];
    jsonString = [jsonString stringByReplacingOccurrencesOfString:@"[" withString:@""];
    jsonString = [jsonString stringByReplacingOccurrencesOfString:@"]" withString:@""];
    NSData *postData = [jsonString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

    [request setURL:[NSURL URLWithString:[
      NSString stringWithFormat:@"https://example.com/app/1d54f4dax/api.php?data"
      ]]];

    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];

    /*
     BECUSE OF DEPRECIATE WARNING I ADDED THE BELOW CODE BUT AM NOT SURE IF IT WILL WORK
     NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [theConnection start];*/


    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *theConnection = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
        // do something with the data'
    }];
    [theConnection resume];
}

Current result

{ device=iPhone; "device_type"="iPhone6"; deviceid=f2cd64; fcmtoken="9exBTN7FSfg"; key=XVoVjA; lat="2.90909862"; long="101.897877"; }

Expected Result

{ "device":"iPhone", "device_type":"iPhone6", "deviceid":"f2cd64", "fcmtoken":"9exBTN7FSfg", "key":"XVoVjA", "lat":"2.90909862", "long":"101.897877" }

Peter
  • 1,860
  • 2
  • 18
  • 47
  • You are using `-description` method, you are not using JSON. Instead: of `data=%@, mutArrData`, do `NSData *jsonData = [NSJSONSerialization dataWithObject:mutArraData options:0 error:nil]; NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding], ... data=%@, jsonStr `, but there are also plenty of strange things in your code, well it's not clean at all. – Larme Jun 16 '18 at 17:44
  • Possible duplicate of [Generate JSON string from NSDictionary in iOS](https://stackoverflow.com/questions/6368867/generate-json-string-from-nsdictionary-in-ios) – Tom Udding Jun 16 '18 at 17:45

1 Answers1

0

hmmm , seems complicated for naught. Your are embedding your jsonUserDictionary into some other dictionary, and after you need to remove the [] ... try this simple approach:

NSError *writeError = nil;
NSData  *jsonData   = [NSJSONSerialization dataWithJSONObject: jsonUserDictionary options:NSJSONWritingPrettyPrinted error:&writeError];
if (writeError) {
    NSLog(@"Write error : %@", [writeError description]);
}
NSString *jsonString = [[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] stringByRemovingPercentEncoding];
// now send this


[request setHTTPMethod:@"POST"];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
[resuest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

// get rid of apple dogma

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
_urlConnection = [[NSURLConnection alloc] initWithRequest:request
                                                 delegate:self];
YvesLeBorg
  • 9,070
  • 8
  • 35
  • 48