iOS开发手册
# 多端应用开发指南
为降低开发者构建移动应用的开发成本,平台推出基于小程序技术实现的多端框架,基于该多端框架可低成本开发 Android 和 iOS 应用,详情可查看多端框架概述。如果你的 App 是通过官方多端框架开发的,可分别调用如下 JSAPI 即可在 App 中实现微信分享和收藏的功能。
- 分享图片到微信:wx.miniapp.shareImageMessage
- 分享小程序卡片到微信:wx.miniapp.shareMiniProgramMessage
- 分享文本到微信:wx.miniapp.shareTextMessage
- 分享网页到微信:wx.miniapp.shareWebPageMessage
- 分享视频到微信:wx.miniapp.shareVideoMessage
# 非多端应用开发指南
如果你的 App 不是通过多端框架开发的,可按照下方的指南在 App 中在集成微信 SDK 后,可调用接口实现微信分享和收藏的功能,以下依次是文字、图片、视频、网页、小程序、音乐视频类型分享的示例。
# WXMediaMessage (微信媒体消息内容)说明
# SendMessageToWXReq(SendMessageToWX请求类)
分享或收藏的目标场景,通过修改SendMessageToWXReq的 scene 字段实现。
# 示例
一、文字类型分享示例
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = YES;
req.text = @"分享的内容";
req.scene = WXSceneSession;
[WXApi sendReq:req];
二、图片类型分享示例
WXImageObject 多媒体消息中包含的图片数据对象
UIImage *image = [UIImage imageNamed:@"res2.png"];
imageData = UIImageJPEGRepresentation(image, 0.7);
WXImageObject *imageObject = [WXImageObject object];
imageObject.imageData = imageData;
WXMediaMessage *message = [WXMediaMessage message];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"res5"
ofType:@"jpg"];
message.thumbData = [NSData dataWithContentsOfFile:filePath];
message.mediaObject = imageObject;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneTimeline;
[WXApi sendReq:req];
三、视频类型分享示例
WXVideoObject 多媒体消息中包含的视频数据对象
注意:videoUrl和videoLowBandUrl不能同时为空
WXVideoObject *videoObject = [WXVideoObject object];
videoObject.videoUrl = @"视频url";
videoObject.videoLowBandUrl = @"低分辨率视频url";
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"标题";
message.description = @"描述";
[message setThumbImage:[UIImage imageNamed:@"缩略图.jpg"]];
message.mediaObject = videoObject;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WXApi sendReq:req];
四、网页类型分享示例
WXWebpageObject 多媒体消息中包含的网页数据对象
WXWebpageObject *webpageObject = [WXWebpageObject object];
webpageObject.webpageUrl = @"https://open.weixin.qq.com";
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"标题";
message.description = @"描述";
[message setThumbImage:[UIImage imageNamed:@"缩略图.jpg"]];
message.mediaObject = webpageObject;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WXApi sendReq:req];
五、小程序类型分享示例
WXMiniProgramObject 多媒体消息中包含的小程序数据对象
WXMiniProgramObject *object = [WXMiniProgramObject object];
object.webpageUrl = webpageUrl;
object.userName = userName;
object.path = path;
object.hdImageData = hdImageData;
object.withShareTicket = withShareTicket;
object.miniProgramType = programType;
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"小程序标题";
message.description = @"小程序描述";
message.thumbData = nil; //兼容旧版本节点的图片,小于32KB,新版本优先
//使用WXMiniProgramObject的hdImageData属性
message.mediaObject = object;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession; //目前只支持会话
[WXApi sendReq:req];
六、音乐视频类型分享示例
该类型需要OpenSDK 1.8.9以及以上版本
WXMusicVideoObject 多媒体消息中包含的音乐视频数据对象
发送MV到微信:
WXMusicVideoObject *mvObject = [WXMusicVideoObject object];
mvObject.musicUrl = @"音乐url";
mvObject.musicDataUrl = @"音乐数据url";
mvObject.singerName = @"歌手名";
mvObject.duration = 60 * 1000; //音乐时长,毫秒
mvObject.hdAlbumThumbData = hdAlbumThumbData; //高清专辑封面图
mvObject.albumName = @"专辑名";
mvObject.musicGenre = @"音乐流派";
mvObject.issueDate = 1611116532; //发行时间Unix时间戳
mvObject.identification = @"test-identification"; //音乐标识符
WXMediaMessage *message = [WXMediaMessage message];
message.title = @"歌曲名称";//必填,不能为空
message.messageExt = @"额外信息"; //微信跳回时会带上
[message setThumbImage:[UIImage imageNamed:@"缩略图.jpg"]];
message.mediaObject = mvObject;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WXApi sendReq:req];
处理从微信音乐播放器内跳回:
#pragma mark - WXApiDelegate
- (void)onReq:(BaseReq *)req {
if ([req isKindOfClass:[LaunchFromWXReq class]]) {
LaunchFromWXReq *launchReq = (LaunchFromWXReq *)req;
NSString* messageExt = launchReq.message.messageExt; //分享到微信时的透传额外信息字字段
if ([launchReq.message.mediaObject isKindOfClass:WXMusicVideoObject.class]) {
WXMusicVideoObject *musicVideoObject = (WXMusicVideoObject *)launchReq.message.mediaObject;
NSString *identification = musicVideoObject.identification; //分享到微信时的音乐标识符字段
//应用可以根据messageExt和identification处理逻辑
}
}
}
音乐视频类型使用说明:
- 注意事项:
- 音乐视频类型与音乐类型不同,分享至微信的音乐视频消息,直接点击好友会话或朋友圈下的分享内容会跳转到微信原生播放器,可以对音乐作品辅以视频制作成音乐视频,进行点赞、评论、发送给朋友、分享到朋友圈、发布至视频号等。
- 在播放器里点击跳转入口会跳转回App,没有安装App时会打开musicUrl链接。
- 音乐视频类型分享,请开发者特别注意必填的字段有:
- WXMediaMessage.title:歌曲名称
- WXMusicVideoObject.musicUrl:音频网页的 URL 地址
- WXMusicVideoObject.musicDataUrl:音频数据的 URL 地址
- WXMusicVideoObject.singerName:歌手名
- WXMusicVideoObject.duration:歌曲时长,单位为毫秒
- 第三方应用在分享时设置的字段 WXMediaMessage.messageExt 字段与WXMusicVideoObject.identification 需要保证Android与iOS平台是一致的,否则跨平台分享的消息跳转回应用无法保证能够跳转到对应歌曲。
- 无论WXMediaMessage.mediaObject类型是什么,WXMediaMessage.messgeExt 字段均会透传是应用在分享时写入的数据,应用可使用该字段进行应用低版本的兼容处理。
# 注意事项
发起分享的 App 与小程序属于同一微信开放平台账号。
或发起分享的 App 与该小程序的代开发(获得小程序权限id为18的授权)服务商的第三方平台账号属于同一微信开放平台账号,也支持发起分享。
支持分享小程序类型消息至会话,暂不支持分享至朋友圈。
若客户端版本低于6.5.6或在iPad客户端接收,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能正常打开网页链接。
对于音乐视频类型的分享,需按照如下格式发送邮件至 hansenxu@tencent.com
- 邮件主题:账号XXX关于音乐视频类 appmsg 的分享功能申请;
- 邮件内容:需提供移动应用 appid 和需分享的音频网页的域名信息;
- 要求:
- 申请账号需为已完成主体认证的账号;
- 申请“音乐视频类型的分享权限”需先完成“音乐类型的分享权限”,且申请的移动应用的 appid 和域名需一致;
- 音乐视频类型的分享权限会涉及到相关法务协议的签署,具体签订流程和开通结果请参考邮件回复结果。