iOS从APP中分享出小程序详解
微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。
微信分享及收藏功能已向全体开发者开放,开发者在微信开放平台帐号下申请App并通过审核后,即可获得微信分享及收藏权限。
新增能力:移动应用支持小程序类型分享
移动应用分享功能支持小程序类型分享,要求发起分享的App与小程序属于同一微信开放平台帐号。支持分享小程序类型消息至好友会话,不支持“分享至朋友圈”及“收藏”。
微信客户端版本要求:6.5.6及以上微信客户端版本。为兼容旧版本客户端,若客户端版本低于6.5.6,小程序类型分享将自动转成网页类型分享。
分享或收藏的目标场景,通过修改scene场景值实现。
发送到聊天界面——WXSceneSession
发送到朋友圈——WXSceneTimeline
添加到微信收藏——WXSceneFavorite
一、文字类型分享示例
二、图片类型分享示例
三、音乐类型分享示例
四、视频类型分享示例
五、网页类型分享示例
六、小程序类型分享示例
image.png
注: 其他的参考官方文档吧
分享与收藏开发文档(iOS应用)
支持从APP分享小程序类型消息至微信,用户接收后可打开进入小程序。
要求:
- 发起分享的App与小程序属于同一微信开放平台帐号。
- 支持分享小程序类型消息至会话,暂不支持分享至朋友圈。
- 若客户端版本低于6.5.6或在iPad客户端接收,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能正常打开网页链接。
支持大图卡片样式
自定义图片建议长宽比是 5:4。
6.5.9及以上版本微信客户端小程序类型分享使用大图卡片样式,使用WXMiniProgramObject的hdImageData属性展示高清大图;旧版微信客户端(6.5.8及以下版本)小程序类型消息卡片使用小图卡片样式,拉取thumbData字段图片信息。请开发者注意兼容旧版客户端。
支持分享开发版/体验版小程序
为支持开发者调试,1.8.1及以上版本开发者工具包支持分享开发版/体验版小程序至微信,开发者可根据WXMiniProgramType控制分享的小程序版本。
支持获取更多分享信息(6.5.13及以上客户端版本)
通常开发者希望分享出去的小程序被二次打开时可以获取到更多信息,例如群的标识。可以设置withShareTicket为true,当分享卡片在群聊中被其他用户打开时,可以获取到shareTicket,用于获取更多分享信息。详见小程序获取更多分享信息
小程序原始ID获取方法:登录小程序管理后台-设置-基本设置-帐号信息
按照官方文档上面能够直接分享小程序了
下面是在实际中的运用, 不废话直接上代码加注释
第一篇 分享小程序
/**
* 分享小程序
*/
//func
func shareWxMiniObjectWith(_ title: String, userName: String, path: String, hdImage: Any, webpageUrl: String, complate : @escaping (_ isLaunchSuc : Bool)->()) -> Void {
let wxMiniObject = WXMiniProgramObject.init()
// 微信低版本会自动转为 url 的地址
wxMiniObject.webpageUrl = webpageUrl
// gh_开头的,小程序的起始 ID
wxMiniObject.userName = userName
// 启动路径 , 可以带参数,详情见下面解释
wxMiniObject.path = path
// 图片的 data 这个不能大于 128k 做的时候注意点
wxMiniObject.hdImageData = getDataWith(hdImage)
// 正式版
wxMiniObject.miniProgramType = .release
wxMiniObject.withShareTicket = true
let message = WXMediaMessage.init()
// 分享的标题
message.title = title
message.description = title
message.mediaObject = wxMiniObject
message.thumbData = nil
let req = SendMessageToWXReq.init()
req.message = message
req.bText = false
// 目前只支持分享到微信朋友, 不支持分享到朋友圈
req.scene = Int32(WXScene.init(0).rawValue)
let isLaunchSuc: Bool = WXApi.send(req)
// 我这里做了回调是方便如果分享之后怎么操作,
complate(isLaunchSuc)
}
/**
* 获取图片的大小
*/
fileprivate func getDataWith(_ hdImage: Any) -> Data {
var data: Data?
if hdImage is String {
var hdImageStr = "\(hdImage)"
if hdImageStr.hasPrefix("http://") || hdImageStr.hasPrefix("https://") {
// 网络图片
do {
try data = Data.init(contentsOf: URL.init(string: hdImageStr)!)
}catch {
}
}else {
// 本地图片
if hdImageStr.count == 0 {
hdImageStr = "share_box"
}
data = UIImageJPEGRepresentation(UIImage.imgWithName(hdImageStr)!, 0.5)!
}
}else if hdImage is UIImage {
// 本地图片
data = UIImageJPEGRepresentation(hdImage as! UIImage, 0.3)!
}
return data!
}
第二篇 启动小程序
/**
* 打开小程序 到指定页面
*/
func launchWXMiniObject(_ userName: String, path: String = "", complate : @escaping (_ isLaunchSuc : Bool)->()) {
/**
WXMiniProgramTypeRelease = 0, //**< 正式版 */
WXMiniProgramTypeTest = 1, //**< 开发版 */
WXMiniProgramTypePreview = 2, //**< 体验版 */
*/
// 因为是直接是打开已经发布过的小程序,直接是开发者模式,
let type = WXMiniProgramType.init(rawValue: 0)
let launchreq = WXLaunchMiniProgramReq.init()
// userName: 小程序原始 ID gh_ 开头的那个
launchreq.userName = userName
/**
path:
1. 小程序的启动路径,默认的话启动首页,
2. 带上参数 pages/index/indes?channel=gaunfang&userID=XXXXX&appid_ios=XXXXX
(由于需要通过该小程序盒子,启动其他小程序,直接传 appid 的话,不会被识别,应该是 appid 微信中作为关键字了安卓的没有问题,在iOS 中有问题,我们修改为 appid_ios 没有问题)
*/
launchreq.path = path
launchreq.miniProgramType = type!
let isLaunchSuc: Bool = WXApi.send(launchreq)
// 需要用到启动小程序直=之后需要做什么, 加了个回调,用不用都行
complate(isLaunchSuc)
}
最后: 自己创建了一个 iOS 开发群185377619
,有需要的小伙伴加一下,大家共同进步