StoreKit returns invalid product identifiers - only in the real App Store, only on iOS7

We have an application that requests StoreKit for product details, such as regular (you can ignore the fact that this is a Xamarin application, it should not matter if there is no error in Xamarin):

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

What's happening:

  • In the Sandbox / Test environment, we can simply request product identifiers and get the correct answers on iOS 7 and iOS8 devices.
  • The application has been reviewed, we are already successfully selling products, so it works for some users.
  • , , , In App Store. , iOS 7. - , App Store , " " , SKProductRequest. .

, iOS 7, AppStore. , iOS 7 iTunes - . , Sandbox . iTunes . .

Apple Developer iTunes, / . , , , - . 24 " ", , .

-, , , App Purchases , live App Store iOS7?


. 72 , , , :


2 AppStore, . 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. .

+4
1

- Apple , . , Xamarin.iOS iTunesMetadata.plist ( IPAs xcode-).

iOS:

, , iTunesConnect, " iTunesMetadata.plist", , iOS 6/7. , , , . , , StoreKit, . , iTunesMetaData.plist , URL- fetchSoftwareAddOns, SKProductsRequest.

, msbuild "_CompileITunesMetadata", 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, , , .

+2

All Articles