2014-07-05 4 views
0

Cela peut être une question répétée mais je ne trouve rien à propos de ce qui ne va pas, j'ai essayé de générer une session via l'API de repos de QuickBlox, il a consommé 5 jours mais je n'arrive pas à le traverser. S'il vous plaît, aidez-moiQuickBlox "Signature inattendue" erreur lors de la session avec REST Api dans iOS

Réglage du corps

NSString *strNonceValue = [NSString stringWithFormat:@"%d", arc4random() % 1000000]; 
    NSString *timeStampValue = [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]; 

NSMutableDictionary *dictSessionInfo = [[NSMutableDictionary alloc] initWithObjectsAndKeys: 
              applicationID, @"application_id", 
              _pAuthorizationKey, @"auth_key", 
              timeStampValue, @"timestamp", 
              strNonceValue, @"nonce", nil]; 

NSString *signature = [self generateSignatureWithText:dataVal andKey:_pAuthorizationKey]; 

[dictSessionInfo setObject:signature forKey:@"signature"]; 

NSData *data = [NSJSONSerialization dataWithJSONObject:dictSessionInfo options:NSJSONWritingPrettyPrinted error:nil]; 
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

Obtenir Signature

- (NSString *)generateSignatureWithText:(NSData *)data andKey:(NSString *)secret { 

    NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *clearTextData = data; 
    uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; 
    CCHmacContext hmacContext; 
    CCHmacInit(&hmacContext, kCCHmacAlgSHA1, secretData.bytes, secretData.length); 
    CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length); 
    CCHmacFinal(&hmacContext, digest); 
    NSData *result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; 
    NSString *hash = [result description]; 
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""]; 

    return hash; 
} 

Génération URLRequest

requestURL = [requestURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *url=[NSURL URLWithString:requestURL]; 
NSString *[email protected]""; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setTimeoutInterval:60]; 
[request setURL:url]; 
NSLog(@"HTTP body Fields : %@", combinedDataStr); 
if([requestType isEqualToString:@"POST"]) { 
    NSData *postData = [combinedDataStr dataUsingEncoding:NSASCIIStringEncoding 
            allowLossyConversion:YES]; 
    postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:postData]; 
} 
else 
    [request setHTTPMethod:@"GET"]; 

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"0.1.0"   forHTTPHeaderField:@"QuickBlox-REST-API-Version"]; 

La réponse que je reçois est:

response dict : { 
    errors =  { 
     base =   (
      "Unexpected signature" 
     ); 
    }; 
} 

S'il vous plaît examiner cette question et laissez-moi savoir ce que je fais mal

+0

avez-vous résolu votre problème? Si oui, alors pouvez-vous poster la solution comme je l'ai eu le même problème. –

Répondre

0

Pour autant que je comprends, le problème est avec cette ligne

NSString *signature = [self generateSignatureWithText:dataVal andKey:_pAuthorizationKey]; 

vous utilisez auth clé pour créer une signature, mais vous devrait passer ici clé secrète

, essayez de remplacer _pAuthorizationKey avec clé secrète

+0

Merci @Igor Khomenko, je vais le tester et mettra à jour ici bientôt – channi

+1

je viens de trouver que vous êtes un développeur dans quickblox.a j'essaie d'implémenter le chat vidéo dans mon application. Dans cette question, je ne peux pas comprendre ce qui est 'dataval' passé dans la méthode. S'il vous plaît aider si possible –

+0

@Igor Qu'est-ce que dataVal? Qu'est-ce qui doit aller ici? – user3344977

Questions connexes