deviceToken与UDID的区别

本文探讨了deviceToken与UDID的区别,并通过实验证明在同一设备上运行不同应用时,deviceToken会有所不同,而UDID保持不变。此外还提到了开发证书与发布证书获取的deviceToken可能不同。
昨天有朋友在问deviceToken与UDID的区别,我只是凭感觉说deviceToken能够区分设备在应用间也是不同的,UDID是设备的唯一标示符。今天验证了一下,在同一台机器上运行,打印其deviceToken,结果确实不同。但是之前也打印过,相同的应用其值也不相同,估计是因为其一个是开发证书获取,一个是发布证书获取的缘故,有待验证。
在不同的开发环境和平台中,获取DeviceToken的方法有所不同,以下为你分别介绍iOS和Android平台获取DeviceToken的常见方式。 ### iOS平台 在iOS中,DeviceToken通常指的是APNs(Apple Push Notification service)的设备令牌。可通过以下步骤获取: 1. 注册远程通知:在AppDelegate里调用`registerForRemoteNotifications`方法来注册远程通知。 ```swift import UIKit import UserNotifications @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 请求通知权限 UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in if granted { DispatchQueue.main.async { application.registerForRemoteNotifications() } } } UNUserNotificationCenter.current().delegate = self return true } func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined() print("Device Token: \(token)") } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register for remote notifications: \(error.localizedDescription)") } } ``` 2. 实现代理方法:实现`application(_:didRegisterForRemoteNotificationsWithDeviceToken:)`方法来获取DeviceToken。 ### Android平台 在Android中,DeviceToken通常指的是FCM(Firebase Cloud Messaging)的令牌。以下是获取步骤: 1. 集成Firebase:要在项目里集成Firebase,可按照Firebase官方文档的指引进行操作。 2. 获取FCM令牌: ```java import com.google.firebase.messaging.FirebaseMessaging; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(task -> { if (!task.isSuccessful()) { Log.w("TAG", "Fetching FCM registration token failed", task.getException()); return; } // Get new FCM registration token String token = task.getResult(); // Log and toast String msg = getString(R.string.msg_token_fmt, token); Log.d("TAG", msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值