Frage

Grundsätzlich habe ich versucht, in App -Einkäufen in einer Test -App einzurichten, bevor ich sie in eine ordnungsgemäße App implementiere, an der mein Unternehmen arbeitet. Ich habe das Store Kit PDF und andere Snippets etwa 1000 Mal gelesen, aber die Produkte werden immer noch als leer zurückgegeben. Hier ist genau das, was ich bisher gemacht habe:

Setup -Test -App und in App -Kauf -Testartikeln
Ich habe eine neue App -ID für "Test App One" im Entwicklerportal meines Unternehmens im iPhone Dev Center erstellt. Ich habe dafür gesorgt, dass das Präfix war com.mycompany.testappone Um sicherzustellen, dass bei App -Einkäufen ein Kauf konfiguriert werden kann. Beim Aufenthalt im Abschnitt App -ID -Abschnitt habe ich in App -Käufen konfiguriert, indem ich die Option "Aktivieren im App -Kauf aktivieren" ankreuzt habe.

Ich habe 'Test App One' in iTunes Connect erstellt und die übliche Prozedur abgeschlossen, aber später 'Binary hochladen' und nicht zur Überprüfung eingereicht, da die App nichts tut. Sicher müssen wir die App nicht einreichen, um dies zu überprüfen, damit dies funktioniert?! Ich habe dann in App -Käufen auf die Verwaltung geklickt und eine neue mit Produkt -ID 'Test1' erstellt und es genehmigt, damit sie zum Verkauf gelöscht werden.

Code
Ich habe ein neues Projekt in Xcode genannt eingerichtet TestAppOne Und hier sind die einzigen 2 Klassen, die ich jetzt verwende:

TestapponeAppdelegate.h::

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>  

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
    UIWindow *window;
}

Testapponedelegate.m:

#import "TestAppOneAppDelegate.h"

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1";

@implementation TestAppOneAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 if([SKPaymentQueue canMakePayments]) {
  NSLog(@"IN-APP:can make payments");
 }
 else {
  NSLog(@"IN-APP:can't make payments");
 }

 [self requestProductData];
 [window makeKeyAndVisible]; 
}

- (void)requestProductData {
 NSLog(@"IN-APP:requestProductData");
 SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]];
 request.delegate = self; 
 [request start];
 NSLog(@"IN-APP:requestProductData END");  
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
 NSLog(@"IN-APP:productsRequest");
 NSArray *myProduct = response.products;
 NSLog(@"IN-APP:array count: %i", [myProduct count]);
 [request autorelease];
 NSLog(@"IN-APP:productsRequest END"); 
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

Tests auf dem Gerät
Ich habe ein Sandbox -Testkonto erstellt und mich auf dem iPhone aus meinem iTunes -Konto angemeldet, mich jedoch nicht mit dem Testkonto angemeldet, da die Dokumentation uns nicht tun soll, wenn wir in der Einkaufsphase aufgefordert werden. Ich erstelle dann die App und hier ist das Protokoll, das ich bekomme:

IN-APP:can make payments
IN-APP:requestProductData
IN-APP:requestProductData END
IN-APP:productsRequest
IN-APP:array count: 0
IN-APP:productsRequest END

Kann mir bitte jemand sagen, ob ich Phasen ausgelassen habe oder ob es etwas gibt, das ich falsch mache. Leider scheint es keine Beispiel -Apps von Apple zu geben.

War es hilfreich?

Lösung

Eigentlich denke ich, dass Sie die Binärdehnung einreichen müssen, damit dies funktioniert.

Sie können das Veröffentlichungsdatum auf die ferne Zukunft festlegen.

Andere Tipps

Ein weiterer wichtiger Schritt, der häufig übersehen wird, besteht darin, dass Sie sicherstellen müssen, dass Sie eine iOS -Bewerbungsvertragsanträge haben, die sich im Abschnitt "Verträge, Steuern und Bankgeschäfte" von iTunes Connect befindet. Zuerst müssen Sie auf die Schaltfläche Anfrage klicken, dann müssen Sie auf die 3 Einrichtungsschaltflächen klicken (Kontaktinformationen, Bankinformationen, Steuerinformationen).

Überprüfen Sie, ob es ungültige Produkt -ID gibt.

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Invalid product id: %@" , invalidProductId);
    }
}

Wenn es ungültige Produkt -IDs gibt, besuchen Sie http://troybrant.net/blog/2010/01/invalid-product-ids/

Es ist eine sehr umfassende Checkliste für dieses Problem.

Überprüfen Sie, ob Ihre Bundle -Kennung (z. B. com.company.Appname) in Xcode mit dem in iTunes Connect entspricht.

Sie müssen die Binärdehnung nicht einreichen, damit es funktioniert.

Löschen Sie einfach die Anwendung auf Ihrem Gerät und starten Sie sie erneut von Xcode. Es hat das Problem für mich behoben.

Sie müssen die Binärdatei nicht hochladen oder Stunden nach dem Erstellen des In-App-Kaufs in iTunes Connect warten.

Dank Alperes Antwort habe ich herausgefunden, dass ich die falsche Produkt -ID verwendet habe. Es war nicht wie ich dachte de.company.appname.PROFESSIONAL_LICENSE. Nur benutze PROFESSIONAL_LICENSE in meinem Fall (ohne Leitfaden -ID -Zeug) funktioniert :)

Es ist nicht erforderlich, Binärdateien für Sandbox -Tests von Inapppurchase hochzuladen. Sie müssen nur in iTunesConnect inapppurchase item addieren und es in "Ready to Senden" (Must) nur angeben. Wenn Sie es zur Überprüfung einreichen, wird es immer eine Antwort geben. Produkt leer.

Versuchen Sie, ein kostenloses Abonnementprodukt hinzuzufügen. Wenn es auf der Antwort erscheint, ist in Ihrem Code nichts falsch. Da kostenloses Abonnement der einzige Typ ist, der keine Vereinbarungen, Steuern und Bankgeschäfte erfordert und wenn es erscheint und die anderen Typen nicht sind, ist es ein Problem, das mit Ihrem Vertrag verbunden ist.

In meinem Fall war der Grund, dass das Hosting von Inhalten von Apple versehentlich eingeschaltet wurde. Das Produkt war erst verfügbar, als ich es ausgeschaltet habe

In meinem Fall (macOS) habe ich eine Testanwendung erstellt (mit derselben Bundle -ID der Hauptanwendung). SKFetchRequest hat mit der Rückgabe von Produkt -IDs für die Testanwendung erst nach dem festgelegten Bundle -Namen (Binärname) wie in der ursprünglichen Anwendung zurückgegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top