企业内部开发
小程序
基础
连接微信
办公
WECOM-JSSDK
JS-SDK
基础
连接微信
办公
企业内部开发
客户端API
移动端SDK
企业微信分享
iOS应用
iOS应用
最后更新:2023/08/08

目录

  • iOS接入指南
  •       创建应用
  •       下载企业微信终端SDK文件
  •       搭建开发环境
  •       在代码中使用SDK进行初始化注册
  •       分享SDK使用
  • iOS接入指南

    接入说明:
    任何需要调用企业微信API的应用,都需要先在企业微信管理后台创建一个应用,设置完成后,即可使用对应的功能。

    创建应用

    1. 管理员登录企业微信管理后台,选择企业应用
    2. 选择已有应用或添加应用,进入应用详情页面。
    3. 选择“企业微信授权登录”,在设置界面填写iOS App的Bundleid,设置完成后系统自动生成应用程序schema
      企业微信分享的设置,复用企业微信授权登录的设置,设置以后登录、分享任何一个都可以使用。

    下载企业微信终端SDK文件

    SDK文件包括 libWXWorkApi.a,WWKApi.h,WWKApiObject.h 三个。
    请前往 资源下载 下载最新SDK包sdk.zip

    SDK名称:企业微信登录/分享SDK
    版本号: 0.16
    主要功能:通过企业微信登录/分享SDK,企业可在自建的app引入sdk,从而可使用企业微信账号登录app,并且在app中分享消息到企业微信。
    使用说明:详见本接入指南
    开发者:深圳市腾讯计算机系统有限公司
    隐私政策:请接入企业微信登录/分享 SDK的开发者,认真阅读《企业微信登录/分享SDK个人信息保护规则》,并确保对企业微信登录/分享SDK的接入使用情况符合上述规则的相关要求。

    下载包包含4个文件,其名称和含义分别是:
    WWKApi.h 定义SDK接口的头文件
    WWKObject.h 定义SDK接口用来进行参数传递的对象
    libWXWorkApi.a 第三方工程需要引用的SDK静态库文件
    demo.tar.gz 一个供参考的企业微信iOS端SDK使用的示例工程,这个工程介绍了当前版本SDK提供的所有接口的使用方法

    搭建开发环境

    1. 在XCode中建立你的工程。
    2. 将SDK文件中包含的 libWXWorkApi.aWXApi.hWXApiObject.h 三个文件添加到你所建的工程中。具体实现可参考 资源下载 页面中提供的SDK Sample Demo工程(下载sdk.zip压缩包后,解压其中的demo.tar.gz即为一个供参考的企业微信iOS端SDK使用的示例工程,这个工程介绍了当前版本SDK提供的所有接口的使用方法)。
    3. 在你的工程文件中选中Search Paths,并添加 libWeChatSDK.aWXApi.hWXApiObject.h,文件所在位置。
    4. 在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”,其内容为你所注册的应用程序将获得应用程序IDschema
    5. 在你需要使用企业微信终端API的文件中 import WWKApi.h 并增加 WXApiDelegate 协议。
    #import "AppDelegate.h"
    #import "WWKApi.h"
    
    @interface AppDelegate () <WWKApiDelegate>
    
    @end
    
    @implementation AppDelegate
    
    @end

    在代码中使用SDK进行初始化注册

    1. 要使你的程序启动后企业微信终端能响应你的程序,必须在代码中向企业微信终端注册你的schema。(如下面代码所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向企业微信注册id)。
      参数说明
      registerApp : 必填字段 用户填写第三方应用Bundleid完成上述注册流程后,系统根据corpId(企业ID 见下描述)与agentId(应用ID 见下描述)计算得到的一个schema字符串。用于企业微信完成SSO登录流程后回调返回用户的第三方应用
      corpId: 必填字段 用户登录企业管理页面的时候在 “我的企业” 页面会得到一个corpId,这个corpid即为需要填在这里的企业ID
      agentId: 必填字段 当用户为自己企业新加一个第三方iOS应用的时候,系统会为每个iOS应用分配不同的企业内部唯一的应用ID
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        /*! @brief 调用这个方法前需要先到管理端进行注册 走管理端的注册方式
         *
         * 在管理端通过注册(可能需要等待审批),获得schema+corpid+agentid
         * @param registerApp 第三方App的Schema
         * @param corpId 第三方App所属企业的ID
         * @param agentId 第三方App在企业内部的ID
         */
        [WWKApi registerApp:@"wwauth700000a5f2191000014" corpId:@"ww700000a5f2191" agentId:@"1000014"];
        return YES;
    }

    2.重写AppDelegate的handleOpenURL和openURL方法,第三方iOS App需要在这两个方法中调用SDK的handleOpenURL接口方法,让SDK有机会在第三方App内部处理SSO结果返回给第三方iOS App后的后续处理工作

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation {
        return [self handleOpenURL:url sourceApplication:sourceApplication];
    }
    
    - (BOOL)handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication {
        return [WWKApi handleOpenURL:url delegate:self];
    }

    3.现在,你的程序要实现和企业微信终端交互的具体请求与回应,因此需要实现WWKApiDelegate协议的两个方法。第三方iOS App可以根据自身需求实现这两个方法

    // 如果第三方程序向企业微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到企业微信终端程序界面。
    - (void)onResp:(WWKBaseResp *)resp {
    }
    // onReq是企业微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到企业微信终端程序界面。
    -(void) onReq:(WWKBaseReq*)req {
    }

    具体在此两方法中所要完成的内容由你定义,具体可参考企业微信开发工具包中的SDK Sample Demo源码。

    分享SDK使用

    1. 分享文字到企业微信
      WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
      WWKMessageTextAttachment *attachment = [[WWKMessageTextAttachment alloc] init];
      attachment.text = @"惊天魔盗团2 / 三人行 / 独立日2 IMAX特惠票来袭,仅需40元不补差看巨幕3D影片,全城最低,等你来团"; // 示例用文字,请填写你想分享的实际文字内容
      req.attachment = attachment;
      [WWKApi sendReq:req];
    2. 分享文件到企业微信
      WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
      WWKMessageFileAttachment *attachment = [[WWKMessageFileAttachment alloc] init];
      // 示例用文件,请填写你想分享的实际文件路径和名称
      attachment.filename = @"Download.pdf";
      attachment.path = [[NSBundle mainBundle] pathForResource:@"About Downloads" ofType:@"pdf"];
      req.attachment = attachment;
      [WWKApi sendReq:req];
    3. 分享图片
      WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
      WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
      // 示例用图片,请填写你想分享的实际图片路径和名称
      attachment.filename = @"test.gif";
      attachment.path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
      req.attachment = attachment;
      [WWKApi sendReq:req];
    4. 分享小视频
      WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
      WWKMessageVideoAttachment *attachment = [[WWKMessageVideoAttachment alloc] init];
      // 示例用小视频,请填写你想分享的实际小视频路径和名称
      attachment.filename = @"video.mp4";
      attachment.path = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];
      req.attachment = attachment;
      [WWKApi sendReq:req];
    5. 分享链接
      WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
      WWKMessageLinkAttachment *attachment = [[WWKMessageLinkAttachment alloc] init];
      // 示例用链接,请填写你想分享的实际链接的标题、介绍、图标和URL
      attachment.title = @"链接标题";
      attachment.summary = @"链接介绍";
      attachment.url = @"http://www.tencent.com";
      attachment.icon = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
      req.attachment = attachment;
      [WWKApi sendReq:req];
    6. 转发聊天记录
          WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
          WWKMessageGroupAttachment *attachment = [[WWKMessageGroupAttachment alloc] init];
          attachment.title = @"XXX的聊天记录";
          NSMutableArray *array = [NSMutableArray array];
          // 需要转发的内容可以通过addObject进行添加
          // 可以一次性的添加不同类型的聊天记录
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小明";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-1000];
              wrapper.avatarUrl = @"http://p.qlogo.cn/bizmail/BDHWBviaRjEgxSn7E5dBwXMM0bibQVVFXe6C6dhtAdsGMu7vL7AuNpIQ/100";
              wrapper.attachment = ({
                  WWKMessageTextAttachment *text = [[WWKMessageTextAttachment alloc] init];
                  text.text = @"关注你我健康";
                  text;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小明";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-950];
              wrapper.avatarUrl = @"http://p.qlogo.cn/bizmail/BDHWBviaRjEgxSn7E5dBwXMM0bibQVVFXe6C6dhtAdsGMu7vL7AuNpIQ/100";
              wrapper.attachment = ({
                  WWKMessageImageAttachment *image = [[WWKMessageImageAttachment alloc] init];
                  image.filename = @"test.gif";
                  image.path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
                  image;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小明";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-930];
              wrapper.avatarUrl = @"http://p.qlogo.cn/bizmail/BDHWBviaRjEgxSn7E5dBwXMM0bibQVVFXe6C6dhtAdsGMu7vL7AuNpIQ/100";
              wrapper.attachment = ({
                  WWKMessageLocationAttachment *loc = [[WWKMessageLocationAttachment alloc] init];
                  loc.title = @"T.I.T创意园";
                  loc.address = @"广东省广州市海珠区新港中路397号";
                  loc.lat = 23.098837;
                  loc.lng = 113.325119;
                  loc;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小码";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-900];
              wrapper.avatarData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
              wrapper.attachment = ({
                  WWKMessageTextAttachment *text = [[WWKMessageTextAttachment alloc] init];
                  text.text = @"学车找我不愁";
                  text;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小码";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-850];
              wrapper.avatarData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
              wrapper.attachment = ({
                  WWKMessageFileAttachment *file = [[WWKMessageFileAttachment alloc] init];
                  file.filename = @"Download.pdf";
                  file.path = [[NSBundle mainBundle] pathForResource:@"About Downloads" ofType:@"pdf"];
                  file;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小码";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-850];
              wrapper.avatarData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
              wrapper.attachment = ({
                  WWKMessageVideoAttachment *video = [[WWKMessageVideoAttachment alloc] init];
                  video.filename = @"video.mp4";
                  video.path = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];
                  video;
              });
              wrapper;
          })];
          
          [array addObject:({
              WWKMessageAttachmentWrapper *wrapper = [[WWKMessageAttachmentWrapper alloc] init];
              wrapper.name = @"小码";
              wrapper.date = [[NSDate date] dateByAddingTimeInterval:-800];
              wrapper.avatarData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
              wrapper.attachment = ({
                  WWKMessageLinkAttachment *link = [[WWKMessageLinkAttachment alloc] init];
                  link.title = @"链接标题";
                  link.summary = @"链接介绍";
                  link.url = @"http://www.tencent.com";
                  link.icon = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"]];
                  link;
              });
              wrapper;
          })];
          
          attachment.contents = array;
          req.attachment = attachment;
          [WWKApi sendReq:req];

    7. 分享小程序
    WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
    WWKMessageMiniAppAttachment *attachment = [[WWKMessageMiniAppAttachment alloc] init];
    // 示例用小程序,请填写应用关联的小程序username、路径和图片以及标题
    attachment.userName = @"gh_xxxxxxxxxxxx@app"; //必须是应用关联的小程序,注意要有@app后缀
    attachment.path = @"pages/index/index.html";
    attachment.hdImageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]], 1.0f);
    attachment.title = @"分享标题";
    req.attachment = attachment;        
    [WWKApi sendReq:req];
    
    上一篇Android应用
    下一篇Android应用
      本节内容
    服务端API
    基础
    连接微信
    办公
    会议
    会议统计管理
    客户端API
    小程序
    基础
    连接微信
    办公
    WECOM-JSSDK
    JS-SDK
    基础
    连接微信
    办公
    更新日志
    联系我们