MigrationGuide from 1.7.x to 2.0.0 - Bandyer/Bandyer-iOS-SDK GitHub Wiki
This guide will introduce you to the changes made to the BandyerSDK in version 2.0. There are some breaking change you must take into account in order to use the 2.0 version of the SDK if you are still using a 1.x version.
Table of contents
- Minimum deployment target
- Consistent naming convention
- Deprecations
- Call and Chat clients
- Call intents
- User info fetcher
- Call banner controller delegate
- Channel view controller
Minimum deployment target
The BandyerSDK minimum deployment target has been raised from iOS 9.0 to iOS 10.0. We dropped support for devices running iOS 9.0.
Consistent naming convention
Starting from 2.0 version all types will follow a consistent naming convention. Any type provided by the BandyerSDK is now prefixed with the BDK prefix. If you are using the BandyerSDK in a "Swift" project you must update all references to BandyerSDK types removing any prefix, whereas if you are using the BandyerSDK in an "Objective-c" project you must update all references to BandyerSDK types using the BDK prefix instead of the old ones.
For example, the call client protocol was called BCXCallClient
in version 1.7.3, now it has been renamed to BDKCallClient
. As mentioned above, "Objective-c" code referencing the BCXCallClient
must be updated referencing BDKCallClient
type instead, whereas "Swift" code must be updated referencing CallClient
instead.
Swift
The following snippet shows you how your "Swift" code should be changed referencing the new types instead of the old ones.
extension ContactsViewController: BCXCallClientObserver {
...
public func callClientDidStart(_ client: BCXCallClient) {
// Do something when client starts
}
...
}
BCXCallClientObserver
conformance using the BandyerSDK 1.7 version
extension ContactsViewController: CallClientObserver {
...
public func callClientDidStart(_ client: CallClient) {
// Do something when client starts
}
...
BDKCallClientObserver
conformance using the BandyerSDK 2.0 version
Objective-c
The following snippet shows you how your "Objective-c" code should be changed referencing the new types instead of the old ones.
@interface ContactsViewController () <BCXCallClientObserver>
@end
@implementation ContactsViewController
...
- (void)callClientDidStart:(id <BCXCallClient>)client
{
// Do something when client starts
}
...
@end
BCXCallClientObserver
conformance using the BandyerSDK 1.7 version
@interface ContactsViewController () <BDKCallClientObserver>
@end
@implementation ContactsViewController
...
- (void)callClientDidStart:(id <BDKCallClient>)client
{
// Do something when client starts
}
...
@end
BDKCallClientObserver
conformance using the BandyerSDK 2.0 version
Deprecations
All deprecated types, methods and properties have been removed from 2.0 version. So if you were using one of deprecated method or type, you must update your code using the new APIs.
Call and Chat clients
Starting from 2.0 version the start
methods of the call and chat clients have been changed removing the userAlias parameter. Now both start
methods take no parameters but there's a catch, you must open an user session before calling start on any client. The BandyerSDK singleton instance gained two new methods openSession(userId:)
and closeSession()
that must be called when an user is logged in and when an user is logged out of your application respectively. You MUST call openSession(userId:)
([openSessionWithUserId:]
in Objective-c) before starting any client otherwise the client will fail starting.
As a side note, the closeSession()
([closeSession]
in Objective-c) method will stop any running client.
Call intents
The old BDKMakeOutgoingCallIntent
and BDKIncomingCallHandlingIntent
have been renamed and updated.
The BDKMakeOutgoingCallIntent
has been renamed to StartOutgoingCallIntent
and all its initializers have been updated taking a CallOptions
object as parameter.
The BDKIncomingCallHandlingIntent
has been renamed to HandleIncomingCallIntent
and its initializer takes a mandatory call object as parameter.
Take a look at our making an outgoing call guide and at our receiving an incoming call guide for some detailed examples of how the two intents now look like.
User info fetcher
The old BDKUserInfoFetcher
protocol and its related BDKUserDisplayItem
type have changed and updated with the goal of moving towards a consistent API between all Bandyer supported platforms.
The BDKUserDisplayItem
has been renamed to UserDetails
. UserDetails
objects are now immutable and cannot be modified once created. The UserDetails
class exposes a lot of convenience initializers useful for creating an object with all the user details your app can provide.
The BDKUserInfoFetcher
protocol has been renamed to UserDetailsProvider
. It has lost conformance to the NSCopying
and the NSObjectProtocol
protocols. The old BCXHandleProvider
protocol has been merged in the UserDetailsProvider
protocol.
Take a look at our customizing user information guide for some detailed examples of how the UserDetailsProvider
now looks like.
Call banner controller delegate
The CallBannerControllerDelegate
protocol methods have changed signature. You must update your object conforming to this protocol with the new methods signatures. Here's a snippet showing you how they changed:
Swift
extension ViewController: CallBannerControllerDelegate {
func callBannerController(_ controller: CallBannerController, didTouch banner: CallBannerView) {
}
func callBannerController(_ controller: CallBannerController, willShow banner: CallBannerView) {
}
func callBannerController(_ controller: CallBannerController, willHide banner: CallBannerView) {
}
}
CallBannerDelegate
conformance in BandyerSDK 1.7 version
Becomes:
extension ViewController: CallBannerControllerDelegate {
func callBannerControllerDidTouchBanner(_ controller: CallBannerController) {
}
func callBannerControllerWillShowBanner(_ controller: CallBannerController) {
}
func callBannerControllerWillHideBanner(_ controller: CallBannerController) {
}
}
CallBannerDelegate
conformance in BandyerSDK 2.0 version
Objective-c
- (void)callBannerController:(BDKCallBannerController *_Nonnull)controller willHide:(BDKCallBannerView *_Nonnull)banner
{
}
- (void)callBannerController:(BDKCallBannerController *_Nonnull)controller willShow:(BDKCallBannerView *_Nonnull)banner
{
}
- (void)callBannerController:(BDKCallBannerController *_Nonnull)controller didTouch:(BDKCallBannerView *_Nonnull)banner
{
}
CallBannerDelegate
conformance in BandyerSDK 1.7 version
Becomes:
- (void)callBannerControllerWillHideBanner:(BDKCallBannerController *)controller
{
}
- (void)callBannerControllerWillShowBanner:(BDKCallBannerController *)controller
{
}
- (void)callBannerControllerDidTouchBanner:(BDKCallBannerController *)controller
{
}
CallBannerDelegate
conformance in BandyerSDK 2.0 version
Channel view controller
The ChannelViewController
does not show the call banner anymore. The ChannelViewControllerDelegate
has been updated removing methods related to in-app notifications and the call banner from its signature. Here's a snippet showing you how it changed:
Swift
extension ViewController: ChannelViewControllerDelegate {
func channelViewControllerDidFinish(_ controller: ChannelViewController) {
}
func channelViewController(_ controller: ChannelViewController, didTouch notification: ChatNotification) {
}
func channelViewController(_ controller: ChannelViewController, didTouch banner: CallBannerView) {
}
func channelViewController(_ controller: ChannelViewController, willHide banner: CallBannerView) {
}
func channelViewController(_ controller: ChannelViewController, willShow banner: CallBannerView) {
}
func channelViewController(_ controller: ChannelViewController, didTapAudioCallWith users: [String]) {
}
func channelViewController(_ controller: ChannelViewController, didTapVideoCallWith users: [String]) {
}
}
ChannelViewControllerDelegate
conformance in BandyerSDK 1.7 version
Becomes:
extension ContactsViewController: ChannelViewControllerDelegate {
func channelViewControllerDidFinish(_ controller: ChannelViewController) {
}
func channelViewController(_ controller: ChannelViewController, didTapAudioCallWith users: [String]) {
}
func channelViewController(_ controller: ChannelViewController, didTapVideoCallWith users: [String]) {
}
}
ChannelViewControllerDelegate
conformance in BandyerSDK 2.0 version
Objective-c
- (void)channelViewControllerDidFinish:(BCHChannelViewController *)controller
{
}
- (void)channelViewController:(BCHChannelViewController *)controller didTapAudioCallWith:(NSArray *)users
{
}
- (void)channelViewController:(BCHChannelViewController *)controller didTapVideoCallWith:(NSArray *)users
{
}
- (void)channelViewController:(BCHChannelViewController *)controller willHide:(BDKCallBannerView *)banner
{
}
- (void)channelViewController:(BCHChannelViewController *)controller willShow:(BDKCallBannerView *)banner
{
}
- (void)channelViewController:(BCHChannelViewController *)controller didTouchBanner:(BDKCallBannerView *)banner
{
}
ChannelViewControllerDelegate
conformance in BandyerSDK 1.7 version
Becomes:
- (void)channelViewControllerDidFinish:(BDKChannelViewController *)controller
{
}
- (void)channelViewController:(BDKChannelViewController *)controller didTapAudioCallWith:(NSArray *)users
{
}
- (void)channelViewController:(BDKChannelViewController *)controller didTapVideoCallWith:(NSArray *)users
{
}
ChannelViewControllerDelegate
conformance in BandyerSDK 2.0 version