iOS微信分享

3年来第一次更新这篇老文章,蟹蟹大家的支持。

此文以简单实现功能为主,不足之前还望指点,大神勿喷.
在此之前如何申请微信认证的Key就不说了,公司一般会有人搞(自己申请一个也非常的简单)

1.现在微信SDK支持手动导入和cocoapods啦
  • 手动导入:下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方网站:微信官方接入文档)
  • cocoapods安装:pod 'WechatOpenSDK'
    微信的文档写的还是非常不错的,跟隔壁的QQ比简直好太多了,忍不住想吐槽一下。
    接下来我们以cocoapods导入为例进行
2.桥接微信SDK

微信SDK是OC版的,用Swift的工程去调用肯定是要混编的嘛,混编具体教程
在桥接文件中引入WXApi.h

1
2
3
4
#ifndef OC_Bridging_Header_h
#define OC_Bridging_Header_h
#import "WXApi.h"
#endif /* OC_Bridging_Header_h */
3.添加URL Scheme

iOS跳转到其他APP使用的是URL Scheme,在iOS9开始加入了白名单功能,需要把要跳转的APP的URL Scheme加入到当前工程的跳转白名单中。详细了解可以看iOS URL Scheme

在工程info.plist中新增或添加微信Schemes

并在下方URL Types添加微信Identifier

另外还需要判断当前机器中没有安装微信
可以使用WXApi.isWXAppInstalled()方法来判断当前机器是否安装了微信,从而做出相应操作

4.使用SDK注册你的APP
  • 建议在AppDelegatedidfinish方法中注册,导入import "WXApi.h"
    1
    2
    3
    4
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    //微信注册
    WXApi.registerApp(wxID)
5.创建发送体并向微信发送分享信息
  • 首先我们来看看发送对象的类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #pragma mark - SendMessageToWXReq
    /*! @brief 第三方程序发送消息至微信终端程序的消息结构体
    *
    * 第三方程序向微信发送信息需要传入SendMessageToWXReq结构体,信息类型包括文本消息和多媒体消息,
    * 分别对应于text和message成员。调用该方法后,微信处理完信息会向第三方程序发送一个处理结果。
    * @see SendMessageToWXResp
    */
    @interface SendMessageToWXReq : BaseReq
    /** 发送消息的文本内容
    * @note 文本长度必须大于0且小于10K
    */
    @property (nonatomic, retain) NSString* text;
    /** 发送消息的多媒体内容
    * @see WXMediaMessage
    */
    @property (nonatomic, retain) WXMediaMessage* message;
    /** 发送消息的类型,包括文本消息和多媒体消息两种,两者只能选择其一,不能同时发送文本和多媒体消息 */
    @property (nonatomic, assign) BOOL bText;
    /** 发送的目标场景,可以选择发送到会话(WXSceneSession)或者朋友圈(WXSceneTimeline)。 默认发送到会话。
    * @see WXScene
    */
    @property (nonatomic, assign) int scene;
    /** 指定发送消息的人,WXSceneSpecifiedSession时有效 */
    @property (nonatomic, retain) NSString* toUserOpenId;
    @end

通过该类得知,可以发送文本信息和多媒体信息两者选一,多媒体信息可分为链接类,视频类,音乐类,这里以链接类为例,实例化发送此对象

  • 实例化发送对象
1
2
3
let kLinkURL = "http://tech.qq.com/zt2012/tmtdecode/252.htm";
let kLinkTitle = "专访张小龙:产品之上的世界观";
let kLinkDescription = "微信的平台化发展方向是否真的会让这个原本简洁的产品变得臃肿?在国际化发展方向上,微信面临的问题真的是文化差异壁垒吗?腾讯高级副总裁、微信产品负责人张小龙给出了自己的回复。";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//创建请求体
let sendReq = SendMessageToWXReq()
sendReq.bText = false //true文本类型,false多媒体消息类型
sendReq.scene = 1 //0 好友,1 朋友圈, 2 收藏

//创建内容对象
let contentMessage = WXMediaMessage()
contentMessage.title = kLinkTitle
contentMessage.description = kLinkDescription
contentMessage.setThumbImage(UIImage(named: "鱼泡网"))

//创建多媒体对象
let mediaObj = WXWebpageObject()
mediaObj.webpageUrl = kLinkURL

//完成请求对象包装
contentMessage.mediaObject = mediaObj
sendReq.message = contentMessage

//发送分享请求
WXApi.send(sendReq)

到这里应该是可以成功发起分享信息了,至于回调是否分享成功,微信官方做了一次调整,开发者已经不支持获取用户分享状态了。默认errCode永远都是0,errStr永远都是nil,没啥用了。

如有疑问或不足之处可以留言,觉得这篇文章对你有用,非常感谢你能赞一个喔~~