C2Call-SDK 1.4.11

C2Call-SDK 1.4.11

测试测试过了
语言语言 Obj-CObjective C
许可证 MIT
发布最近发布2017年2月

Michael Knecht 维护。



 
依赖
SBJson~> 4.0
AWSCore~> 2.3.5
AWSS3~> 2.3.5
Flurry-iOS-SDK/FlurrySDK~> 7.3
Flurry-iOS-SDK/FlurryAds~> 7.3
 

C2Call-SDK 1.4.11

  • Michael Knecht

用法

要运行示例项目,请克隆仓库,首先从 Example 目录运行 pod install。示例代码包含 SDK 视频聊天示例,它实现了一个简单的视频聊天/多媒体聊天应用程序。为了基于 C2Call SDK 构建自己的应用程序,需要在以下网址注册(免费):

https://www.c2call.com/en/developer-area.html

有3种类型的账户可供选择。

Free - 1 application, 10000 monthly active users, limited API access
Professional - 99 EUR/month, 5 applications, 50000 monthly active users, extended API access
Enterprise - starting at 499 EUR/month, unlimited applications, enterprise API access, enterprise support plan, dedicated server option

请参阅:https://www.c2call.com/en/prices.html

为了基于 C2Call-SDK 构建自己的应用程序,在 C2Call DevArea 中创建一个新应用程序,并遵循以下网址下的教程:

https://www.c2call.com/en/how-it-works/ios-sdk.html

使用 CocoaPods SDK,不需要额外的步骤来集成 SDK。只需将 C2Call-SDK 添加到 Podfile,运行 pod install 并开始实现。

C2Call-SDK 参考文档可以在以下位置找到:

http://sdkdocs.ios.c2call.com

快速入门指南

AppDelegate 子类化

用于自动初始化 C2Call 服务的应用程序代理基类。作为 VoIP 和消息服务,C2Call 框架需要复杂的初始化过程,并且还需要详细监视所有应用程序状态,如激活(应用程序在前台)、非活动(屏幕保护程序处于活动状态)、后台(应用程序处于后台)或已终止。在不同的状态下,C2Call 框架需要维护与 C2Call 后端系统的连接、监视网络变化、自动检索未读消息或呼叫记录,并且尽可能节省电量。为了使开发者更容易使用,所有这些复杂的应用程序管理都已封装到 C2CallAppDelegate 基类中。现在,这个基类应该是使用 C2Call 框架的应用程序的 UIApplicationDelegate 基类。

C2CallAppDelegate 类实现了以下来自 UIApplicationDelegate 的方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)applicationDidBecomeActive:(UIApplication *)application; 
- (void)applicationWillResignActive:(UIApplication *)application;
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- (void)applicationWillTerminate:(UIApplication *)application; 
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification 
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillEnterForeground:(UIApplication *)application

在覆盖自己的 C2CallAppDelegate 子类中的上述所有方法时,都必须调用相应的 super 方法。

示例

    // MyAppDelegate.h
    #import <SocialCommunication/SocialCommunication.h> 

    @interface MyAppDelegate : C2CallAppDelegate

    // MyAppDelegate.m
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.affiliateid = @"<My AffiliateId>"; 
    self.secret = @"<MyApplication Secret>";
    #ifdef __DEBUG 
        self.useSandboxMode = YES;
    #endif
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    - (void)applicationWillResignActive:(UIApplication *)application {
        [super applicationWillResignActive:application]; 
    }
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [super applicationDidEnterBackground:application]; 
    }
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        [super applicationWillEnterForeground:application]; 
    }
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        [super applicationDidBecomeActive:application]; 
    }
    - (void)applicationWillTerminate:(UIApplication *)application {
        [super applicationWillTerminate:application]; 
    }

使用低级 API

C2CallPhone – 用于低级 C2Call 电话和消息 API 的基类。

此类提供低级 API 方法来访问主要的 C2Call 通信功能

- Phone calls to PSTN and mobile phone networks, - VoIP and video calls,
- Group calls (VoIP and Video)
- Instant Messaging,
- SMS / Text Messages
- Rich Media Messages like photo, video, voicemail, location, etc.

此类还提供了启动和停止C2CallPhone和处理后台行为的核心功能。C2CallAppDelegate使用此类来初始化对C2Call服务的连接和处理应用的后台状态。

调用功能示例

// Call the C2Call TestCall
[[C2CallPhone currentPhone] callVoIP:@"9bc2858f1194dc1c107"];

消息功能示例

// Send an SMS / Text message
[[C2CallPhone currentPhone] submitMessage:@"Hi, this is an SMS" toNumber:@"+1408234123456"];

丰富消息功能示例

#import <SocialCommunication/UIViewController+SCCustomViewController.h> 

...skip...

[self captureImageFromCameraWithQuality:UIImagePickerControllerQualityTypeMedium andCompleteAction:^(NSString *key) { 
    [[C2CallPhone currentPhone] submitRichMessage:key message:@"Hi, see my photo..." toTarget:@"[email protected]"];
}];

在您的UIViewController子类中使用C2Call SDK功能

C2Call SDK包含一个UIViewController类别,只需一行代码即可访问C2Call SDK功能。

此UIViewController类别提供了实例化和启动C2Call SDK GUI组件的便利方法。

C2Call SDK提供了丰富的组件,用于处理丰富媒体内容和社交媒体通信功能。此SDK的基本概念是将便利性和易用性与所有提供的组件的极大灵活性相结合。UIViewController+SCCustomViewController类别为访问这些组件提供便利,无论它们是作为SCStoryboard中的标准组件,还是作为从应用程序的MainStoryboard中的自定义组件。

在iOS Storyboard中,UIViewController代表一个屏幕内容,两个UIViewControllers之间的转换将由 UIStoryboardSegue定义。在C2Call SDK中,基于UIViewController的GUI组件也通过StoryboardSegue进行展示,以便开发者在MainStoryboard中定义转换。一些组件需要一组或多个参数,通常需要在prepareForSegue:sender方法中设置。UIViewController+SCCustomViewController提供便利方法,以一行或多行代码展示C2Call SDK GUI组件,并确保在展示的ViewController中正确地设置了所需参数。

以下GUI组件支持:

Presenting Rich Media Content
- SCComposeMessageController (Composes and submit a new Instant Message,

Rich Media Message or SMS/Text Message to a user or phone number)
- SCPhotoViewerController (Presents photos)
- SCVideoPlayerController (Presents a Video Player)
- SCLocationViewerController (Presents a location in a map view)
- SCAudioPlayerController (Presents an Audio Player for VoiceMails)

Capture Rich Media Content:
- UIImagePickerController (Captures an Image or Video from Camera or Photo Album with Quality)
- SCAudioRecorderController (Records and submits a VoiceMail)
- SCLocationSubmitController (Picks and submits the current location or nearby Google places)

Show Friends, Groups and Chat History:
- SCChatController (Presents a Chat History with a specific contact)
- SCFriendDetailController (Presents the details of a connected friend) - SCGroupDetailController (Presents the details of a connected group)

Others:
- SCBrowserViewController (Opens an URL in a Browser View)

如果开发者在MainStoryboard中使用StoryboardSegue连接上述组件,则连接的StoryboardSegue必须遵循特定的命名约定,以便正确设置prepareForSegue:sender方法中的参数。每个连接的StoryboardSegue都必须以目标ViewController的原始类名命名,例如

Target UIViewController Class           Segue Name
SCComposeMessageController      ->      SCComposeMessageControllerSegue
SCPhotoViewerController         ->      SCPhotoViewerControllerSegue
SCVideoPlayerController         ->      SCVideoPlayerControllerSegue
SCLocationViewerController      ->      SCLocationViewerControllerSegue

除了这个命名约定之外,开发者还需要在他的prepareForSegue:sender方法中调用customPrepareForSegue:sender。

-(void) prepareForSegue:(UIStoryboardSegue*) segue sender:(id) sender {
    [self customPrepareForSegue:segue sender:sender];
    // Do your own setup 
}

覆盖此UIViewController类别的所有 ViewController也可以不通过StoryboardSegue进行展示。在这种情况下,组件将从MainStoryboard实例化,如果在那里找不到,则从SCStoryboard中实例化。如果当前ViewController嵌套在UINavigationController中,则将推送组件,如果不嵌套则模态展示。我们建议使用ForSegue来对这种行为拥有完全控制。

使用SCDataManager通过SCDataManager访问C2Call CoreData对象

SCDataManager提供了对C2Call SDK处理的CoreData数据库的低级别API访问。数据库模式可在以下位置获得:SocialCommunication.ressources/C2CallDataModel.xcdatamodeld

在此数据模型中,所有相关实体都是NSManagedObject的子类,便于访问实体属性。以下是由C2Call SDK定义的NSManagedObject子类:

- MOChatHistory 
- MOC2CallUser 
- MOCallHistory 
- MOC2CallEvent 
- MOOpenId
- MOAddress
- MOPhoneNumber 
- MOGroupMember 
- MOC2CallGroup

C2Call SDK GUI组件基于CoreData。对所有CoreData对象的访问和对数据库的所有查询都必须在主线程中进行。SCDataManager封装了对CoreData数据库层的访问,并确保所有请求都在主线程中执行。

使用SCUserProfile类访问用户配置文件

SCUserProfile类提供了以下属性来访问当前用户的配置文件:

displayname *property*
userid *property*
email *property*
didnumber *property*
callerid *property* 
isCalleridVerified *property* 
credit *property*
firstname *property* 
lastname *property* 
country *property* 
phoneWork *property* 
phoneHome *property* 
phoneMobile *property* 
phoneOther *property*
– saveUserProfile 
+ currentUser

使用C2Call SDK GUI组件

所有C2Call SDK组件作为SocialCommunication资源的一部分提供在SCStoryboard.storyboard文件中。

C2Call SDK旨在提供易于使用、功能齐全且可高度自定义的组件,以便于开发者使用。可以通过以下步骤自定义GUI组件:

  1. 将所需GUI组件以及所有连接的组件从SCStoryboard复制到您的主Storyboard中。
  2. 根据需要更改GUI组件的设计,移除不需要的按钮、图像或标签,并重新排列剩余的元素以满足您的需求。
  3. 可以通过对GUI组件的ViewController类进行子类化来添加额外的功能。添加特定的函数或方法,将GUI组件的类名改为您的子类,并添加所有必需的连接。C2Call子系统将使用instantiateViewControllerWithIdentifier:方法在事件中展示几个组件。为了确保始终显示特定GUI组件的自定义版本,C2Call子系统首先将在主Storyboard中寻找GUI组件的名称,如果没有找到,将从SCStoryboard中实例化。

由于这些组件是通过名称找到的,因此即使组件将会进行子类化,也重要的是保持Storyboard名称。一个典型的事件触发组件示例是SCCallStatusController和SCInboundCallController。

在iOS Storyboard中从一个ViewController到另一个ViewController的过渡通常通过StoryboardSegue来完成。在SCStoryboard中,所有提供到其他ViewController的过渡的ViewController都通过StoryboardSegues相连。因此,当从SCStoryboard复制组件到主Storyboard时,所有连接的组件也应该被复制。

一些连接的组件接收参数,这些参数通过prepareForSegue:sender:方法自动传输。正确的StoryboardSegue也会通过其名称来识别。为了方便正确命名StoryboardSegue,我们为在C2Call SDK中使用的所有StoryboardSegue创建了一个命名约定。简单的规则是,StoryboardSegue的名称必须是目标ViewController类名(始终是原始C2Call SDK ViewController类名)加上后缀"Segue"。

例如,当在好友项上点击时,SCFriendListController将过渡到SCFriendDetailController。因此,SCFriendListController将performSegueWithIdentifier:@"SCFriendDetailControllerSegue"

在方法[self prepareForSegue:(StoryboardSegue*) segue sender:(id) sender]中,将在呈现SCFriendDetailController之前将该好友的userid设置为SCFriendDetailController。如果自定义后某个方面未按预期工作,请仔细检查Segue名称、子类化ViewController的类名和组件的Storyboard ID。

代码片段

以下是一些用于C2Call SDK中典型功能的实用代码片段:

启动对一个数字电话号码的呼叫

[[C2CallPhone currentPhone] callNumber:@"+1408234123456"];

启动对一个Userid的呼叫

[[C2CallPhone currentPhone] callVoIP:@"9bc2858f1194dc1c107"];

启动到一个电子邮件地址的视频通话

[[C2CallPhone currentPhone] callVideo:@"[email protected]"];

发送SMS/文本消息

[[C2CallPhone currentPhone] submitMessage:@"Hi, this is an SMS" toNumber:@"+1408234123456"];

发送从相机获取的照片

#import <SocialCommunication/UIViewController+SCCustomViewController.h> 

...skip...

[self captureImageFromCameraWithQuality:UIImagePickerControllerQualityTypeMedium andCompleteAction:^(NSString *key) { 
    [[C2CallPhone currentPhone] submitRichMessage:key message:@"Hi, see my photo..." toTarget:@"[email protected]"];
}];

接收信息

// Overwrite your AppDelegate Method 
-(void) message:(DDXMLElement *)msg {
    NSString *text = [[msg elementForName:@"Description"] stringValue]; 
    NSString *userid = [[msg elementForName:@"Contact"] stringValue];
    NSString *remoteParty = [[C2CallPhone currentPhone] nameForUserid:userid];
    // Handle the message here 
}

// Identify the message type (text, video, photo, etc
SCRichMediaType mt = [[C2CallPhone currentPhone] mediaTypeForKey:message]; 
if (mt == SCMEDIATYPE_TEXT) {
    // Handle the text message here 
}

if (mt == SCMEDIATYPE_IMAGE) {
    // Handle the photo here
    // --> See Download an attachment
}

// Download an attachment
// Check if attachment is already downloaded
if (![[C2CallPhone currentPhone] hasObjectForKey:message]) {
    // Start download
    [[C2CallPhone currentPhone] retrieveObjectForKey:message completion:^(BOOL finished) {
        // Do this on Main-Thread
        dispatch_async(dispatch_get_main_queue(), ^{ 
            UIImage *thumb = [[C2CallPhone currentPhone] thumbnailForKey:message];
            if (thumb) {
                // Present the thumbnail
            }
            UIImage *photo = [[C2CallPhone currentPhone] imageForKey:message];
            if (photo) {
                // Present the photo here
            } 
        });
    }]; 
}

自定义聊天气泡

[[SCBubbleViewOut appearance] setBaseColor:[UIColor colorWithRed:70./255. green:188./255. blue:255./255. alpha:0.69]];
[[SCBubbleViewIn appearance] setBaseColor:[UIColor colorWithRed:115./255. green:223./255. blue:81./255. alpha:0.69]];

[[SCBubbleViewIn appearance] setBubbleTypeIn:SC_BUBBLE_IN_WHAZZUPP]; 
[[SCBubbleViewOut appearance] setBubbleTypeOut:SC_BUBBLE_OUT_WHAZZUPP];

其他支持的框架

C2Call-SDK 内置了对其他框架的支持,例如 Facebook SDK 和 GPUImage,以使用视频通话中的特定功能(如 Facebook 登录或 GPUImage 过滤器)。然而,这些框架与 C2Call-SDK 弱关联,没有直接依赖定义。为了使用这些功能(Facebook 登录/ GPUImage 过滤器),只需在 Podfile 中手动添加以下库

Facebook SDK

pod 'FBSDKCoreKit', '~> 4.9.0'
pod 'FBSDKLoginKit', '~> 4.9.0'

GPUImage SDK

pod 'GPUImage', '~> 0.1.7'

请访问我们的论坛寻求支持或反馈。

安装

C2Call-SDK 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行

pod "C2Call-SDK"

作者

德国 C2Call GmbH
Michael Knecht, [email protected]

许可

C2Call-SDK 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。