- 手动集成微信 OpenSDK-NoPay,创建 XJWeChatManager 统一管理分享能力 - 地图卡片新增长按手势,通过代理模式实现「转发到微信」,分享含高德导航链接 - 聊天页新增群成员侧滑面板,支持查看成员列表及一键拨号 - 新增急救资源详情页(XJFirstAidResourceDetailVC)及选择联系人页 - 首页健康知识/资讯模块,含双视图列表及 H5 跳转 - 修复急救资源详情页编译报错 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
161 lines
4.7 KiB
Objective-C
161 lines
4.7 KiB
Objective-C
//
|
|
// XJWeChatManager.m
|
|
// XinjiangProject
|
|
//
|
|
// 微信分享管理类
|
|
//
|
|
|
|
#import "XJWeChatManager.h"
|
|
#import <WechatOpenSDK/WXApi.h>
|
|
|
|
@interface XJWeChatManager () <WXApiDelegate>
|
|
@property (nonatomic, copy) XJWeChatShareCompletion shareCompletion;
|
|
@end
|
|
|
|
@implementation XJWeChatManager
|
|
|
|
#pragma mark - ————— 单例 —————
|
|
+ (instancetype)sharedManager {
|
|
static XJWeChatManager *instance = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
instance = [[XJWeChatManager alloc] init];
|
|
});
|
|
return instance;
|
|
}
|
|
|
|
#pragma mark - ————— 注册 —————
|
|
- (BOOL)registerWithAppID:(NSString *)appID universalLink:(NSString *)universalLink {
|
|
return [WXApi registerApp:appID universalLink:universalLink];
|
|
}
|
|
|
|
- (BOOL)handleOpenURL:(NSURL *)url {
|
|
return [WXApi handleOpenURL:url delegate:self];
|
|
}
|
|
|
|
- (BOOL)handleOpenUniversalLink:(NSUserActivity *)userActivity {
|
|
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
|
|
}
|
|
|
|
#pragma mark - ————— 分享 —————
|
|
- (void)shareText:(NSString *)text
|
|
toScene:(int)scene
|
|
completion:(XJWeChatShareCompletion)completion {
|
|
self.shareCompletion = completion;
|
|
|
|
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
|
|
req.bText = YES;
|
|
req.text = text;
|
|
req.scene = scene;
|
|
|
|
[WXApi sendReq:req completion:nil];
|
|
}
|
|
|
|
- (void)shareImageData:(NSData *)imageData
|
|
toScene:(int)scene
|
|
completion:(XJWeChatShareCompletion)completion {
|
|
self.shareCompletion = completion;
|
|
|
|
WXMediaMessage *message = [WXMediaMessage message];
|
|
message.thumbData = nil;
|
|
|
|
WXImageObject *imageObject = [WXImageObject object];
|
|
imageObject.imageData = imageData;
|
|
message.mediaObject = imageObject;
|
|
|
|
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
|
|
req.bText = NO;
|
|
req.message = message;
|
|
req.scene = scene;
|
|
|
|
[WXApi sendReq:req completion:nil];
|
|
}
|
|
|
|
- (void)shareWebpageWithTitle:(NSString *)title
|
|
desc:(NSString *)desc
|
|
webpageUrl:(NSString *)webpageUrl
|
|
thumbImage:(UIImage *)thumbImage
|
|
toScene:(int)scene
|
|
completion:(XJWeChatShareCompletion)completion {
|
|
self.shareCompletion = completion;
|
|
|
|
WXMediaMessage *message = [WXMediaMessage message];
|
|
message.title = title;
|
|
message.description = desc;
|
|
|
|
if (thumbImage) {
|
|
message.thumbData = UIImageJPEGRepresentation(thumbImage, 0.5);
|
|
}
|
|
|
|
WXWebpageObject *webpageObject = [WXWebpageObject object];
|
|
webpageObject.webpageUrl = webpageUrl;
|
|
message.mediaObject = webpageObject;
|
|
|
|
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
|
|
req.bText = NO;
|
|
req.message = message;
|
|
req.scene = scene;
|
|
|
|
[WXApi sendReq:req completion:nil];
|
|
}
|
|
|
|
- (void)shareMiniProgramWithTitle:(NSString *)title
|
|
desc:(NSString *)desc
|
|
webpageUrl:(NSString *)webpageUrl
|
|
userName:(NSString *)userName
|
|
path:(NSString *)path
|
|
miniProgramType:(NSUInteger)miniProgramType
|
|
thumbImage:(UIImage *)thumbImage
|
|
completion:(XJWeChatShareCompletion)completion {
|
|
self.shareCompletion = completion;
|
|
|
|
WXMediaMessage *message = [WXMediaMessage message];
|
|
message.title = title;
|
|
message.description = desc;
|
|
|
|
if (thumbImage) {
|
|
message.thumbData = UIImageJPEGRepresentation(thumbImage, 0.5);
|
|
}
|
|
|
|
WXMiniProgramObject *miniProgramObject = [WXMiniProgramObject object];
|
|
miniProgramObject.webpageUrl = webpageUrl;
|
|
miniProgramObject.userName = userName;
|
|
miniProgramObject.path = path;
|
|
miniProgramObject.miniProgramType = miniProgramType;
|
|
message.mediaObject = miniProgramObject;
|
|
|
|
SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
|
|
req.bText = NO;
|
|
req.message = message;
|
|
req.scene = WXSceneSession;
|
|
|
|
[WXApi sendReq:req completion:nil];
|
|
}
|
|
|
|
#pragma mark - ————— 工具 —————
|
|
- (BOOL)isWeChatInstalled {
|
|
return [WXApi isWXAppInstalled];
|
|
}
|
|
|
|
- (BOOL)isWeChatSupportApi {
|
|
return [WXApi isWXAppSupportApi];
|
|
}
|
|
|
|
#pragma mark - ————— WXApiDelegate —————
|
|
- (void)onResp:(BaseResp *)resp {
|
|
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
|
|
if (self.shareCompletion) {
|
|
if (resp.errCode == WXSuccess) {
|
|
self.shareCompletion(YES, nil);
|
|
} else if (resp.errCode == WXErrCodeUserCancel) {
|
|
self.shareCompletion(NO, @"用户取消分享");
|
|
} else {
|
|
self.shareCompletion(NO, resp.errStr ?: @"分享失败");
|
|
}
|
|
self.shareCompletion = nil;
|
|
}
|
|
}
|
|
}
|
|
|
|
@end
|