Ich habe 2 Beispiel (Einzelansicht) Projekte zum Testen von Push-Benachrichtigungen erstellt, habe ich keinen Code mit Ausnahme der Benachrichtigungen Setup-Code wie folgt:Swift 2: keine Delegierten Callbacks für Push-Benachrichtigungen im Gegensatz zu objective-c
Project1 (Swift 2):
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.sharedApplication().registerForRemoteNotifications()
return true
}
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
print("didRegisterUserNotificationSettings got called")
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let trimmedDeviceToken = deviceToken.description .stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
.stringByReplacingOccurrencesOfString(" ", withString: "")
print("Device Token \(trimmedDeviceToken)")
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Failed to get token, error: \(error)")
}
Projekt2 (Objective-C):
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIUserNotificationSettings* notificationSettings =
[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert|UIUserNotificationTypeBadge) categories:nil];
[application registerUserNotificationSettings:notificationSettings];
[application registerForRemoteNotifications];
return YES;
}
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
NSLog(@"didRegisterUserNotificationSettings got called");
}
-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSString* newToken = [deviceToken description];
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"Device Token %@", newToken);
}
-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
Das objective-c-Projekt funktioniert auf allen getesteten Geräten einwandfrei: registriert sich selbst für Remote-Benachrichtigungen und empfängt ein Geräte-Token in der Delegaten-Callback-Methode , aber das Swift-Projekt konnte keine Delegierten-Callbacks abrufen s.
zu lesen, was ich vor Markierung diese Frage als Duplikat versucht habe:
1) AppID ist Push-Benachrichtigung aktiviert
2) Push-Zertifikattyp wird Produktion und Provisioning-Profil ist AdHoc Produktion
3) beiden Projekte verwenden die gleiche AppID, Push-Zertifikat und Provisioning-Profil
4) beide Projekte wurden auf 3 verschiedenen iPhones getestet (5, 6 & 6Plus) alle laufenden iOS 9.2, löschte die App mit jeder Installation und startete sie alle viele Male
5) baute beide Projekte mit Xcode 7.2 auf 2 verschiedenen Ent MAC Pro Maschinen
6) alle 3 iPhones Internet-Verbindung ohne eine Firewall verwenden und alle Ports offen sind (wie in this technical note angegeben), auch die Internetverbindung auf den 3 Geräten geändert, um eine 3G-Verbindung anstelle eines WIFI zu sein.
7) checked/unchecked Push Notifications in Projekteinstellungen -> Fähigkeiten für beide Projekte (übrigens hat dieser Punkt keine Wirkung, wie ich es getestet habe)
8) versuchte Xcode Run (die oberste Taste) und Export ipa Paket für die beiden Projekte
9) versucht sowohl (Anwendung) & ([UIApplication shared] für die Objective-C und UIApplication.sharedApplication()) für SWIFT mit den Verfahrens registerForRemoteNotifications
10) versucht, einen anderen brandneuen AppID, Push-Zertifikat und Bereitstellungsprofil für beide Projekte.
11) gelöscht beide Projekte und schuf weitere 2 neue Projekte mit dem gleichen Code wie oben
die Objective-C-Projekt nach all diesen Versuchen funktioniert gut und erhält durch didRegisterForRemoteNotificationsWithDeviceToken Verfahren eine Vorrichtung Token aber die schnelle ein nicht funktioniert .
Ich habe 3 APN generierten Dateien vom iPhone 6Plus Gerät anmelden mit PersistentConnectionLogging.mobileconfig
Profil von Apple und uploaded them here, (innen apsd_2016_02_24_11_36_29+0300.log
Datei des Objective-C-Projekt bund ist XXXXX.push.notification
und der schnelle Projekt bund ist XXXXX.apnsswift
)