Ios 如果卸载/重新安装同一设备的应用程序,设备令牌是否会更改
我收到同一应用程序的多个通知 如果它改变了如何从我们的服务器中删除旧的 以下是我在iOS9设备上的观察结果 1.DB APPId和Device token中有两个字段,如果我取消安装应用程序并将其重新安装在同一设备中,则设备令牌会发生变化 2.我在同一台设备上测试了另一个应用程序。即使在同一台设备上,设备令牌也不同Ios 如果卸载/重新安装同一设备的应用程序,设备令牌是否会更改,ios,apple-push-notifications,devicetoken,Ios,Apple Push Notifications,Devicetoken,我收到同一应用程序的多个通知 如果它改变了如何从我们的服务器中删除旧的 以下是我在iOS9设备上的观察结果 1.DB APPId和Device token中有两个字段,如果我取消安装应用程序并将其重新安装在同一设备中,则设备令牌会发生变化 2.我在同一台设备上测试了另一个应用程序。即使在同一台设备上,设备令牌也不同 即使我从数据库中删除了第一个设备令牌,我也会收到3个相同设备的通知…。我还不明白为什么会有多个通知 可能的原因是什么?为注销会话创建新的web服务,并在您注销时调用此服务,此服务告诉
即使我从数据库中删除了第一个设备令牌,我也会收到3个相同设备的通知…。我还不明白为什么会有多个通知
可能的原因是什么?为注销会话创建新的web服务,并在您注销时调用此服务,此服务告诉您的后端开发人员从数据库中删除您的设备令牌。@Krishna:device token与您第一次安装应用程序时保持一致,并卸载后再次安装此应用程序在同一台设备上 如果您再次使用新设备,则设备令牌将不同 注意:只需通知后端开发人员执行以下操作:
其工作正常。,每次重新安装应用程序时,设备令牌可能会更改。因此,最好的方法是在每次启动时存储(更新或插入数据库)设备令牌。设备令牌在以下条件下发生更改
- 如果用户将备份数据恢复到新设备李>
- 重新安装应用程序
didRegisterForRemoteNotificationsWithDeviceToken
中启动时,您必须调用api,如果发生更改,该api将更新设备令牌
在数据库中再创建两个字段,分别为设备令牌
和APPId
,因此,请更新设备令牌
,以了解APPId
从设备密钥链获取APPId
或唯一的设备id,并使用device token
将其发送到您的服务器,因此,在服务器更新device token
时,有关APPId
钥匙链
值在上述以下情况下永远不会更改
要获得钥匙链价值,请遵循
//标记:-推送通知委托方法。
func应用程序(application:UIApplication,DidRegisterForRemotionTificationswithDeviceToken deviceToken:Data){
//将此设备令牌发送到服务器
让令牌=字符串(数据:deviceToken.base64EncodedData(),编码:.utf8)?.trimmingCharacters(在:CharacterSet.whitespaces中)。trimmingCharacters(在:CharacterSet(charactersIn:))
//将设备保存为用户默认值
让defaults=UserDefaults.standard
默认设置(令牌,forKey:“DeviceToken”)
defaults.synchronize()
打印(“令牌是--\(令牌)”)
打印(“AppId---\(getUniqueDeviceIdentifierAsString)”)
//将令牌值和AppId发送到服务器
}
var getUniqueDeviceIdentifierAsString:字符串{
让appname=Bundle.main.infoDictionary![kCFBundleNameKey作为字符串]作为!字符串
var StrapApplicationUUID:String?=KeychainWrapper.standard.String(forKey:appname)
如果StrapApplicationUUID==nil{
StrapApplicationUUID=UIDevice.current.identifierForVendor?.UUIString
_=KeychainWrapper.standard.set(StrapApplicationUUID!,forKey:appname)
}
返回应用程序UUID!
}
我们可以关闭应用程序内部的推送功能,而不是从服务器上删除设备令牌(在注销时)。@Akshay Patel登录/注销时一切正常。如果再次卸载并重新安装应用程序,我需要?当用户安装应用程序并在安装后登录时,用户在卸载应用程序后再次转到安装应用程序。在这种情况下,设备令牌保持不变或更改。@Krishna你能简单地告诉我你的问题信息吗?因此,我为您提供了确切的解决方案。@PavanGandhi,让我们说,第一次安装了应用程序(设备令牌插入到我们的数据库中)。如果用户卸载了应用程序,并再次安装。。设备令牌是否已更改?如果它改变了如何从我的数据库中删除旧的帐户?如果遇到任何问题,请遵循我提供的解决方案,然后通知meAre您从同一设备登录多个帐户?@technerd否,我询问有关卸载/重新安装的问题。首先,您需要检查用户设备的设备令牌是否存在。如果不存在,则添加该用户的设备令牌。如果存在,则获取详细信息并更新其设备令牌。我们不使用UserId进行检查(即使用户未登录,我们也需要该设备的devicetoken)。我刚刚在我的数据库中被检查,如果我取消了应用程序,DB APPId和Device token中有两个字段,如果我再次在同一设备中安装,则设备标记将更改..即使我从我的数据库中删除了第一个设备标记,我也会收到同一设备的3个通知…。我还不明白为什么会有多个通知。。
// MARK: - Push Notification Delegate Methods.
func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//send this device token to server
let token = String(data: deviceToken.base64EncodedData(), encoding: .utf8)?.trimmingCharacters(in: CharacterSet.whitespaces).trimmingCharacters(in: CharacterSet(charactersIn: "<>"))
//Save device to UserDefaults
let defaults = UserDefaults.standard
defaults.set(token, forKey: "DeviceToken")
defaults.synchronize()
print("token is ---\(token)")
print("AppId ----\(getUniqueDeviceIdentifierAsString)")
//Send token value and AppId to server
}
var getUniqueDeviceIdentifierAsString : String {
let appname = Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String
var strApplicationUUID: String? = KeychainWrapper.standard.string(forKey: appname)
if strApplicationUUID == nil {
strApplicationUUID = UIDevice.current.identifierForVendor?.uuidString
_ = KeychainWrapper.standard.set(strApplicationUUID!, forKey: appname)
}
return strApplicationUUID!
}