Я пытаюсь использовать SKStoreProductViewController, чтобы открыть App Store в моем приложении. Я просмотрел множество примеров в Интернете, и есть два способа сделать это.Нечеткое поведение с SKStoreProductViewController
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError *error) {
if (result) {
//show
[self presentViewController:storeController animated:YES completion:nil];
}else {
NSLog(@"ERROR WITH STORE CONTROLLER %@\n", error.description);
//redirect to app store
//[[UIApplication sharedApplication] openURL:[[self class] appStoreURL]];
}
}];
Если я так делаю^^ ничего не происходит. Оператор if (result) или else внутри блока никогда не выполняется.
Я также вижу людей, проходящих в ноль для блока завершения, и представить контроллер представления модально сразу после этого, как показано ниже:
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:nil];
[self presentViewController:storeController animated:YES completion:nil];
Когда я представляю контроллер представления, код внутри блока для loadProductWithParameters Исполняет , Я очень смущен в этом вопросе. Как проверить успех или неудачу, если блок не запускается до тех пор, пока я его не покажу.
Наконец, я прочитал, что вы должны выполнить loadProductWithParameters в фоновом потоке. Я тоже это пробовал. Второй вариант - единственный, который вызвал модальность - с Can not connect to ITunes сообщение от симулятора и устройства. Я попробовал несколько идентификаторов приложений. Что происходит? Как мне это сделать?
Если идентификатор, который вы передаете, неверен или недействителен для хранилища iTunes, на котором вы находитесь, контроллер ничего не сделает. – kamran619
Правильно, в окне завершения будет отображаться ошибка. Попробуйте другой идентификатор, например 495922875, и он работает отлично. – Gerharbo
У меня была проблема, когда он вообще не попадал в блок - если только идентификатор не был прав. Вот почему было так больно устранять неполадки. – kamran619