iOS Twilio可编程聊天推送通知

时间:2018-04-30 17:00:00

标签: ios push-notification twilio twilio-programmable-chat

我已经集成了Twilio可编程聊天功能,但我在推送通知方面遇到了一些问题,我试图解决这个问题。

我正在查看我的代码与https://www.twilio.com/docs/chat/ios/push-notifications-ios

中提供的示例

我注意到的第一件事是在User Notification Setttings部分(除了部分名称中的额外部分之外),使用了V1.0中不推荐使用的方法[self.chatClient registerWithToken:nil];。在V 2.2.2的当前文档中,我们有- (void)registerWithNotificationToken:(nonnull NSData *)token completion:(nullable TCHCompletion)completion,它为token参数指定nonnull NSData*。所以,我们不能再通过零了。我们现在应该为我们的应用代表if(notificationSettings.types == UIUserNotificationTypeNone)内的- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings案件做些什么吗? (上面提到的教程部分中提供的示例)现在我只是跳过该步骤,并确保我的updatedPushToken属性设置为nil。

我也想知道TwilioChatClient上的- (void)handleNotification:(nonnull NSDictionary *)notification completion:(nullable TCHCompletion)completion方法实际上是做什么的。我看到delegate有5种不同的通知方法。这个handleNotification方法是否只调用适当的委托方法?我自己没有使用这种方法,我现在只是显示一条警报视图,其中包含通知消息,所以我想知道是否还有其他好处,我错过了,或者甚至是我未通过使用TwilioChatClient处理程序引入的潜在错误。

我想知道的最后也是最重要的一点,就是在用户注册并稍后重新注册时,如何处理推送通知的注册。从deviceToken返回的- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken是否意味着存储在比单身人士的财产更具持久性的地方?我可以通过Twilio或者我不知道的iOS方法在其他地方重新获得它吗?似乎一旦我签署了用户,当他们登录到不同的甚至是同一个用户时,我又无法再次收到通知。我看到有一个deregisterWithNotificationToken:completion:方法,但由于它需要一个非空令牌,我只能根据教程调用它,如果我的应用程序尚未关闭。挂起此令牌的推荐方法是什么? NSUserDefaults的?在我服务器的数据库的某个地方?

编辑: 实际上,我有另一个问题。如果我取消选中阅读状态框,然后在聊天实例配置中重新检查,是否会重置所有人的未读频道数?我对消费范围/阅读状态的设置做得不正确,我也有很多隐藏用户的频道,即使它们在其中......所以,启用徽章数量后,用户可能会看到非常高的数字他们获得单个消息的时间,并且即使他们打开他们当前可以查看的每个频道,也无法将此数字完全减少到0。我更愿意重置此号码。正如我的评论中提到的,我不喜欢我唯一的选择是没有通知徽章,或者通知徽章明确设置为具有未读消息的频道数量...我最希望选择只增加徽章,并且除此之外,不包含特定号码的通知。我希望人们看到他们有聊天,因为这非常重要,但我不希望显示这些高数字,而这些未读信息永远不会保持相关性。只有新的未读消息是相关的。

1 个答案:

答案 0 :(得分:2)

我在可编程聊天iOS SDK团队中,希望能够帮助您解决上述一些问题。

registerWithToken:的引用以及在没有令牌存在/已知时使用nil参数调用它的说明都已弃用,如您所知。我们将更新文档和教程以反映这一点 - 谢谢!

今天,handleNotification:completion:是可选的。其目的是解析推送有效负载的userInfo部分,并提供您提到的回调,以帮助您的用户了解发生的事件。今天跳过此步骤并不是有害的,但将来很可能这些回调将用于提供有关可编程聊天内部通知传递的更多反馈,因此您可能希望回顾实现此问题。未来的约会。

当您的用户退出时,建议您调用deregisterWithNotificationToken:completion:方法以确保其隐私。如果您不取消注册令牌与其身份相关联,则他们将继续接收该身份的通知,即使他们以后在该设备上使用具有不同身份的访问令牌。通过我们的REST API以编程方式管理通知绑定的机制在我们的路线图中,但我目前没有可以分享的发布日期。

正如Apple推送通知文档中所述,最好不要缓存设备令牌或假设推送设备令牌永远不会改变,因为此令牌可能会随着将来的注册而改变。同样,当您从Apple收到设备令牌时,建议您将Apple提供的令牌传递给可编程聊天,以确保我们拥有最新的令牌,以便与您的用户设备联系。

APNS传递的徽章计数报告给定用户的未读消息的频道数。有几个原因可以解释为什么你可能会在这里看到过时的结果。在您的客户端中,您是否在setLastConsumedMessageIndex:completion:上调用TCHMessages(或同一类中的某个相关方法)来更新后端的未读状态?完成此操作后,您应该会在短时间内看到更新的徽章计数更新。另一种可能性是,如果您对正在测试的通道上的其他身份进行了过时的绑定,但未注销/取消注册。请注意,虽然应用程序位于前台,但您有责任自行更新徽章计数 - iOS不会这样做。这是您可能希望确保拨打handleNotification:completion:的地方,因为如果我们收到徽章更新,我们会打电话给您。您还可以查看有效负载并根据需要直接在UIApplication的接收委托中更新徽章计数。测试这种情况的一种方法是建立一个新的频道并用它测试消息,在适当的时候更新消费范围。您可以在consumption horizon documentation中找到更多信息。下面,您可以找到将repsonse中的徽章计数更新为可编程聊天委托方法的示例:

- (void)chatClient:(TwilioChatClient *)client notificationUpdatedBadgeCount:(NSUInteger)badgeCount {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount];
}

利用Apple的提供商身份验证令牌代替证书是我们的通知团队正在调查的内容,但是我们暂时不会分享何时支持此事件的日期。

如果我能提供更多帮助或错过任何问题,请告诉我们!

谢谢你, 好色