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为后缀的文件的形式存储在电脑上,所以我们可…

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

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

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

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

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…

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

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

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

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

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

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

c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子

满意答案evil83752014.02.27采纳率:51% 等级:11已帮助:7590人#include int main(){int array[100], n, c, d, position, swap;printf("Enter number of elements\n");scanf("%d", &n);printf("Enter %d inte…

小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区

N个小球放入M个盒子共有多少种方法,并输出的算法设计:算法思路1 :暴力填充盒子每个小球都可能放入M个盒子的任意一个,所以直接根据小球个数做递归即可,然后将存储放入hash中排重//TODO算法思路2 :递归填充盒子即&#…

r语言c5.0要求因子输出,R语言中因子的创建与使用

原标题:R语言中因子的创建与使用因子在R语言中可以用来表示名义型变量或有序变量。名义变量一般表示类别,如性别,种族等等。有序变量是有一定排序顺序的变量,如职称,年级等等。在R语言中,名义变量和有序变量…

WinForm中使用AnyCAD三维控件 の 初始化

在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成。 一、添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation.Net.dll AnyCAD.Exchange.Net.dll 二、初始化控件 1.首先创建一个窗体 2.在窗体上放置一个Panel用来放置三维控件 3.初始…

android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!

原标题:你居然还不会手机usb调试?5个方法,让你轻松学会设置!最近有位朋友将手机连接电脑的时候,遇到了提示打开手机的USB调试模式,却不知道怎么操作。其实,不同手机的usb调试打开的方式都会有所…

鸿蒙os芯片,没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?

原标题:没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?华为今天要和大家说的手机产品是华为,在目前的市场中,华为手机的影响力是非常大的,并且获得了十分不错的销量,甚至在最近一段时间销量超过三…

html5 canvas 不兼容safari浏览器_HTML5简介

HTML5 是继 HTML4.01 和 XHTML1.0 之后的超文本标记语言的最新版本。它是由一群自由思想者组成的团队设计出来,并最终实现多媒体支持、交互性、更加智能的表单,以及更好的语义化标记。HTML5 并不仅仅是 HTML 规范的最新版本,而是一系列用来制…

html5置顶标签css样式,html5 header标签 html header css布局教程 /header

在HTML5版本之前习惯使用div标签布局网页,在HTML5在DIV标签基础上新增header标签元素。也叫“”头部标签。以前我们在div css布局中常常把网页大致分为头部、内容、底部。对于大结构我们常常使用div里加id进行布局。而头部常常使用正应为大家公认html布局中对“head…

第八届育才杯机器人比赛_赛场、名单公布!南海区第八届“献血者杯”羽毛球公开赛“羽”你相约本周六...

主办单位:南海区献血办、南海血站协办单位:南海区羽毛球协会为进一步扩大无偿献血宣传,感恩南海区献血者,活跃无偿献血者的文体生活,打造一个南海区无偿献血者交流的平台,共同营造“运动、健康、献血、快乐…

2021届安徽高考成绩查询,安徽2021年高考成绩什么时候公布

据安徽省教育招生考试院透露,安徽预计将于6月23日公布各批次录取分数线、考生成绩。2021年安徽高考成绩查询入口2021年高考录取方法1、普通高校的招生录取工作在教育部和省高校招生委员会的领导下,由省考试院组织实施。2、省高校招生委员会根据当年高校在…

BroadcastReceiver 广播机制详解

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能…