我正在使用Sinch和ManagedPush通过PushKit接收VoIP通知。在我的应用我有三个可能的状态:在注册后,Sinch再次注册了通知unregisterPushNotificationDeviceToken
- 在线
- 离线
- “不适用于来电,但我可以拨打电话”
用户可以在任何改变这种状态在App会话期间。
下列文件: https://www.sinch.com/docs/voice/ios/#unregisterapushdevicetoken
我使用unregisterPushNotificationDeviceToken
以及stopListeningOnActiveConnection
这似乎是工作,以获得人不接听来电,可是仍然存在客户端主动拨打电话。我遇到的问题是让用户重新联机。活动连接有效,但我似乎无法再次注册通知,以便在应用程序处于后台时接收呼叫。
像Sinch SDK - How to logout user?这样的问题不能解决如何让用户重新联机。
我已经考虑过使用SinchService组件https://github.com/sinch/SinchService-iOS,但是我可以从代码中看到注销功能会终止客户端。而且我有兴趣不要终止客户端,而是停止接收通知,然后在同一会话中再次接收它们。
我曾尝试:
不适用于进来的呼叫按钮的功能:
[_client stopListeningOnActiveConnection];
[_client unregisterPushNotificationDeviceToken];
在线按钮的功能:
[_client startListeningOnActiveConnection];
[[UIApplication sharedApplication] registerForRemoteNotifications];
我打电话registerForRemoteNotifications的原因是为了迫使didRegisterForRemoteNotificationsWithDeviceToken
委托方法被调用,所以我可以调用Managed Push来再次注册通知。我认为这可能会做到这一点,但事实并非如此。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[self.push application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
最有可能这不起作用,因为这经历了PushKit和注册的方式是不同的。
至于解决方法,对我的作品被重新创建客户端,当用户切换到在线状态回:
[_client terminateGracefully];
_client = nil;
[self initSinchClientWithUserId:[BCDataProvider loggedInUser].callerId];
有没有什么方法可以让我尽快回到所注册的VoIP通知,一个unregisterPushNotificationDeviceToken后无需重新创建客户端?
谢谢!
您使用托管推送还是滚动您自己的推送服务器? – cjensen
嗨,我使用托管推送 –