Информация содержится в документации , но не в очевидной форме для разработчика на C #.
В Objective-C deviceToken
предоставляется приложением iOS, как упоминалось @LucasZ, после того, как оно было зарегистрировано в PNS.
Однако я не могу просто отправить это deviceToken
сразу, так как оно не будет принято классом AppleRegistrationDescription
, используемым в моей Службе.
Мне потребовалось некоторое время, чтобы познакомиться с Objective-C, чтобы выяснить, что этот токен на самом деле был преобразован перед отправкой в Azure:
NSSet* tagsSet = tags?tags:[[NSSet alloc] init];
NSString *deviceTokenString = [[token description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceTokenString = [[deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""] uppercaseString];
Я реализовал нечто подобное в C #:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
string pnsHandle = deviceToken.Description
.Replace("<", string.Empty)
.Replace(">", string.Empty)
.Replace(" ", string.Empty)
.ToUpper();
Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);
Hub.UnregisterAllAsync (pnsHandle, (error) =>
{
if (error != null)
{
System.Diagnostics.Debug.WriteLine("Error calling Unregister: {0}", error.ToString());
return;
}
// In my use case, the tags are assigned by the server based on privileges.
NSSet tags = null;
Hub.RegisterNativeAsync(pnsHandle, tags, (errorCallback) =>
{
if (errorCallback != null)
System.Diagnostics.Debug.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
});
});
}
Чтобы ответить на мой вопрос, да, deviceToken
- это дескриптор PNS, но он должен быть отформатирован.