Я пытаюсь интегрировать свои нативные приложения Android и iOS в Notification Hub. Например, на iOS, как только я получаю deviceToken
и, если мой пользователь уже аутентифицирован, я регистрируюсь напрямую в NotificationHub:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
log.debug("Received device token \(deviceToken.hexEncodedString()). Saving device token to user defaults.", "AppDelegate.didRegisterForRemoteNotificationsWithDeviceToken")
let defaults = UserDefaults.standard
defaults.set(deviceToken, forKey: UserNotificationDeviceTokenKey)
defaults.synchronize()
if let authenticatedUser = Session.shared.authenticatedUser {
log.debug("Trying to register device token \(deviceToken.hexEncodedString()) to user \(authenticatedUser.id) on notification hub with hub name \(String(describing: hubName)) and connection string \(String(describing: connectionString)). Notification hub null? \(notificationHub == nil)")
self.notificationHub?.registerNative(withDeviceToken: deviceToken, tags: Set<String>([authenticatedUser.id]), completion: { error in
if (error != nil) {
log.error("Error registering for notifications: \(error.debugDescription)", "AppDelegate.didRegisterForRemoteNotificationsWithDeviceToken");
} else {
log.debug("Successfully registered device token \(deviceToken.hexEncodedString()) for user with ID \(authenticatedUser.id) and email \(authenticatedUser.emailAddress)", "AppDelegate.didRegisterForRemoteNotificationsWithDeviceToken")
}
})
}
}
И что бы ни случилось, я начинаю с сохранения устройства токен для пользователя по умолчанию, так что когда пользователь входит в систему, он может извлечь deviceToken
из значений пользователя по умолчанию и вызвать тот же метод registerNative
, чтобы создать регистрацию, связывающую этот deviceToken
с тегом, который является идентификатором пользователя:
func userDidSignIn(user: User) {
if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
let deviceToken = UserDefaults.standard.data(forKey: UserNotificationDeviceTokenKey){
log.debug("Trying to register device token \(deviceToken.hexEncodedString()) to user \(user.id) on notification hub with hub name \(String(describing: appDelegate.hubName)) and connection string \(String(describing: appDelegate.connectionString)). Notification hub null? \(appDelegate.notificationHub == nil)")
appDelegate.notificationHub?.registerNative(withDeviceToken: deviceToken, tags: Set<String>([user.id]), completion: { error in
if (error != nil) {
log.error("Error registering for notifications: \(error.debugDescription)");
} else {
log.debug("Successfully registered device token \(deviceToken.hexEncodedString()) for user with ID \(user.id) (\(user.emailAddress)) who just logged in", context: "HTRootViewController.userDidSignIn")
}
})
} else {
log.warning("No device token found in settings.", "HTRootViewController.userDidSignIn")
}
}
Все мои журналы удаленно отправляются в Bugfender, что позволяет мне проверять журналы для всех устройств, использующих это приложение, установленное в TestFlight, поэтому я вижу, что все registerNative успешны:
Попытка зарегистрировать маркер устройства 0fea9a4d99ec37dc4f3ac252c35fa4e1617004fd14740973d80a7dfdaeacc857 для пользователя 77bfb1c6-b05a-440b-a7a0-71ae5a91bubub hub мое имя (опция h h) [уведомление о подключении через hub (опция h h) имя уведомления (мое имя hub) «h h» [мое сообщение hub hub) Строка подключения] "). Центр уведомлений null? false
Успешно зарегистрированный токен устройства 0fea9a4d99ec37dc4f3ac252c35fa4e1617004fd14740973d80a7dfdaeacc857 для пользователя с ID 77bfb1c6-b05a-440b-a7a0-71ae5a91 101 * * * * * * * * * * * * * * * * загрузите список всех регистраций, используя это. NET C# код:
public async Task<List<RegistrationDescription>> GetRegistrations()
{
var hub = NotificationHubClient.CreateClientFromConnectionString([my notification hub connection string], [my notification hub name]);
var result = await hub.GetAllRegistrationsAsync(1000);
return result.ToList();
}
Я вижу, что некоторые регистрации есть, но других нигде нет, даже если они преуспели согласно мои мобильные журналы.
Кто-нибудь знает, что еще может происходить? Что еще я могу проверить? Почему еще нельзя сохранить регистрацию, даже если вызов на registerNative
кажется успешным?
РЕДАКТИРОВАТЬ: На самом деле, и после более точной проверки того, что происходит, регистрация сначала появляется в списке регистрации возвращаются Notification Hub, но как только мы пытаемся отправить уведомление, создается впечатление, что Notification Hub не может связаться с соответствующим токеном устройства и вообще удаляет регистрацию. Есть ли способ просмотреть журналы Notification Hub, чтобы увидеть, что происходит и почему он решает удалить эту регистрацию?