xcode 配置wechat_iOS 13 Xcode 11.3 微信SDK版本 1.8.6 关于微信登录和微信支付的回调...

zz/2023/12/3 2:58:05

创建项目时使用的Xcode 版本是 11.3 , AppDelegate 已拆分开来 ,存在ScaneDelegate 窗口代理 , 微信SDK也更新到最新版本, 1.8.6, 如果Xcode 的版本低于11, 在AppDelegate 没有被拆分的时候创建的项目 . 使用微信登录或支付在 iOS 系统版本 13 以上都是OK 的 , 需要讲的是高版本Xcode下的微信回调,

窗口代理SceneDelegate'

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){

if (scene) {

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

UIWindowScene *windowScene = (UIWindowScene *)scene;

self.window = [[UIWindow alloc] initWithWindowScene:windowScene];

self.window.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);

[NSThread sleepForTimeInterval:1.5];

// 已废弃, 使用 [WXApi registerApp:APP_ID universalLink:Universal_Links];

// [WXApi registerApp:APP_ID];

// Universal_Links 是通用配置, 微信SDK 有详细说明,

[WXApi registerApp:APP_ID universalLink:Universal_Links];

// 其他界面操作

LoginViewController *loginVC = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];

self.window.rootViewController = loginVC;

self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;

[self.window makeKeyAndVisible];

}

}

在调试过程中. 发现 iOS 版本在 13 至13.2 时回调的方法如下:

#pragma mark ===== 适配 iOS 13 - 13.2

-(void)scene:(UIScene *)scene openURLContexts:(NSSet *)URLContexts

{

NSEnumerator *enumerator = [URLContexts objectEnumerator];

UIOpenURLContext *context;

while (context = [enumerator nextObject]) {

NSString *url = [NSString stringWithFormat:@"%@",context.URL];

// getURLParameters 是 自定义的一个字符串转字典的方法,

NSDictionary *urlDic = [self getURLParameters:url];

if([url containsString:@"oauth"]){

if (urlDic.allKeys > 0) {

// 微信登录时的状态标识

if ([urlDic[@"state"] isEqualToString:@"YYLxxxx"]) {

NSString *requestStr = [NSString stringWithFormat:@"code=%@&type=1",urlDic[@"code"]];

// 自己封装的方法向后台请求微信登录

[self wechatLoginWithUrlStr:requestStr];

// 微信回调的状态等于 AuthorizeApp 授权认证时

}else if ([urlDic[@"state"] isEqualToString:@"AuthorizeApp"]){

NSDictionary *dic = @{@"code":urlDic[@"code"]};

NOTIFICATION_POST_USERINFO(WXCHATAUTHORIZE_KEY, nil, dic);

}

}

// 微信支付的回调

}else if([url containsString:@"pay"]){

switch([urlDic[@"ret"] intValue]){

case 0:

{

NSLog(@"支付成功");

NOTIFICATION_POST(PAYSUCCESS_KEY);

}

break;

case -2:

{

NSLog(@"用户点击取消");

NOTIFICATION_POST(PAYCANCEL_KAY);

}

break;

default: NOTIFICATION_POST(PAYFAILE_KEY);

NSLog(@"支付失败,retcode = %@",urlDic[@"ret"]);

break;

}

// 重点: 判断APPID 是否一致 , 调用微信Api处理.

}else if ([context.URL.scheme rangeOfString:@"wx56102e6e4cxxxxxxx"].length!=0) {

// 完整的 URL样式应为: wx56102e4c3rr6hfd://resendContextReqByScheme?wechat_auth_context_id=9xxxxxx6228692e3957321bc9xxxxxxxxxxxx

[WXApi handleOpenURL:context.URL delegate:self];

}

// 打印出相关的数据

NSLog(@"urlDic ==== %@",urlDic);

NSLog(@"context.URL =====%@",context.URL);

NSLog(@"context.options.sourceApplication ===== %@",context.options.sourceApplication);

}

}

以上在我测试时. 系统版本 13 至 13.2 回调正常, 在 iOS 13.3 系统版本上依然没有回调 , 在写项目时 , 13.3 刚出来一个星期, 以为万事大吉, 万万没想到..hhhhhh

13.3 的回调方法:

#pragma mark ====== 适配 iOS 13.3

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity

{

if (userActivity.webpageURL) {

NSLog(@" %@",userActivity.webpageURL);

BOOL isSuccess = [WXApi handleOpenUniversalLink:userActivity delegate:self];

NSLog(@"ios 13 %@",@(isSuccess));

}

}

到此就全部ok了 , 至于

-(void)onResp:(BaseResp *)resp

这个方法, 我也有写上, 和旧版写在 Appdelegate 一致, 但在测试过程中, 好像并没有走这个方法,

附上字符串 转字典的封装方法:

-(NSMutableDictionary*)getURLParameters:(NSString *)urlStr {

NSRange range = [urlStr rangeOfString:@"?"];

if(range.location==NSNotFound) {

return nil;

}

NSMutableDictionary *params = [NSMutableDictionary dictionary];

NSString *parametersString = [urlStr substringFromIndex:range.location+1];

if([parametersString containsString:@"&"]) {

NSArray *urlComponents = [parametersString componentsSeparatedByString:@"&"];

for(NSString *keyValuePair in urlComponents) {

//生成key/value

NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];

NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];

NSString*value = [pairComponents.lastObject stringByRemovingPercentEncoding];

//key不能为nil

if(key==nil|| value ==nil) {

continue;

}

id existValue = [params valueForKey:key];

if(existValue !=nil) {

//已存在的值,生成数组。

if([existValue isKindOfClass:[NSArray class]]) {

//已存在的值生成数组

NSMutableArray*items = [NSMutableArray arrayWithArray:existValue];

[items addObject:value];

[params setValue:items forKey:key];

}else{

//非数组

[params setValue:@[existValue,value]forKey:key];

}

}else{

//设置值

[params setValue:value forKey:key];

}

}

}else{

//单个参数生成key/value

NSArray *pairComponents = [parametersString componentsSeparatedByString:@"="];

if(pairComponents.count==1) {

return nil;

}

//分隔值

NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];

NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];

//key不能为nil

if(key ==nil|| value ==nil) {

return nil;

}

//设置值

[params setValue:value forKey:key];

}

return params;

}


http://www.ngui.cc/zz/2390061.html

相关文章

iOS微信授权登录中Universal Link(通用链接)的配置 ,解决ios13,ios14微信支付不走回调问题

这里写自定义目录标题 简介Unuversal Links介绍配置Unuversal Links 1.苹果开发者账号打开配置2.XCode工程配置3.配置JSON文件4.后台服务器配置5.微信开放平台配置6.初始化代码简介 随着iOS和微信SDK版本的更新,有变化。 新版本,需要配置Unuversal Lin…

微信公众号,IOS获取当前页面URL

公众号支付页面时,点击支付,微信报‘当前页面URL未注册’。 当前页面,与支付商户平台配置的 支付授权目录 不符。自己或者后台人员去商户平台中配置一下即可。一定要到‘/’一级标题点击公众号底部菜单栏进入,A页面(…

iOS微信分享不触发回调函数onResp()解决方法

此问题最近困扰了我三天,检查项目代码与网上方法对照,并没有发现不对的地方,跟断点调试,只发现微信分享后微信端并没有给应用反馈,onResp()没有触发。 问题描述: 线上iOS用户在第三方应用点击微信分享&…

ios 微信分享重新编码链接_IOS微信分享标题变为默认图片不显示描述变为链接...

initShare(pageData) {let that this// 获取签名that.$http.get(that.signature, {params: {url: that.signatureUrl},headers: {xfrom: 7},}).then(res > {if (res.data.success) {that.shareData res.data.dataconsole.log(获取签名结果);wx.config({debug: false, // 开…

iOS微信分享及Universal Links

iOS 分享小程序及配置Universal Links1.集成openSDK2.配置Universal Links1.服务器那边注册域名2.打开Capabilities → Associated Domains开关,将Universal Links域名加到配置上:3. 验证你的Universal Links3.在微信开放平台注册APP4.分享小程序1.向微信…

IOS微信浏览器返回事件监听问题

业务需求:从主页进入A订单页面,然后经过各种刷新或点标签加载后点左上角的返回直接返回到主页 采取方法:采用onpopstate事件监听url改变,从而跳转到主页 遇到的问题:安卓上测试没问题;苹果手机微信里进入A页…

ios微信支付失败 php,iOS 微信支付疑难杂症。

哈喽,大家好,感谢您来阅读我的文章,作为iOS开发者,集成各类支付是家常便饭之事,今天我来给大家推荐几个不常见的微信支付问题。最近,在项目的反馈版块中,收到了这么一位APP用户的反馈&#xff0…

易达项目进度第三天

昨天:借阅了关于andriod studio的书籍,并学习了软件的使用 今天:编写了一个简单的显示图片文字的APP,并且模拟成功 明天:计划看UI设计并且注重学习UI布局和美化 转载于:https://www.cnblogs.com/ZHAOHAN666/p/6810425.…

易达项目进度第二天

昨天:完成了任务分配 今天:借阅了关于andriod studio的书籍,并学习了软件的使用 明天:编写一个可以显示图片和文字的小型APP 转载于:https://www.cnblogs.com/ZHAOHAN666/p/6810405.html

易达项目进度第一天

软件开始制作的第一天,我们一起讨论了各自的任务 在电脑上搭建了andriod studio的环境 计划明天去借关于安卓APP开发的书 目前遇到的困难就是对于andriod studio的使用问题 转载于:https://www.cnblogs.com/ZHAOHAN666/p/6810383.html