Сбой приложения ios сразу после покупки в приложении
По сути, я в очень плохой ситуации. Наша команда успешно разрабатывает и выпускает новую версию приложения с новой функцией, которую пользователи могут покупать (покупки внутри приложения). Итак, мы протестировали все новые функциональные возможности с тестовым пользователем iTunes, и все отлично работало, однако, когда мы увидели релизную версию в appStore с реальным пользователем iTunes, возникла огромная проблема. Пользователь просто нажимает кнопку, чтобы купить покупку в приложении, после того, как он напишет пароль своей учетной записи и согласится купить эту новую информацию. К сожалению, приложение вылетает каждый раз после этого действия. И нет никаких действий после этого.
В основном, для покупок в приложении я использую MKStoreKit. Итак, я хотел бы представить код следующего действия:
- (IBAction)buyNewRequest:(id)sender
{
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"uiAction"
action:@"Обработчик нажатия кнопки"
label:@"Кнопка - отправить запрос. Экран - запроса кредитной истории бки"
value:[NSNumber numberWithInt:100]] build]];
if ([self checkValidaionTextFields])
{
[DejalBezelActivityView activityViewForView:self.view withLabel:@"Подождите..."].showNetworkActivityIndicator = YES;
self.sendButton.enabled = NO;
[[MKStoreManager sharedManager] buyFeature:@"ru.financemart.nbki"
onComplete:^(NSString* purchasedFeature,
NSData* purchasedReceipt,
NSArray* availableDownloads)
{
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"uiAction"
action:@"Уведомление подтверждения покупки БКИ"
label:@"Уведомление - покупка бки. Экран - отправки запроса кредитной истории БКИ"
value:[NSNumber numberWithInt:100]] build]];
NSString *stringReceipt = [NSString stringWithFormat:@"%@", purchasedReceipt];
stringReceipt = [stringReceipt stringByReplacingOccurrencesOfString:@" " withString:@""];
stringReceipt = [stringReceipt stringByReplacingOccurrencesOfString:@"<" withString:@""];
stringReceipt = [stringReceipt stringByReplacingOccurrencesOfString:@">" withString:@""];
NSString *base64Receipt = [self base64forData:purchasedReceipt];
NSString *hashDevelopKey = @"i5FnXIZ2aKjdn1Ru2VfLarbdCwbiJvfsnh9QTm9MB0I";
NSString *hashMD5 = @"";
hashMD5 = [hashMD5 stringByAppendingString:hashDevelopKey];
NSString *familyText = self.familyTextField.text;
NSString *nameText = self.nameTextField.text;
NSString *patronimicText = self.patronimicTextField.text;
NSString *passportID = self.passportID.text;
NSString *email = self.emailTextField.text;
NSString *dateOfBirth = dateOfBirthFormat;
NSString *passportDate = datePassportFormat;
NSString *regionForRequest = @"";
if ([[UnicomAPIConfigResponse lastResponse] cityByID:@(self.unicomProposalsModel.cityID).stringValue].ru_RU != nil) {
regionForRequest = [[UnicomAPIConfigResponse lastResponse] cityByID:@(self.unicomProposalsModel.cityID).stringValue].ru_RU;
}
hashMD5 = [hashMD5 stringByAppendingString:dateOfBirth];
hashMD5 = [hashMD5 stringByAppendingString:email];
hashMD5 = [hashMD5 stringByAppendingString:nameText];
hashMD5 = [hashMD5 stringByAppendingString:patronimicText];
hashMD5 = [hashMD5 stringByAppendingString:passportID];
hashMD5 = [hashMD5 stringByAppendingString:passportDate];
hashMD5 = [hashMD5 stringByAppendingString:base64Receipt];
hashMD5 = [hashMD5 stringByAppendingString:regionForRequest];
hashMD5 = [hashMD5 stringByAppendingString:familyText];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *stringToken = [[[[defaults valueForKey:@"deviceToken"] description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" "
withString:@""];
hashMD5 = [hashMD5 stringByAppendingString:stringToken];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd.MM.yyyy"];
NSString *stringFromDate = [formatter stringFromDate:[NSDate date]];
hashMD5 = [hashMD5 stringByAppendingString:stringFromDate];
[DejalBezelActivityView activityViewForView:self.view withLabel:@"Отправляем..."].showNetworkActivityIndicator = YES;
[self.unicomService postNBKIRequestWithName:nameText WithFamily:familyText andPatronimic:patronimicText andDOB:dateOfBirth andPassport:passportID andPassportDate:passportDate andPartnerName:@"1" andEmail:email andToken:stringToken andReceipt:base64Receipt andHashKey:[self md5:hashMD5] andRegion:regionForRequest success:^(UnicomAPIRequestsNBKIResponse *response)
{
self.sendButton.enabled = YES;
} error:^(NSError *error) {
self.sendButton.enabled = YES;
[self performSelector:@selector(showError) withObject:nil afterDelay:2.0];
}]->addObserver( ^( TLSignal<NSDictionary *> *sender, NSDictionary *response )
{
[self performSelector:@selector(showSuccessPostRequest) withObject:nil afterDelay:0.0];
userModel = [CreditUserModel tlSharedInstance];
NSDictionary *dicta = [userModel.serverResponse valueForKey:@"result"];
NSString *dictb = [dicta valueForKey:@"id"];
NSMutableDictionary *paramNBKI = [[NSMutableDictionary alloc] init];
[paramNBKI setObject:dictb forKey:@"requestID"];
[paramNBKI setObject:self.familyTextField.text forKey:@"familyName"];
[paramNBKI setObject:self.nameTextField.text forKey:@"name"];
[paramNBKI setObject:self.patronimicTextField.text forKey:@"patronimic"];
[paramNBKI setObject:passportID forKey:@"passportID"];
[paramNBKI setObject:dateOfBirth forKey:@"dateOfBirth"];
[paramNBKI setObject:passportDate forKey:@"passportDate"];
[paramNBKI setObject:base64Receipt forKey:@"baseReceipt"];
[paramNBKI setObject:[self convertDate:[NSDate date]] forKey:@"requestDate"];
NSUserDefaults *defaults= [NSUserDefaults standardUserDefaults];
if([[[defaults dictionaryRepresentation] allKeys] containsObject:@"nbkiHistory"])
{
NSMutableArray *nbkiHistory = [[NSMutableArray alloc] init];
nbkiHistory = [NSMutableArray arrayWithArray:[defaults valueForKey:@"nbkiHistory"]];
[nbkiHistory addObject:paramNBKI];
[defaults setObject:nbkiHistory forKey:@"nbkiHistory"];
NSLog(@"mykey found");
} else {
NSMutableArray *nbkiHistory = [[NSMutableArray alloc] init];
[nbkiHistory addObject:paramNBKI];
[defaults setObject:nbkiHistory forKey:@"nbkiHistory"];
}
self.sendButton.enabled = YES;
} );
}
onCancelled:^
{
self.sendButton.enabled = YES;
[DejalBezelActivityView removeViewAnimated:YES];
}];
}
}
Итак, после того, как пользователь принял покупку в приложении, вы можете увидеть POST-запрос к нашему серверу ([self.unicomService postNBKIRequestWithName:), но в журнале базы данных нашего сервера нет запросов, поэтому приложение аварийно завершает работу перед этим кодом. But, there are no code strings where are it is able to crash.