Aktualizuję moją aplikację na iOS8 do pracy z iOS8, ale mam problemy z pobieraniem tokena urządzenia dla zdalnych powiadomień.MonoTouch Pobierz DeviceToken w iOS8
I zostały zaktualizowane moje AppDelegate zadzwonić RegisterUserNotificationSettings
zarejestrować przy użyciu systemów iOS 8, pozostawiając poprzednie wersje zadzwonić 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);
}
Mam także następujące metody w mojej klasie 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);
}
i
public override void DidRegisterUserNotificationSettings(UIApplication application, UIUserNotificationSettings notificationSettings)
{
// Get Device Token
}
Jednak ja nie wiem, jak zdobyć token urządzenia w DidRegisterUserNotificationSettings
Przeczytałem, że w cel-c jest: didRegisterForRemoteNotificationsWithDeviceToken
, ale to nie wydaje się być dostępne w Xamarin (lub przynajmniej nie wiem jak to nazwać) .
Wygląda na to, że ludzie z Objective-C wolą wywoływać 'RegisterForRemotNotifications' wewnątrz' DidRegisterUserNotificationSettings' (patrz http://stackoverflow.com/a/24488651/1644813). Nie jestem pewien, jaki model wątku jest używany za kulisami, ale w przypadku, gdy 'RegisterForRemotNotifications' nie zakończy synchronicznie przy użyciu' DidRegisterUserNotificationSettings' będzie bezpieczniejszym wyborem. –