Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈。在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例。但由于提供的样例是使用Objective-C写的,所以这边我写了个Swift版的样例。


1,实现的功能
(1)可以发送各种类型的消息给好友,也可以分享到朋友圈
(2)发送的内容类型包括:纯文本,图片,链接,音乐,视频,gif表情,非gif表情,文件

2,效果图如下
  
  

3,注意事项:
(1)该样例必须连接手机进行真机调试
(2)还需要到微信开发平台注册应用id,下面代码里会用到(如果不注册,随便起个id来调试也没什么问题,就是收到消息下方会显示“未审核应用”)

4,详细步骤
(1)首先把微信SDK资源库拖入到项目中来(整个Resources文件夹)


(2)引入WXApi.h这个头文件


(3)编写代码


--- AppDelegate.swift ---

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
26
27
28
29
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // 注册app(这里随便取个名字)
        WXApi.registerApp("hangge_appid")
        return true
    }
    func applicationWillResignActive(application: UIApplication) {
    }
    func applicationDidEnterBackground(application: UIApplication) {
    }
    func applicationWillEnterForeground(application: UIApplication) {
    }
    func applicationDidBecomeActive(application: UIApplication) {
    }
    func applicationWillTerminate(application: UIApplication) {
    }
}


--- ViewController.swift ---

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import UIKit
class ViewController: UIViewController {
    //发送给好友还是朋友圈(默认好友)
    var _scene = WXSceneSession.value
     
    override func viewDidLoad() {
        super.viewDidLoad()
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
     
    //切换发送给好友还是朋友圈
    @IBAction func changeScene(sender: UISegmentedControl) {
        if sender.selectedSegmentIndex == 0 {
            _scene = WXSceneSession.value
        }else{
            _scene = WXSceneTimeline.value
        }
    }
     
    //发送纯文本
    @IBAction func sendTextContent(sender: AnyObject) {
        var req = SendMessageToWXReq()
        req.bText = true
        req.text = "hangge.com 做最好的开发者知识平台。"
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送图片
    @IBAction func sendImageContent(sender: AnyObject) {
        var message =  WXMediaMessage()
         
        //发送的图片
        var filePath =  NSBundle.mainBundle().pathForResource("image", ofType: "jpg")
        var image = UIImage(contentsOfFile:filePath!)
        var imageObject =  WXImageObject()
        imageObject.imageData = UIImagePNGRepresentation(image)
        message.mediaObject = imageObject
         
        //图片缩略图
        var width = 240.0 as CGFloat
        var height = width*image!.size.height/image!.size.width
        UIGraphicsBeginImageContext(CGSizeMake(width, height))
        image!.drawInRect(CGRectMake(0, 0, width, height))
        message.setThumbImage(UIGraphicsGetImageFromCurrentImageContext())
        UIGraphicsEndImageContext()
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送链接
    @IBAction func sendLinkContent(sender: AnyObject) {
        var message =  WXMediaMessage()
         
        message.title = "欢迎访问 hangge.com"
        message.description = "做最好的开发者知识平台。分享各种编程开发经验。"
        message.setThumbImage(UIImage(named:"apple.png"))
         
        var ext =  WXWebpageObject()
        ext.webpageUrl = "http://hangge.com"
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送音乐
    @IBAction func sendMusicContent(sender: AnyObject) {
        var message =  WXMediaMessage()
         
        message.title = "一无所有"
        message.description = "崔健"
        message.setThumbImage(UIImage(named:"apple.png"))
         
        var ext =  WXMusicObject()
        ext.musicUrl = "http://y.qq.com/i/song.html#p=7B22736F6E675F4E616D65223A22E4B880E697A0E68980E69C89222C22736F6E675F5761704C69766555524C223A22687474703A2F2F74736D7573696334382E74632E71712E636F6D2F586B30305156342F4141414130414141414E5430577532394D7A59344D7A63774D4C6735586A4C517747335A50676F47443864704151526643473444442F4E653765776B617A733D2F31303130333334372E6D34613F7569643D3233343734363930373526616D703B63743D3026616D703B636869643D30222C22736F6E675F5769666955524C223A22687474703A2F2F73747265616D31342E71716D757369632E71712E636F6D2F33303130333334372E6D7033222C226E657454797065223A2277696669222C22736F6E675F416C62756D223A22E4B880E697A0E68980E69C89222C22736F6E675F4944223A3130333334372C22736F6E675F54797065223A312C22736F6E675F53696E676572223A22E5B494E581A5222C22736F6E675F576170446F776E4C6F616455524C223A22687474703A2F2F74736D757369633132382E74632E71712E636F6D2F586C464E4D313574414141416A41414141477A4C36445039536A457A525467304E7A38774E446E752B6473483833344843756B5041576B6D48316C4A434E626F4D34394E4E7A754450444A647A7A45304F513D3D2F33303130333334372E6D70333F7569643D3233343734363930373526616D703B63743D3026616D703B636869643D3026616D703B73747265616D5F706F733D35227D"
        ext.musicDataUrl = "http://stream20.qqmusic.qq.com/32464723.mp3"
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送视频
    @IBAction func sendVideoContent(sender: AnyObject) {
        var message =  WXMediaMessage()
        message.title = "乔布斯访谈"
        message.description = "饿着肚皮,傻逼着。"
        message.setThumbImage(UIImage(named:"apple.png"))
         
        var ext =  WXVideoObject()
        ext.videoUrl = "http://v.youku.com/v_show/id_XNTUxNDY1NDY4.html"
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送非gif格式的表情
    @IBAction func sendNonGifContent(sender: AnyObject) {
        var message =  WXMediaMessage()
        message.setThumbImage(UIImage(named:"res5thumb.png"))
         
        var ext =  WXEmoticonObject()
        var filePath = NSBundle.mainBundle().pathForResource("res5", ofType: "jpg")
        ext.emoticonData = NSData(contentsOfFile:filePath!)
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送gif格式的表情
    @IBAction func sendGifContent(sender: AnyObject) {
        var message =  WXMediaMessage()
        message.setThumbImage(UIImage(named:"res6thumb.png"))
         
        var ext =  WXEmoticonObject()
        var filePath = NSBundle.mainBundle().pathForResource("res6", ofType: "gif")
        ext.emoticonData = NSData(contentsOfFile:filePath!)
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
     
    //发送文件
    @IBAction func sendFileContent(sender: AnyObject) {
        var message =  WXMediaMessage()
        message.title = "ML.pdf"
        message.description = "Pro CoreData"
        message.setThumbImage(UIImage(named:"apple.png"))
         
        var ext =  WXFileObject()
        ext.fileExtension = "pdf"
        var filePath = NSBundle.mainBundle().pathForResource("ML", ofType: "pdf")
        ext.fileData = NSData(contentsOfFile:filePath!)
        message.mediaObject = ext
         
        var req =  SendMessageToWXReq()
        req.bText = false
        req.message = message
        req.scene = _scene
        WXApi.sendReq(req)
    }
}


5,源码下载:WeiXinShare.zip

转载于:https://www.cnblogs.com/Free-Thinker/p/4843326.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux怎么改程序图标,如何在Ubuntu Unity上修改应用程序图标

这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu 12.04 等使用Unity作为默认桌面环境的发行版。在Unity桌面环境,程序启动器实际上以.desktop为后缀的文件的形式存储在电脑上,所以我们可…

php 大流量网站访问

1:确认服务器硬件能否支持当前流量 2:数据库优化,用到什么字段查什么字段,减轻查询负担。 3:静态化,缓存,减少连库操作。 4:禁止外部盗链,减轻负载压力。 5:控…

linux内核 默认路由表,Linux 默认路由表 0.0.0.0

netstat -nr命令会显示路由表的内容。网关为0.0.0.0的网络通常是直连到网络设备上的。因为到自己的直连设备上是不需要网关的,所以0.0.0.0的网关地址是正常的。目的地址是0.0.0.0的路由是你的缺省网关。在这个例子里,有两个网关,缺省的并且是到255.255.2…

htop linux命令详解,htop使用详解

在管理进程时通常要借助一些工具,比较常用的就是ps和top了;不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法。一、安装htophtop工具在epel源中提供,请自行配置epel源,也可以直接下载…

iOS 中的 xml 解析

在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios sdk中,同时支持DOM 和 SAX 方式解析 GDataXML : DOM方式解析,由谷歌开发,基于…

Android Termux安装SSH结合内网穿透实现远程SFTP文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

linux上clisp运行lisp,apache - 重新访问linux + apache2 + mod_lisp + CLISP - 堆栈内存溢出

CLISP已安装并成功运行:(加载“ modlisp-clisp”)(modlisp:modlisp-server)运行正常,即无休止Python可通过localhost在/ usr / lib / cgi-bin中正常工作试图使clisp服务器在/ var / www / html / lsp中工作通过localhost / lsp打印的浏览器访…

linux解压war包乱码,linux中zip解压乱码解决方法

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。有2种方式解决问题:1、通过unzip行命令解压,指定字符集unzip -O …

Android沉浸式通知栏设计

转载博客:http://www.2cto.com/kf/201503/381348.html Android4.4新特性,系统状态栏一体化。 实现的步骤主要有以下几点: 1.android4.4 以上版本 2.设置app全屏: 方法:在AndroidManifest.xml中设置android:theme"…

linux火狐自动更新,CentOS 7手动更新firefox | Linux系统运维联盟

这里针对的是firefox无法检测到新版本,需要手动升级。1.下载新版的irefox,一般是.tar.gz压缩包。2.tar zxvf 解压到/usr/lib64 。(只要是原版firefox文件的目录就对了)3.cd /usr/lib64/firefox4../firefox-bin 完成有的更新好之后可能会无法播放视频&a…

C/C++02: Josephus问题

据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特後,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第…

ahci模式下无法启动Linux,电脑AHCI模式无法开启是怎么回事?

安装之前就要开启ahci,然后安装系统,如果在ide模式下安装了,是不能随意的改到ahci的!你的情况只能重装系统解决了!看看你的主板,有没有第三方芯片的sata口,如果有,你把第三方芯片的s…

LeetCode Solutions : Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes values. For example, Given {1,2,3,4}, reorder itto {1,4,2,3}. Considering the following steps: * 1. split…

双系统linux触摸板不能用,windows系统与ubuntu双系统导致笔记本触摸板失灵的解决办法(非输入代码)...

先说一下我现在的笔记本使用的系统,windows10 64位+ubuntu14.04 64位。这几天把ubuntu装好后本来毫无问题的,用的飞起~可是昨天不知道什么原因,触摸板突然失灵了,插上鼠标可以用,就是触摸板不能…

JS 入门经典 第三章 判断、循环和函数

1、比较运算符 在所有的比较运算符中&#xff0c;和&#xff01;的优先级最低&#xff0c;而>、<、<、>则具有相同的优先级 所有的比较运算度的优先级都比算数运算符要低&#xff0c;所以先执行算数运算符&#xff0c;在执行比较运算符。 2、字符串的比较 JS将按照…

linux c fifo阻塞写和非阻塞写,linux—FIFO的使用与非阻塞标志(O_NONBLOCK)的影响

FIFO文#include #include int mkfifo( const char*pathname, mode_t mode);参数&#xff1a;pathname&#xff1a;FIFO的路径名文件名。mode&#xff1a;mode_t类型的权限描述符&#xff0c;同open的参数。返回值&#xff1a;成功&#xff1a;返回0失败&#xff1a;如果文件已经…

Servlet的学习之Request请求对象(2)

在上一篇《Servlet的学习(十)》中介绍了HttpServletRequest请求对象的一些常用方法&#xff0c;而从这篇起开始介绍和学习HttpServletRequest的常用功能。 使用HttpServletRequest可以防止盗链行为&#xff0c;什么是盗链行为&#xff0c;比如说在一个别的网站上超链接&#xf…

如何提高linux的时钟精度,Linux时钟精度提高有什么办法?

2 动态高精度时钟设计和实现动态高精度时钟设计方案借鉴了KURT-Linux思想&#xff0c;但与其不同的是提供一个与标准Linux核心时钟并行的具有精密刻度的实时时钟&#xff0c;并与原核心时钟区别开。采用X86体系CPU提供的TSC作为高精度的时间标度&#xff0c;权衡一定时间段(如一…

c语言循环程序怎么编程,c语言程序(5):循环结构程序设计

#include #include #include /*循环结构:1.基本循环语句while循环do_while循环for循环1.1 所有的的循环&#xff0c;都是满足条件循环1.2 while循环while(条件){循环体;}1.3 kbhit() :监测键盘是否按键&#xff0c;1.4do{循环体;}while(count<3);1.5 for循环for(表达式1;表达…

Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

1. 通过多线程改进刚才的聊天程序&#xff0c;这样我就可以实现在一个窗口发送和接收数据了 2. 代码示例&#xff1a; &#xff08;1&#xff09;SendThread.java&#xff0c;如下&#xff1a; 1 package com.himi.udpDemo2;2 3 import java.io.BufferedReader;4 import java.…