【发布时间】:2018-10-10 19:32:03
【问题描述】:
我已经集成了 Twilio Programmable Chat,但我遇到了一些关于推送通知的问题,我正在尝试解决这些问题。
我正在查看我的代码与https://www.twilio.com/docs/chat/ios/push-notifications-ios 提供的示例
我注意到的第一件事是在User Notification Setttings 部分(除了部分名称中的额外t),使用了V1.0 中已弃用的方法[self.chatClient registerWithToken:nil];。在 V 2.2.2 的当前文档中,我们有 - (void)registerWithNotificationToken:(nonnull NSData *)token completion:(nullable TCHCompletion)completion,它为 token 参数指定了 nonnull NSData*。所以,我们不能再通过 nil 了。我们现在应该为我们的应用程序委托的- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 中的if(notificationSettings.types == UIUserNotificationTypeNone) 案例做些什么吗? (上面提到的教程部分提供了示例)现在我只是跳过这一步,并确保我的updatedPushToken 属性设置为 nil。
我还想知道 TwilioChatClient 上的 - (void)handleNotification:(nonnull NSDictionary *)notification completion:(nullable TCHCompletion)completion 方法实际上是做什么的。我看到delegate 有5 种不同的通知方法。这个handleNotification 方法是否只是调用适当的委托方法?我自己没有使用这种方法,我现在只是显示一个带有通知消息的警报视图,所以我想知道是否有我错过的其他好处,甚至潜在的错误我'我通过不使用 TwilioChatClient 处理程序来介绍。
我想知道的最后一个也是最重要的事情,在本教程中没有涉及,是如何在用户退出并稍后重新登录时处理注册推送通知。从- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 返回的deviceToken 是否意味着存储在比单例属性更持久的地方?我可以通过 Twilio 或我不知道的 iOS 方法在其他地方重新获得它吗?似乎一旦我将用户注销,当他们登录到不同甚至相同的用户时,我就无法再次收到通知。我看到有一个deregisterWithNotificationToken:completion: 方法,但是由于它需要一个非空令牌,所以如果我的应用程序尚未关闭,我只能根据教程调用它。保留此令牌的推荐方法是什么? NSUserDefaults?我服务器数据库的某个地方?
编辑: 实际上,我还有一个问题。如果我取消选中已读状态框,然后在聊天实例配置中重新选中它,这会重置每个人的未读频道数吗?我的消费水平/阅读状态的设置不正确,而且我还有很多对用户隐藏的频道,即使它们在其中......所以,启用徽章计数后,用户可能会看到非常高的数字他们收到一条消息的时间,并且即使他们打开了他们当前可以查看的每个频道,也无法将此数字完全减少到 0。我宁愿重设这个数字。正如我的 cmets 中提到的,我不喜欢我唯一的选项是没有通知徽章,或者通知徽章明确设置为具有未读消息的频道数......我最喜欢一个选项来增加徽章,并且,除此之外,不包含特定数字的通知。我希望人们看到他们有聊天,因为这非常重要,但我不希望显示这些高数字,并且这些未读消息不会永久保持相关性。只有新的未读消息是相关的。
【问题讨论】:
-
在做一些测试后,我看到使用 nil 调用
registerWithNotificationToken:completion:会在显式完成时显示警告,只需在块中返回一个结果,该块为isSuccessful返回 false 并包含错误消息 @987654339 @所以,什么都不会崩溃,但在教程中这似乎是一个完全不必要的调用。在令牌存在时调用的函数中调用正确的、最新的方法。但是,如果您将该示例代码与最新的 SDK 一起使用,则会出现编译器错误,因为该方法不存在。 -
经过一番挖掘,似乎在推送通知被批准后简单地调用
[UIApplication sharedApplication] registerForRemoteNotifications]将立即再次调用- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken。 Apple 特别建议不要缓存此令牌,而是根据需要调用该方法再次获取它。除非那是错误的,否则只剩下中间的问题。如果我不打算使用委托方法,那么实现handleNotification是否有好处? -
我知道 Twilio Devs 经常在这里使用这个标签。所以就打消念头吧。我目前对我的 iOS 应用程序有不同的目标 - 产品和开发。因此它们具有不同的捆绑标识符并需要不同的 APNS 证书。看起来他们在某个时候向 Apple 开发控制台添加了一个密钥功能,它可以为您提供一个更易于使用的密钥,该密钥可以链接到多个应用程序 APNS 证书。提供这个作为为 iOS 添加推送配置的方法会很酷!在用户端它有点不那么乏味和直接。
-
当我发送一条消息时,我的通知计数始终是一个常数。我看到这应该是我有未读消息的频道数。但我浏览并阅读了我所有的消息。价值永远不会改变。而且我看到只有设置徽章计数的选项。我希望选择只设置通知徽章而不计数,或者只是增加徽章,而不是显式设置计数。
-
我还有大量来自旧测试帐户的不良 APNS 绑定。我不知道这对产品有多大的影响。但是我注意到每次推送都会收到一些调试警报,因为我将 APNS 凭据更改为我的 iOS 应用程序的测试目标。我为旧证书设置了三个绑定,现在每次发送推送通知都会失败。所以它尝试发送 4,并且只有最近的一个正在通过。是否有 webhook 可以在旧绑定出现错误时删除它们,因此相同的死端点不会持续触发错误日志?
标签: ios push-notification twilio twilio-programmable-chat