Sto aggiornando la mia applicazione iOS per funzionare con iOS8 ma riscontro problemi nel ricevere il token del dispositivo per le notifiche remote.MonoTouch Ottieni DeviceToken in iOS8
Ho aggiornato il mio AppDelegate chiamare RegisterUserNotificationSettings
per registrare quando si utilizzano iOS 8, lasciando le versioni precedenti di chiamare RegisterForRemoteNotificationTypes
:
var version8 = new Version (8,0);
if (new Version(UIDevice.CurrentDevice.SystemVersion) < version8)
{
var notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
else
{
var settings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet());
UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
}
Ho anche i seguenti metodi della mia classe AppDelegate:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
NSString str = (NSString)Runtime.GetNSObject(Messaging.intptr_objc_msgSend(deviceToken.Handle, new Selector("description").Handle));
_deviceTokenString = str.ToString().Replace("<", "").Replace(">", "").Replace(" ", "");
Trace.trace("Device Token: " + _deviceTokenString);
}
e
public override void DidRegisterUserNotificationSettings(UIApplication application, UIUserNotificationSettings notificationSettings)
{
// Get Device Token
}
Tuttavia io non so come ottenere il token del dispositivo in DidRegisterUserNotificationSettings
Ho letto che in ogg-c c'è: didRegisterForRemoteNotificationsWithDeviceToken
ma questo non sembra essere disponibile in Xamarin (o almeno non so come chiamarlo) .
Sembrerebbe che gli utenti Objective-C preferiscano chiamare "RegisterForRemotNotifications" all'interno di "DidRegisterUserNotificationSettings" (vedere http://stackoverflow.com/a/24488651/1644813). Non sono sicuro di quale modello di threading venga utilizzato dietro le quinte, ma nel caso che 'RegisterForRemotNotifications' non si completi in modo sincrono usando' DidRegisterUserNotificationSettings' sarebbe una scommessa più sicura. –