Непредвиденная ошибка подписи QuickBlox при создании сеанса с REST Api в iOS

Это может быть повторяющийся вопрос, но я не могу найти ничего о том, что с ним не так, я пытался создать сеанс через API отдыха QuickBlox, он занял 5 дней, но я не могу его пройти. Пожалуйста, помогите мне

Настройка тела

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

Получение подписи

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

Создание URL-запроса

requestURL = [requestURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:requestURL];
NSString *postLength=@"";
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"];

Ответ, который я получаю:

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

Пожалуйста, посмотрите на это и дайте мне знать, что я делаю неправильно


person channi    schedule 05.07.2014    source источник
comment
ты решил свою проблему? если да, то можете ли вы опубликовать решение, так как у меня такая же проблема.   -  person    schedule 25.09.2014


Ответы (2)


Та же проблема, с которой я столкнулся. Я пытался решить эту проблему, пожалуйста, попробуйте следующий шаг

  1. Удалите
    модуль QuickBlox.

  2. Переустановите файл модуля Quickblox, который потребует последней версии фреймворка и проектов Rebuild,

Вы увидите волшебство этой проблемы, решенной :) Пожалуйста, дайте мне знать, что описанные выше шаги работают для вас?

Спасибо

person praful argiddi    schedule 13.08.2020

Насколько я понимаю, проблема именно в этой строке

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

вы используете ключ авторизации для создания подписи, но вы должны передать здесь секретный ключ

поэтому попробуйте заменить _pAuthorizationKey секретным ключом

person Rubycon    schedule 14.07.2014
comment
Спасибо @Igor Khomenko, я протестирую и скоро обновлю здесь - person channi; 18.07.2014
comment
Я только что обнаружил, что вы являетесь разработчиком в quickblox. Я пытаюсь внедрить видеочат в свое приложение. но не могу получить действительную подпись. Можете ли вы помочь мне, как получить действительную подпись. В этом вопросе я не могу понять, что dataval передается в методе. Пожалуйста, помогите, если возможно - person ; 26.09.2014
comment
@Игорь, что такое dataVal? Что нужно сюда зайти? - person user3344977; 21.03.2015