我正在使用推送通知功能的iOS应用程序我需要将iOS设备的唯一设备ID发送到服务器,在android安全和每个设备的ID中获取,有没有办法获得iOS的唯一设备ID。 我找到了一些答案供应商ID和广告ID是唯一的
code:
Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);
答案 0 :(得分:4)
要获取 UUID ,您可以使用此代码
UIDevice *currentDevice = [UIDevice currentDevice];
NSString *deviceId = [[currentDevice identifierForVendor] UUIDString];
但是对于推送通知,您需要设备令牌,它将在用户接受权限后创建,UIApplication
委托方法将调用
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
答案 1 :(得分:2)
在您的应用中逐步整合 APNS ,您可以获得here
中的步骤iOS9 Apple表示,每次安装应用程序时,设备令牌都可能会更改。因此,最好的方法是在每次启动上重新注册设备令牌。
<强>步骤1 强>
注册推送通知有两个步骤。首先,您必须获得用户的许可才能显示任何类型的通知,之后您可以注册远程通知。如果一切顺利,系统将为您提供设备令牌,您可以将其视为此设备的“地址”。
此方法创建UIUserNotificationSettings的实例,并将其传递给registerUserNotificationSettings(_ :)。 UIUserNotificationSettings存储应用将使用的通知类型的设置。对于UIUserNotificationTypes,您可以使用以下任意组合:
.Badge允许该应用在应用图标的角落显示一个数字。
.Sound允许应用播放声音。
.Alert允许该应用显示文字。
您当前传递的UIUserNotificationCategor的集合为nil,允许您指定应用可以处理的不同类别的通知。当您想要实现可操作的通知时,这将是必要的,稍后将使用
- (void)applicationDidFinishLaunching:(UIApplication *)app {
// other setup tasks here....
// Register the supported interaction types.
UIUserNotificationType types = UIUserNotificationTypeBadge |
UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings =
[UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
// Register for remote notifications.
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
构建并运行。当应用程序启动时,您应该收到一个提示,要求获得向您发送通知的权限:
点击确定并噗!该应用现在可以显示通知。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
if (notificationSettings.types != UIUserNotificationTypeNone) {
//register to receive notifications
[application registerForRemoteNotifications];
}
}
在这里,您首先要检查用户是否已授予您任何通知权限;如果有,则直接调用registerForRemoteNotifications()。 同样,调用UIApplicationDelegate中的方法来通知registerForRemoteNotifications()的状态。
// Handle remote notification registration.
- (void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const void *devTokenBytes = [devToken bytes];
self.registered = YES;
// send your Device Token to server
}
顾名思义,系统在注册成功时调用application(:didRegisterForRemoteNotificationsWithDeviceToken :),否则调用application(:didFailToRegisterForRemoteNotificationsWithError :)。
- (void)application:(UIApplication *)app
didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSLog(@"Error in registration. Error: %@", err);
}
<强>夫特强>
let defaults = NSUserDefaults.standardUserDefaults()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// PUSH NOTIFICATION
let deviceToken = defaults.objectForKey(UserDefaultsContracts.KEY_DEVICE_TOKEN) as String?
if (deviceToken == nil) {
print("There is no deviceToken saved yet.")
var types: UIUserNotificationType = UIUserNotificationType.Badge |
UIUserNotificationType.Alert |
UIUserNotificationType.Sound
var settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )
application.registerUserNotificationSettings( settings )
application.registerForRemoteNotifications()
}
return true
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) {
print("Got token data! (deviceToken)")
var characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )
var deviceTokenString: String = ( deviceToken.description as NSString )
.stringByTrimmingCharactersInSet( characterSet )
.stringByReplacingOccurrencesOfString( " ", withString: "" ) as String
print( deviceTokenString )
defaults.setObject(deviceTokenString, forKey: UserDefaultsContracts.KEY_DEVICE_TOKEN)
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError!) {
print("Couldn’t register: (error)")
}
}
了解您在Apple Documents
中获得的更多信息答案 2 :(得分:2)
没有合法的方法来唯一标识iOS设备。周期。
您只能获得折衷解决方案:IDFA,供应商ID或APNS设备令牌。 上述每个ID都可以在设备生命周期内更改,因此不能用作唯一的设备标识符。
答案 3 :(得分:0)
设备令牌可以更改,因此您的应用每次都需要重新注册 它被启动并将收到的令牌传递回您的服务器。如果你 无法更新设备令牌,远程通知可能无法更新 他们的方式到用户的设备。设备令牌总是在更改时更改 用户将备份数据还原到新设备或计算机或重新安装 操作系统。将数据迁移到新设备或计算机时 用户必须先启动您的应用,然后才能进行远程通知 送到那台设备。
永远不要缓存设备令牌;总是从系统中获取令牌 无论什么时候需要它。如果您的应用之前已注册为远程 通知,再次调用registerForRemoteNotifications方法 不会产生任何额外开销,iOS会返回现有的开销 设备令牌立即到您的应用委托。另外,iOS调用 您的委托方法,只要设备令牌发生变化,而不仅仅是 回复您的应用注册或重新注册。
所以最好的方法是在每次发布时重新注册令牌。为此,您可以在registerForPushNotifications(application)
方法中调用applicationDidFinishLaunching()
。
上述方法的委托方法为didRegisterForRemoteNotificationsWithDeviceToken
,deviceToken
可以将func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
var tokenString = ""
for i in 0..<deviceToken.length {
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
print("Device Token:", tokenString)
}
发送给服务器。
Sub autosave()
'SAVE FILE
Application.EnableEvents = False
rtn = Application.Dialogs(xlDialogSaveAs).Show(arg1:=ThisWorkbook.Sheets("PO Calculator").Range("B15").Value)
Application.EnableEvents = True
If Not rtn Then Cancel = True
'no file name
'Application.Dialogs(xlDialogSaveAs).Show
End Sub
答案 4 :(得分:0)
对于Objectice-C:
let device_id = UIDevice.currentDevice().identifierForVendor?.UUIDString
对于Swift:
{{1}}
答案 5 :(得分:0)
你应该接收
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
var deviceTokenStr = String(format: "%@", deviceToken)
deviceTokenStr = deviceTokenStr.stringByReplacingOccurrencesOfString("<", withString: "")
deviceTokenStr = deviceTokenStr.stringByReplacingOccurrencesOfString(">", withString: "")
deviceTokenStr = deviceTokenStr.stringByReplacingOccurrencesOfString(" ", withString: "")
}
或者,如果您想获得唯一的设备ID,可以使用
let UUID = NSUUID().UUIDString
答案 6 :(得分:0)
就像我在我的应用程序中所做的那样,你可以使用第一个生成的uuid并将其保存在Keychain文件中,以将其用作唯一的设备ID(因为uuid在每次运行时都会更改为你的应用程序和设备令牌)所以你可以保存一个uuid或你在钥匙串中生成的任何自定义ID,即使用户卸载也会永久保留,并且多次安装应用程序