Files
xj-ios/XinjiangProject/XinjiangProject/Manager/WXManager/XJWeChatManager.m
T
jiayangyangandClaude Opus 4.7 ee498064cc feat(sos): 集成微信SDK,实现地图卡片长按转发微信;新增急救资源详情页及群成员面板
- 手动集成微信 OpenSDK-NoPay,创建 XJWeChatManager 统一管理分享能力
- 地图卡片新增长按手势,通过代理模式实现「转发到微信」,分享含高德导航链接
- 聊天页新增群成员侧滑面板,支持查看成员列表及一键拨号
- 新增急救资源详情页(XJFirstAidResourceDetailVC)及选择联系人页
- 首页健康知识/资讯模块,含双视图列表及 H5 跳转
- 修复急救资源详情页编译报错

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-14 17:53:44 +08:00

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