2015-03-04 4 views
4

У нас есть приложение, которое запрашивает StoreKit для деталей продукта, как обычно (вы можете не обращать внимания на то, что это приложение Xamarin, это не должно иметь значения, если только нет ошибка в Xamarin):StoreKit возвращает недопустимые идентификаторы продуктов - только в реальном App Store, только на iOS7

 var request = new SKProductsRequest(new NSSet(...)); 
     _runningRequests.Add(request); 
     request.ReceivedResponse += HandleReceivedResponse; 
     request.RequestFailed += HandleRequestFailed; 
     request.RequestFinished += HandleRequestFinnished; 
     request.Start(); 

    // .... 

    void HandleReceivedResponse(object sender, SKProductsRequestResponseEventArgs e) 
    { 
     ViewModel.IsProcessing = false; 

     foreach (var item in e.Response.InvalidProducts) 
      Console.WriteLine("Invalid product: " + item); 

     var products = e.Response.Products.Select(x => new InAppProductViewModel(x.LocalizedTitle, x.ProductIdentifier, x.LocalizedDescription, LocalizedPrice(x), IsPurchased(x),() => Purchase(x))); 
     var vms = products.ToList(); 

     ViewModel.UpdateProducts(vms); 
    } 

Что происходит:

  • в песочнице/тестовой среде, мы можем запросить идентификаторы продукта просто отлично и получить правильные ответы, на прошивке 7 и устройство iOS8
  • Приложение прошло обзор, мы уже успешно продаем товары, поэтому он работает для некоторых пользователей.
  • Тем не менее, у нас есть клиенты, которые сообщают, что они не могут ничего увидеть в нашем магазине приложений. У всех есть общее, что они работают на устройствах iOS 7. Мы можем воспроизвести проблему - с версией, выпущенной в App Store на консоли, мы видим вывод «Недопустимый идентификатор продукта» для каждого идентификатора, который мы передаем в SKProductRequest. Идентификаторы соответствуют точно указанным в коде.

Похоже, это происходит только на устройствах iOS 7, в живой среде AppStore. Я предполагаю, что они нарушили покупки приложений на iOS 7 с обновлением iTunes или что-то еще. Странно, что среда Sandbox не показывает проблему. Мы протестировали несколько устройств и несколько учетных записей iTunes с чистой установкой приложения. У клиентов тоже есть эти проблемы.

Я уже работал с технической поддержкой Apple Developer и поддержкой провайдера iTunes, и они не могли/не желали диагностировать проблему на своем конце командой инженеров. Таким образом, задавая этот вопрос здесь, чтобы узнать, испытывает ли кто-либо еще те же проблемы или сможет проверить их приложение. Мы уже ждали более 24 часов для «обновления продукта», который должен был исправить проблему, но этого не произошло.

Может ли кто-нибудь, у кого есть приложение, показывающее, что приложение App Purchase проверяет, работает ли версия App Store в реальном времени на iOS7?


Примечания: Это было так в течение более чем 72 часов, предполагая, что это не временная случайность, как в:


У нас есть так как выпустил 2 обновления приложения в AppStore, но ни один из них не разрешил p РОБЛЕМА. Отлично работает на iOS8, invalidProductIdentifiers на iOS7.

Это консольный вывод, который мы получаем из нашего приложения (слегка измененный журнал). Что может быть намеком на что-то не так, это ошибка TASK-ASSERT, но я не смог найти информацию об этом.

Mar 10 08:08:28 iDevPad01 itunesstored[832] <Error>: TASK-ASSERT: cfurlcache - ProcessCacheTask - FAILED to get task-assertion, going commando with 1 items to process. 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Received SKProductResponse, debugdescription: <SKProductsResponse: 0x1776d950> 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Received SKProductResponse, description: <SKProductsResponse: 0x1776d950> 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Received SKProductResponse, products: 0 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Invalid product: coach 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Invalid product: boat 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Invalid product: com.rowinginmotion.mobile.boatapp.ios.solo.boat 
Mar 10 08:08:28 iDevPad01 RowingInMotionMobileBoatAppiOSSolo[855] <Warning>: Invalid product: com.rowinginmotion.mobile.boatapp.ios.solo.coach 

Мы подали заявку на поддержку DTS три дня назад и, наконец, услышали ее обратно. Они согласны с нами, что это внутренняя проблема в веб-службе iTC, которая обрабатывает покупки InApp. Я буду поддерживать эту тему в актуальном состоянии.

+0

Между выпуском обновления всегда есть несколько часов, а его IAP - в производственный магазин приложений. Но обычно это будет час или два. Не могли бы вы вытолкнуть обновление (даже если его идентичный код), может быть, это вызовет достаточный сервер Apple, чтобы его исправить? Я знаю, что вы будете ждать неделю, но если у вас нет другого дела, чтобы попробовать? –

+0

@MarkJohnson: приложение работает в App Store уже более недели, и оно работает на устройствах iOS8. У нас есть обновление в очереди - время ожидания - это PITA, но да, это то, что мы пытаемся сделать. –

ответ

2

Хорошие новости - Apple наконец-то выяснила, в чем причина проблемы.Похоже, что Xamarin.iOS начал добавлять файл iTunesMetadata.plist в пакет приложений во время процесса сборки (хотя мы не создаем IPAs и не развертываем через xcode-архивы).

Цитирование наш IOS инженер поддержки:

Проблема, кажется, что в доставке актива, который вы загрузили на iTunesConnect, есть «изгой iTunesMetadata.plist», который не присутствует в других в покупке приложения приложения, которые работают под управлением iOS 6/7. Проблема здесь в том, что есть тот же файл, который встроен в приложение, когда приложение будет установлено из Хранилища на устройство. Поскольку этот файл уже присутствует в комплекте приложений, тот, который устанавливает StoreKit, не используется. Причина этого в том, что iTunesMetaData.plist не имеет двух значений полей, которые обычно включаются в запрос URL-адреса fetchSoftwareAddOns, который генерируется при вызове SKProductsRequest.

В качестве временного решения, я пропатчен вне «_CompileITunesMetadata» MSBuild задачу предотвращения генерации iTunesMetadata.plist

<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> 
    <!-- NOP out CompileITunesMetadata task, which creates a rogue metadata plist file that can break In App Purchases on iOS7 --> 
    <Target Name="_CompileITunesMetadata" DependsOnTargets="_DetectSdkLocations;_DetectAppManifest;_GenerateBundleName;_CompileAppManifest"> 
    <Message Text="Skipping CompileITunesMetadata task, which creates a rogue metadata plist file that can break In App Purchases on iOS7" /> 
    </Target> 

Наши IOS Инженер сообщил мне, что iTunesConnect может построить в проверке подпрограмм, чтобы предотвратить/отклонить заявки на участие в программе, которые содержат разбойник iTunesMetadata.plist, так что, надеюсь, другие не пострадают от этого странного поведения.

+0

Ошибка: https://bugzilla.xamarin.com/show_bug.cgi?id=29180 –

Смежные вопросы