idoubs工程中嵌入了ios-ngn-stack工程(即Doubango),所以较底层的功能都在ios-ngn-stack中实现,而idoubs中主要实现软件的UI,通过实例化ios-ngn-stack中类以实现相关功能。
注册逻辑的实现代码所在位置:ios-ngn-stack工程 → Classes → common → services → impl → NgnSipService.h / NgnSipService.mm
点开NgnSipService.mm可以在其中找到诸如名为“registerIdentity”、“unregisterIdentity”等方法,从其名字就可以读出功能,最重要的便是registerIdentity这个方法了,它就是注册功能的具体实现的底层代码所在,有兴趣的开发者可以详细读下,在这里就不做介绍了。
然后用Xcode搜索一下“registerIdentity”,有很多结果,但绝大部分我们不用关心,因为其是出现在ios-ngn-stack工程中的。看到最后有三个结果出现在了idoubs2AppDelegate.mm文件中,从名字就可以断定,这个文件就是idoubs应用的程序委托文件,即可以理解为程序的开始。分别点击这三个条目可以看到registerIdentity方法分别出现在“queryConfigurationAndRegister”、“onNetworkEvent”和“onRegistrationEvent”方法中,下面对三者进行一一介绍:
- queryConfigurationAndRegister:该方法在application:didFinishLaunchingWithOptions:方法中,也就是说程序加载完毕后会进行一次注册
- onNetworkEvent:该方法在application:didFinishLaunchingWithOptions:方法中被注册为”通知启动方法“,即当获取到名为”kNgnNetworkEventArgs_Name“的通知时调用onNetworkEvent方法,这个通知会在网络连接状态改变的时候发出。所以,当成功连接到某网络、断开连接、开启3G等时刻会进行注册。
- onRegistrationEvent:和onNetworkEvent相似,onRegistrationEvent在application:didFinishLaunchingWithOptions:方法中也被注册为”通知启动方法“,当获取到名为”kNgnRegistrationEventArgs_Name“的通知时调用该方法。这是”赤裸裸“的注册方法,即完成最基本的注册功能,所以如果想要在代码中加入注册功能,只要发出名为kNgnRegistrationEventArgs_Name的通知即可。