云信平臺設置:
1搁骑、登錄云信平臺斧吐,開通信令和音視頻通話(試用)。
2仲器、測試階段煤率,建議將鑒權方式設置成調試模式。
1)點進功能配置乏冀,修改鑒權方式蝶糯。
2)選擇“調試模式”,無需NERTC Token驗證辆沦,可以幫助我們更快的集成rtc功能昼捍。
3、語音呼叫時肢扯,會用到aps推送功能妒茬,因此平臺需要我們上傳推送證書。這里以上傳p12為例鹃彻,p12證書的產生郊闯,可以參考我的另一篇帖子:aps推送證書申請流程。
1)點擊證書管理蛛株,上傳推送證書。
2)點擊“添加證書”育拨,填寫各項內容谨履。已添加的證書,會在列表中顯示熬丧。
4笋粟、此外,我們還需要兩個測試賬號,進行音視頻通話害捕。
1)點擊“API調試”绿淋,通過API調試,創(chuàng)建兩個測試賬號尝盼。
2)隨意輸入accid和token吞滞,創(chuàng)建成功會返回200,保存創(chuàng)建成功的accid和token備用盾沫。
代碼集成:
1裁赠、編寫Podfile文件,因為筆者需要修改UI較多赴精,故使用本地依賴佩捞。您可以依照自己的需求設置。
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'YXDemo2' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
#登錄組件
pod 'YXLogin', '1.0.0'
#可選UI庫
# pod 'NEContactUIKit', '9.4.0'
# pod 'NEConversationUIKit', '9.4.0'
# pod 'NEChatUIKit', '9.4.0'
# pod 'NETeamUIKit', '9.4.0'
#可選Kit庫(和UIKit對應)
pod 'NEContactKit', '9.4.0'
pod 'NEConversationKit', '9.4.0'
pod 'NEChatKit', '9.4.0'
pod 'NETeamKit', '9.4.0'
#基礎kit庫
pod 'NECommonUIKit', '9.4.0'
pod 'NECommonKit', '9.4.0'
pod 'NECoreIMKit', '9.4.0'
pod 'NECoreKit', '9.4.0'
#擴展庫
# pod 'NEMapKit', '9.4.0'
#呼叫組件蕾哟,音視頻通話能力一忱,需要開通 音視頻2.0,可選谭确,聊天一面會根據依賴初始化自動顯示音視頻通話入口
# pod 'NERtcCallUIKit', '1.8.2'
pod 'NERtcCallKit', '1.8.2'
pod 'NERtcSDK', '4.6.29'
# 如果需要查看UI部分源碼請注釋掉以上在線依賴掀潮,打開下面的本地依賴
pod 'NEContactUIKit', :path => 'NEContactUIKit/NEContactUIKit.podspec'
pod 'NEConversationUIKit', :path => 'NEConversationUIKit/NEConversationUIKit.podspec'
pod 'NETeamUIKit', :path => 'NETeamUIKit/NETeamUIKit.podspec'
pod 'NEChatUIKit', :path => 'NEChatUIKit/NEChatUIKit.podspec'
pod 'NEMapKit', :path => 'NEMapKit/NEMapKit.podspec'
pod 'NERtcCallUIKit', :path => 'NERtcCallUIKit/NERtcCallUIKit.podspec'
end
#fix bug in Xcode 14
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'RSKPlaceholderTextView'
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
end
#??如果pod依賴報錯,可打開以下注釋
#post_install do |installer|
# installer.pods_project.targets.each do |target|
# target.build_configurations.each do |config|
# config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
# end
# end
#end
2琼富、將官方demo里的UI源碼庫仪吧,拷貝到項目根目錄。
3鞠眉、執(zhí)行pod update薯鼠,首次安裝可能需要多次install才能成功。
4械蹋、進行初始化操作出皇。
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[IMManager shared] initIM];
ViewController *vc = [[ViewController alloc]init];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
return YES;
}
static let shared = IMManager()
let account = "10086"
let token = "a9efaa4d25ac531536bfba0a0bee54b5"
func initIM() {
// init
let option = NIMSDKOption()
option.appKey = "您的appKey"
option.apnsCername = pushCerName
IMKitClient.instance.setupCoreKitIM(option)
relogin()
//添加登錄狀態(tài)監(jiān)聽
NIMSDK.shared().loginManager.add(self)
//添加IM接受監(jiān)聽
NIMSDK.shared().chatManager.add(self)
NEKeyboardManager.shared.enable = true
NEKeyboardManager.shared.shouldResignOnTouchOutside = true
setupCall()
}
func relogin() {
NIMSDK.shared().loginManager.login(account, token: token) { error in
print("IM loginManager,登錄成功")
}
}
//MARK: 呼叫
func setupCall() {
//呼叫組件初始化
let option = NERtcCallOptions()
option.apnsCerName = pushCerName
option.isDisableLog = true
let uiConfig = NERtcCallUIConfig()
uiConfig.option = option
uiConfig.appKey = kAppKey
uiConfig.uiConfig.showCallingSwitchCallType = option.supportAutoJoinWhenCalled
NERtcCallKit.sharedInstance().timeOutSeconds = 30
NERtcCallUIKit.sharedInstance().setup(with: uiConfig)
}
5哗戈、注冊推送郊艘,實現代理。
func registerAPNS(){
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.badge, .sound, .alert]) { grant, error in
if grant == false {
DispatchQueue.main.async {
UIApplication.shared.keyWindow?.makeToast(NSLocalizedString("open_push", comment: ""))
}
}
}
} else {
let setting = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)
UIApplication.shared.registerUserNotificationSettings(setting)
}
UIApplication.shared.registerForRemoteNotifications()
UIApplication.shared.applicationIconBadgeNumber = 0
}
func applicationWillEnterForeground(_ application: UIApplication) {
UIApplication.shared.applicationIconBadgeNumber = 0
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
NIMSDK.shared().updateApnsToken(deviceToken)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
NELog.infoLog("app delegate : ", desc: error.localizedDescription)
}
Xcode設置:
1唯咬、為項目添加推送能力纱注。
2、配置攝像頭和麥克風隱私權限胆胰。
Privacy - Camera Usage Description
——需要您的同意狞贱,才能使用攝像頭,以便于相機拍攝蜀涨,上傳瞎嬉、發(fā)布照片
Privacy - Microphone Usage Description
——需要您的同意蝎毡,才能使用麥克風,以便于視頻錄制氧枣、語音識別沐兵、語音聊天
3、填寫B(tài)undle ID便监,設置好證書扎谎,連接真機運行,跑通項目茬贵。
4簿透、在兩部手機上,分別使用上文創(chuàng)建好的兩個測試賬號運行解藻,跳到聊天頁面老充,就可以發(fā)起音視頻通話了。