iOS 在应用程序内注册推送通知

2024-04-27

Q1.我必须在应用程序启动时执行此操作吗?或者我可以在应用程序中的任何时候触发允许/不允许的提示吗?

Q2。有没有办法查明用户是否单击了是/否? (打回来?)

Q3。如果用户已经单击“否”(在之前的会话中),我的提示实际上会触发吗?或者我是否需要告诉用户转到他们的手机设置并在那里启用它?

原因是我有一个应用程序,其中有一个名为“通知”的部分,它们可以启用/禁用接收某些事物的通知,所以我只想提示他们启用等,当它们位于此部分而不是在应用程序的启动。


A1:不,它不必位于应用程序的开头。您可以从代码中的任何位置调用 registerForRemoteNotificationTypes。

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

您将需要处理以下委托方法(在委托中),这些方法在推送通知注册成功/失败时被调用。

// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes]; // this will send token to your server's database
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

A2:是的,可以。有两种可能的情况。如果您的应用程序未运行,您将在 didFinishLaunchingWithOptions 中处理推送通知。在这种情况下,如果用户在消息警报中选择“打开”或单击横幅(取决于用户的设置),您的应用程序将自动启动,您可以处理推送通知中传递的用户参数。

 /* Push notification received when app is not running */
 NSDictionary *params = [[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"appsInfo"];

    if (params) {
        // Use params and do your stuffs
    }

如果您的应用程序已在运行,推送通知将发送至application:didReceiveRemoteNotification:委托方法,您可以在推送通知中简单地向 UIAlertView 呈现消息,并以标准方式处理 AlertView 委托“确定/取消”按钮单击。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSDictionary *apsInfo = [userInfo objectForKey:@"apsinfo"]; // This appsInfo set by your server while sending push

    NSString *alert = [apsInfo objectForKey:@"alert"];

    UIApplicationState state = [application applicationState];

    if (state == UIApplicationStateActive) {
        application.applicationIconBadgeNumber = 0;

        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

        UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Push Notification"
                                                            message:alert
                                                           delegate:self
                                                  cancelButtonTitle:@"NO"
                                                  otherButtonTitles:@"YES"];
        [alertview show];
        [alertview release];

    } else {
        [self setTabs:contentsInfo];
     }
}


- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (buttonIndex != [alertView cancelButtonIndex]) {
     // User pressed YES, do your stuffs
     }
}

A3:如果用户拒绝接受来自您的应用程序的推送通知,则会出现 didFailToRegisterForRemoteNotificationsWithError,因此您将无法获得用户的 devToken,而该 devToken 需要位于您的服务器上才能向该用户发送推送通知。如果用户最初接受但后来更改设置以禁用您的推送通知,则 Apple 服务器将不会向该用户发送您的推送通知。在这种情况下,用户的 UDID 将出现在反馈服务中,理想情况下,您的服务器应从数据库中删除该用户的 UDID,并停止向该用户发送推送通知。如果您继续发送无效的推送通知,Apple 服务器可能会默默地断开您的连接,并且您将无法发送任何推送通知。

See 苹果推送通知 http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/WhatAreRemoteNotif/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1文档以获取有关实施的详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 在应用程序内注册推送通知 的相关文章

随机推荐

  • 使用 Powershell 关闭 Excel 应用程序

    我正在从 powershell 启动工作簿中的宏 以自动化流程 下面在 powershell 中打开 Excel 工作簿并运行宏 而不可视化该过程 问题是 即使我没有看到宏运行 从宏生成的新 excel 实例仍然打开 start Excel
  • 如何求能被7整除的数字个数?

    给定一个整数N 如何有效地找到范围内能被 7 整除的数字的个数 其逆序也能被 7 整除 0 10 N 1 Example For N 2 回答 4 0 7 70 77 0到99之间所有能被7整除的数字 它们的倒数也能被7整除 我的方法 简单
  • 我可以在不安装 Python 的情况下为 RobotFramework 安装 Selenium2Library 吗?

    如果我只有 Jython 我可以使用 Selenium2Library 吗 也就是说 我还没有安装Python 并且希望摆脱不需要它的麻烦 我读过相互矛盾的信息 但是 jybot 不能使用 selenium2library 我需要 pybo
  • 在 jupyter 中找不到 Tensorboard 作为魔法函数

    我想使用最新的tensorflow 2 0 0a0在jupyter中运行tensorboard 使用tensorboard版本1 13 1和python 3 6 using tensorboard logdir logs base dir
  • 捕获 Exchange 命令行管理程序中的错误

    我正在尝试编写一个创建 Exchange 邮箱的 powershell 脚本 只要邮箱尚不存在 这种方法就可以正常工作 但是当我尝试捕获任何错误并将其报告回来时 脚本就会运行 就好像一切都很好一样 我在现有用户上运行该脚本 它显示了错误 但
  • 从 NetBeans 在 tomcat 上部署应用程序时出现 HTTP 错误 503?

    我更新了NetBeans我的 MacBook 上从 7 3 升级到 7 4 更新之前一切正常 但是安装之后NetBeans7 4 当我尝试在tomcat 它给了我以下错误 ant f Volumes DEVELOPMENT Projects
  • Clipboard.GetData() 在不应返回 null 时返回 null

    我正在将 Excel 文档中的单元格复制到剪贴板 以便它们可以作为图像插入到其他地方 单元格可以很好地复制到剪贴板 因为我可以在代码运行后手动粘贴图像 但是我无法获取数据 这是我的代码 tempWorkSheet Range tempWor
  • 如何将“-ddump-minimal-imports”与堆栈一起使用

    我是 stack 的忠实粉丝 我已经从我的机器中完全删除了任何独立的 cabal 和 ghc 可执行文件 让 stack 在它自己神秘的 stack 目录中安装它需要的任何东西 但是 看起来有些标志在堆栈下无法正常工作 例如 我想使用 dd
  • 在 Pandas 中使用多重索引时显示所有索引值

    我希望在查看我的 DataFrame 时 我将看到 multiIndex 的所有值 包括当后续行对于其中一个级别具有相同索引时 这是一个例子 arrays 20 50 20 20 N A N A 10 30 tuples list zip
  • Excel VBA 中的 TypeName 返回什么?

    我想检查一下数据类型 Cells 2 1 Value即 这里有什么 以下 我尝试了名称 整数 长整型等 但似乎不接受 If TypeName Cells r 1 Value WHAT GOES HERE Then MsgBox Yes El
  • 多列条件计数 SQL

    我正在尝试计算连续 4 个单独列中的不同条目 然后对结果求和 例如 表头看起来类似于 ID Col1 Col2 Col3 Col4 每列 保存 ID 可以有一个文本值 W X Y 或 Z 列可以有相同的值 我想做的是找出一种方法来计算列中的
  • Java OS X Lion 关于菜单

    我正在尝试覆盖 OS X Lion 上的 Java 应用程序或 Leopard 及以上版本中的任何内容中的 关于 菜单 我怎么做 到目前为止 我读过的教程似乎不是最新的 一些类不再在 Java Mac SDK 中 其他类的事件也没有被触发
  • numpy 中 Float16 比 Float32 和 Float64 慢得多[重复]

    这个问题在这里已经有答案了 我试图运行一个代码片段 看起来像 import numpy as np import time def estimate mutual info X neurons bins 5 xy np histogram2
  • 将json文件插入mongodb

    我是 MongoDB 新手 在 Windows 中安装 MongoDB 后 我尝试使用以下命令插入一个简单的 json 文件 C gt mongodb bin mongoimport db test collection docs lt e
  • 如何将 Windows 窗体控件设置为只读?

    时隔很长一段时间回到VS2008中的WinForms 修补VS2008 Express版中的一个OOD问题 我需要一些控件作为 仅显示 小部件 用户不应该能够更改这些控件的值 小部件通过定期更新刻度事件进行更新 我依稀记得有一个 ReadO
  • 通过列表搜索

    我一直在尝试定义一个函数 给定一个整数列表和一个整数 n 返回一个布尔值 指示 n 是否在列表中恰好出现一次 我有这个 但它不起作用 我无法弄清楚 once a gt a gt Bool gt Bool filter filter p x
  • 如何填充剩余高度的100%?

    1 2
  • 列出 git 标签名称、日期和消息

    如何列出所有标签的标签名称 标签日期和标签消息 看来 git 通过以下方式分离了提交的显示逻辑git log并通过标签git tag使得列出标签名称 标签日期和标签消息变得困难 我可以显示标签日期 姓名和提交消息 using git log
  • bcrypt 中的盐的要点

    抱歉 如果这是一个愚蠢的问题 我只是想知道 bcrypt 中的盐有什么意义 我的意思是 如果您有以下用于从密码创建哈希的代码 function generateSalt salt 2a 13 salt salt 11111111111111
  • iOS 在应用程序内注册推送通知

    Q1 我必须在应用程序启动时执行此操作吗 或者我可以在应用程序中的任何时候触发允许 不允许的提示吗 Q2 有没有办法查明用户是否单击了是 否 打回来 Q3 如果用户已经单击 否 在之前的会话中 我的提示实际上会触发吗 或者我是否需要告诉用户