获取推送通知的设备令牌

2023-11-24

我正在研究推送通知。我编写了以下代码来获取设备令牌。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

    NSLog(@"Registering for push notifications...");    
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    return YES;
}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
    NSLog(@"This is device token%@", deviceToken);
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(@"Error %@",err);    
}

我能够在设备上成功运行应用程序,但无法在控制台上获取设备 ID。

我对认证和配置文件没有任何问题。


NOTE:下面的解决方案不再有效在 iOS 13+ 设备上 -它将返回垃圾数据.

请改用以下代码:

+ (NSString *)hexadecimalStringFromData:(NSData *)data
{
  NSUInteger dataLength = data.length;
  if (dataLength == 0) {
    return nil;
  }

  const unsigned char *dataBuffer = (const unsigned char *)data.bytes;
  NSMutableString *hexString  = [NSMutableString stringWithCapacity:(dataLength * 2)];
  for (int i = 0; i < dataLength; ++i) {
    [hexString appendFormat:@"%02x", dataBuffer[i]];
  }
  return [hexString copy];
}

在 iOS 13 之前有效的解决方案:

Objective-C

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"this will return '32 bytes' in iOS 13+ rather than the token", token);
} 

斯威夫特3.0

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
    let tokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    print("this will return '32 bytes' in iOS 13+ rather than the token \(tokenString)")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取推送通知的设备令牌 的相关文章

随机推荐

  • Document.getElementById() 返回名称等于指定 id 的元素

    我之前曾在this SO关于 IE6 7 以及某些版本的 Opera 的有趣行为document getElementById可以找到一个元素 其name属性已定义 但未定义id属性 使得 function f document getEl
  • Angular Universal - 排除路线

    是否可以对某些路线不使用角度通用 我想对我的静态页面使用角度通用 当我登录我的应用程序时 我不想使用它 我想用 app 排除路由 请问我该怎么做 非常感谢 这是我的 server ts These are important and nee
  • Raspberry Pi 上的 crontab 无法播放音频

    我正在尝试让我的 Raspberry Pi 当前连接到蓝牙扬声器 以便每天按计划播放音频文件 其中我的cron工作正在更新中 daily获得新的时间 这基本上是祈祷的召唤 crontab l daily home pi athan upda
  • 来电屏幕上的活动弹出窗口

    我正在尝试覆盖来电屏幕 我知道我无法更改它 所以我正在尝试在顶部弹出一个活动 我的代码工作正常 除非手机闲置了几分钟 My code AndroidManifest xml
  • 将两个或多个 Crystal Reports 合并为一个 PDF

    我有一个复选框列表 如果我选择两个或多个值 则 CheckBoxList SelectedValues 将作为参数一一传递 并且我想为每个 SelectedValue 生成 PDF 格式的 Crystal Report 并且我想将所有 Cr
  • onDestroy之后是否可以调用回调方法?

    在我的应用程序的最新版本中 一些用户遇到了我无法重现的崩溃 目前仅Samsung设备运行Lollipop遇到这个问题 但这可能只是巧合 在分析了堆栈跟踪和相关代码之后 我想我可能已经找到了罪魁祸首 为了测试我的假设 我将代码简化为下面的代码
  • 编写供国际使用的软件的最佳实践 (i18n)

    我正在寻求编写过国际通用软件的专家的意见 我想了解人们在每个逻辑软件层 数据 rdbms 业务 中间件 用户界面 所采用的最佳实践 谢谢你提供的所有帮助 Data 当您使用 UTF 8 时 请做好每个字符最多占用 3 个字节的准备 对于中文
  • 在 PyQt 中启动 new QThread() 时传递参数

    我有一个用 Python 编写的多线程应用程序 其中一个线程 照顾 GUI 另一个线程是工作线程 但是 工作线程有两个主要函数 或者说两个主要作业 我需要告诉运行函数到底要执行哪个作业 所以我的想法是在工作线程中创建一个运行函数 该函数将采
  • 如何从命令行获取 CSRF 令牌?

    我经常使用测试我的应用程序curl过去我不得不简单地用以下内容来概括我的观点csrf exempt 我真的不想这样做 因为我有一种讨厌的感觉 我会忘记在部署中这样做并享受一生的 CSRF 地狱 有没有办法让我使用 Django 的 shel
  • gnu 排序的意外结果

    当我尝试对以下文本文件 输入 进行排序时 test1 3 test3 2 test 4 用命令 sort input 输出正是输入 这是输出 od bc input 0000000 164 145 163 164 061 011 063 0
  • 以 2 的补码表示十六进制值

    我有一个字符串十六进制值 我需要用 2 的补码来表达它 string hx FF00 我所做的是将其转换为二进制 string h Convert ToString Convert ToInt32 hx 16 2 然后反转它 但我无法使用N
  • HttpContext.Current.User!= HttpContext.User?

    Is HttpContext Current User在全局 asax 中不一样HttpContext User在行动方法中 我为用户分配了一些角色 但他们似乎迷失了 下面的代码显示了正在发生的情况 当用户登录时 两个断言都会被命中 首先是
  • 在组件编辑器中获取字段的_当前_值? (Tridion 2011 SP1)

    我正在编写 保存 命令的扩展 基本上我想验证某些字段并显示一个弹出窗口 允许编辑器根据当前日期 发布号和一些其他属性选择给定的关键字或其他值 我以为我取得了很好的进步 直到我最终发现 display getItem 返回存储在 CM 中的项
  • 如何获取传递给函数的变量的名称?

    让我用下面的例子来解释我的问题 public string ExampleFunction string Variable return something string WhatIsMyName Hello World string He
  • 从 Jupyter 笔记本中删除空行

    有没有一种简单的方法可以从 IPython 笔记本中删除空行 我在网络开发中养成了留空行的习惯 而且我的手指往往会自动按回车键 这使得 IPython 笔记本变得更少 因为占用了我的 14 英寸屏幕的太多空间 并且在大多数情况下并不更具可读
  • 仅当参数不是常量时,math.h 中的 sqrt 才会导致链接器错误“未定义对 sqrt 的引用”

    我创建了一个小程序 如下 include
  • android 以编程方式清除日志

    我想在按下按钮来分析我们应用程序的某些部分 计算一些内容 后获取整个日志 Log d 我可以通过以下代码来做到这一点 HashMap
  • Google 容器引擎中的自动缩放

    据我了解 容器引擎目前处于 alpha 阶段 尚未完成 从文档中我假设 Pod 还没有自动缩放 例如 取决于 CPU 负载 对吗 我希望能够配置一个复制控制器 以便在平均 CPU 负载达到定义的阈值时自动添加 Pod 和 VM 实例 这是近
  • 如何避免 ViewModel 中的命令混乱?

    我正在构建一个使用相当多命令的应用程序 它们使我的视图模型变得混乱 MVVM 对我来说是新的 如果这个问题有点愚蠢 我很抱歉 有没有办法减少混乱 例如 在这里您可以看到杂乱的一部分 private void InitializeComman
  • 获取推送通知的设备令牌

    我正在研究推送通知 我编写了以下代码来获取设备令牌 BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOp