Bestimmen, ob die app kommuniziert mit den APNS sandbox oder Produktion
Habe ich die push-Benachrichtigungen einrichten, die in meiner app. Ich bin versucht zu bestimmen, ob die device-token, die ich erhalten habe von APNS in der application:didRegisterForRemoteNotificationsWithDeviceToken:
Methode kam aus dem sandbox-oder Entwicklungsumgebung. Wenn ich unterscheiden kann, in welcher Umgebung der Initialisierung der token, ich werde in der Lage sein zu sagen, mein server, um die Umgebung zu senden die push-Benachrichtigung.
Ich habe versucht, mit der DEBUG
makro, um dies zu bestimmen, aber ich habe ein seltsames Verhalten mit diesem und Vertrauen ihm nicht zu 100% korrekt.
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Idealerweise würde ich in der Lage zu prüfen, die aps-environment
Anspruch (Wert Entwicklung oder Produktion) im code, aber ich bin mir nicht sicher, ob dies überhaupt möglich ist.
Was ist der richtige Weg, um zu bestimmen, ob Ihre app ist die Kommunikation mit dem APNS-sandbox-oder Produktions-Umgebungen? Ich gehe davon aus, dass der server wissen muss, um es in den ersten Platz. Bitte korrigieren Sie mich, wenn diese Annahme falsch ist.
Bearbeitet: die Dokumentation von Apple auf Provider-Kommunikation mit dem APNS details den Unterschied zwischen der Kommunikation mit der sandbox und Produktion. Jedoch ist die Dokumentation nicht geben Informationen, um die Konsistenz mit der Registrierung der token (aus der iOS client-app) und die Kommunikation mit dem server.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Lesen und überprüfen Sie die embedded-provisioning-Profil.
https://github.com/tcurdt/TCMobileProvision
Dies ist, was ich Tue:
aps-environment
(ersetzen"get-task-allow"
mit"aps-environment"
im @tcurdt 's Beispiel, und vergleichen Sie nicht es als bool)Bundle.main.appStoreReceiptURL
zu wissen, ob die app ist in der Produktion oder nicht.Dies ist ein hack, aber seine Arbeit auf
XCode 8
mitSwift 3
Wir sind im Grunde das öffnen der
embedded.mobileprovision
Datei, deren Konvertierung in einen string, dann die überprüfung für eine Zeichenfolge, die darauf hinweisen, dass das app ist mit der Entwicklung der aps-Umgebung.Den APNS Umwelt bestimmt sich nach den code signieren Ansprüche passenden Code sign identity (guter Beitrag hier) - während die Identifizierung Ihrer build-Konfiguration kann funktionieren, es kann auch falsch sein, wenn Sie haben abgestimmt, dass die build-Konfiguration mit einem mis-matched Anspruch.
Halten, dass im Auge, die Verwendung von debugging-als ein Mittel, um zu bestimmen, Ihre Ansprüche sollte funktionieren (wenn Sie finden DEBUGGEN zu schwierig sein, können Sie eine eigene linker-flag unter "Apple LLVM..." -> "Other C Flags" -> "Debug")
zum Beispiel, add-DDEBUGGING und dann verwenden:
#ifdef DEBUGGING
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Wie bereits erwähnt in @tcurdt Antwort, der einzige sichere Weg, um festzustellen, ob die Verwendung der sandbox oder nicht, ist zu überprüfen, welche provisioning-Datei. Hier ist der Swift-code, mit TCMobileProvision:
Installieren TCMobileProvision, fügen Sie diese zu Ihrem Podfile:
sandbox
,production
undunspecified
. Fühlen Sie sich frei zu Bearbeiten, den code entsprechend.