• Apple Watch 集成环信SDK


    本文简单的讲述下怎样用Apple Watch Kit集成环信SDK.

    升级xcode到version 6.2,和 IOS SDK8.2

    下载环信SDK从官网

    打开XCode->new project->new target->选择WatchKit App


    xcode 会自己主动给你创建几个targets,比例如以下图:


    把EaseMobSDK目录拖拽到HxAppleWatchDemo Target里


    选择target HXAppleWatchDemo,增加下图全部的Linked Frameworks and Libraries里的库文件


    在HXAppleWatchDemo target 创建bridging header文件


    设置bridging header文件


    设置other linker flags 以保证SDK Lib category的扩展方法可用


    全部环境设置都已完毕,试着build下看又啥问题么

    開始写代码:

    1. 打开HXAppleWatchDemo WatchKit App 里的interface.storyboard然后加个button 叫load contacts


    2. 找到HXAppleWatchDemo WatchKit Extension里的文件InterfaceController.swift,然后把上述的button关联到

    @IBOutlet weakvar open:WKInterfaceButton!

    InterfaceController.swift代码例如以下

    //
    //  InterfaceController.swift
    //  HXAppleWatchDemo WatchKit Extension
    //
    //  Created by youni on 15/4/1.
    //  Copyright (c) 2015年 youni. All rights reserved.
    //
    
    import WatchKit
    import Foundation
    
    
    class InterfaceController: WKInterfaceController {
    
        @IBOutlet weak var open: WKInterfaceButton!
        
        @IBAction func openApp() {
            InterfaceController.openParentApplication(["action":"getcontact"], reply: {(info:[NSObject : AnyObject]!, error:NSError!) -> Void in
                if info != nil{
                    if info.count > 0{
                        self.getContacts(info!["contacts"] as [String])
                    }
                }
            })
        }
        
        func getContacts(contacts:[String]){
            presentTextInputControllerWithSuggestions(contacts, allowedInputMode: WKTextInputMode.Plain, completion: {(result:[AnyObject]!)-> Void in
                if result != nil{
                    var id:String = result[0] as String
                    var date:NSDate = NSDate()
                    var now:NSTimeInterval = date.timeIntervalSinceNow
                    
                    self.sendMessage(id,text: now.description)
                }
                }
            )
        }
        
        func sendMessage(id:String,text:String){
            InterfaceController.openParentApplication(["action":"send","name":id,"message":text], reply: {(info:[NSObject : AnyObject]!, error:NSError!) -> Void in
                
            })
        }
        
        override func awakeWithContext(context: AnyObject?) {
            super.awakeWithContext(context)
            
            // Configure interface objects here.
        }
    
        override func willActivate() {
            // This method is called when watch view controller is about to be visible to user
            super.willActivate()
        }
    
        override func didDeactivate() {
            // This method is called when watch view controller is no longer visible
            super.didDeactivate()
        }
    
    }
    

    InterfaceController.openParentApplication是用来和IOS的程序通讯的接口,大部分的业务逻辑须要在parent application实现也就是上述说的HXAppleWatchDemo Target

    我们看下HXAppleWatchDemo是怎样实现和Apple Watch App通讯的

    //
    //  AppDelegate.swift
    //  HXAppleWatchDemo
    //
    //  Created by youni on 15/4/1.
    //  Copyright (c) 2015年 youni. All rights reserved.
    //
    
    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate,IChatManagerDelegate{
    
        var window: UIWindow?
    
        var callback:(([NSObject : AnyObject]!) -> Void)!
    
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.
            let apnsCertName:String = "chatdemoui";
            
            EaseMob.sharedInstance().registerSDKWithAppKey("easemob-demo#chatdemoui", apnsCertName: apnsCertName)
            
            EaseMob.sharedInstance().chatManager.addDelegate(self, delegateQueue: nil)
            
            EaseMob.sharedInstance().chatManager.asyncLoginWithUsername("tt1", password: "1", completion: { (loginInfo,error) -> Void in
                
                NSLog("login callback : ")
                
                HXSDKHelper.instance.sendTextMessage("uni3", textMessge:"test from")
                }, onQueue: nil)
    
            return true
        }
    
        func applicationWillResignActive(application: UIApplication) {
            // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
            // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
        }
    
        func applicationDidEnterBackground(application: UIApplication) {
            // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
            // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
        }
    
        func applicationWillEnterForeground(application: UIApplication) {
            // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
        }
    
        func applicationDidBecomeActive(application: UIApplication) {
            // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        }
    
        func applicationWillTerminate(application: UIApplication) {
            // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
        }
    
        func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
            
            if(userInfo != nil){
                if userInfo!["action"] != nil{
                    var action:String = userInfo!["action"] as String
                    
                    if action == "getcontact"{
                        reply!(["contacts":["uni3","uni5","tt2"]])
                    }else if action == "send"{
                        var name:String = userInfo!["name"] as String
                        var message:String = userInfo!["message"] as String
                        NSLog("name : " + name + "message : " + message)
                        HXSDKHelper.instance.sendTextMessage(name, textMessge:message)
                        callback = reply
                    }
                }
            }
        }
    
        func didSendMessage(message: EMMessage!, error: EMError!) {
            if(error != nil){
                callback!(["send":error!.errorCode.value])
            }else{
                callback!(["send":"ok"])
            }
        }
        
        func didReceiveMessage(message: EMMessage!) {
            
        }
    }
    这个就是和Apple WatchKit App实现通讯的接口:
    func application(application: UIApplication!, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]!, reply: (([NSObject : AnyObject]!) -> Void)!) {
            
            if(userInfo != nil){
                if userInfo!["action"] != nil{
                    var action:String = userInfo!["action"] as String
                    
                    if action == "getcontact"{
                        reply!(["contacts":["uni3","uni5","tt2"]])
                    }else if action == "send"{
                        var name:String = userInfo!["name"] as String
                        var message:String = userInfo!["message"] as String
                        NSLog("name : " + name + "message : " + message)
                        HXSDKHelper.instance.sendTextMessage(name, textMessge:message)
                        callback = reply
                    }
                }
            }
        }

    HXSDKHelper就是对环信一个简单的封装,如今里面仅仅实现了一个函数

    //
    //  HXSDKHelper.swift
    //  swittest
    //
    //  Created by youni on 15/3/15.
    //  Copyright (c) 2015年 youni. All rights reserved.
    //
    
    import Foundation
    
    private var gInstance = HXSDKHelper()
    
    class HXSDKHelper : NSObject{
        class var instance:HXSDKHelper{
            return gInstance
        }
    
        func sendTextMessage(to : String, textMessge : String){
            var latestMessage:EMMessage = EMMessage()
            var chatText:EMChatText = EMChatText(text: textMessge)
            var txtBody:EMTextMessageBody = EMTextMessageBody(chatObject: chatText)
            
            latestMessage.addMessageBody(txtBody);
            latestMessage.to = to;
            EaseMob.sharedInstance().chatManager.asyncSendMessage(latestMessage, progress: nil);
        }
    }

    大功告成。完毕以上步骤,你就行做个简单的Watch App 可以用环信的SDK发消息了。

    因为没有真机,以上都是在模拟器上測试通过。

    假设须要project代码请联系我:syyorient@outlook.com

    或者从github上获取

    https://github.com/youniworld/AppleWatchDemo-HuanXin


  • 相关阅读:
    202006leetcode刷题记录
    二分查找详解
    并查集
    202005leetcode刷题记录
    基于地震数据的Spark数据处理与分析
    Java日志框架:logback详解
    java 多线程
    Oracle表恢复(truncate)
    关于软件开发,你老板不知道的7件事
    调用oracle 分页存储过程 返回游标数据集
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6978330.html
Copyright © 2020-2023  润新知