【IOS-Debug】uniapp小程序打开APP原生页面

这篇具有很好参考价值的文章主要介绍了【IOS-Debug】uniapp小程序打开APP原生页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

APP里面的uniapp小程序要接入微信支付,但是支付的调起为实现统一管理是由APP原生调起支付,不是每个小程序自己实现。所以,支付完成的页面也是写在APP宿主原生页面的,涉及到小程序打开原生页面的跳转方式。

页面跳转方式

众所周知,常见的IOS页面跳转有presentpush两种。

前者弹出的视图是模态视图,由UIViewController管理的视图控制器堆栈。新弹出的页面可以看见上一个页面。

后者是由UINavigationController管理的视图控制器堆栈,打开新视图都入栈,调用之前的视图则需要出栈。在window下同时只能显示一个ViewController。

一、使用push跳转
  • 实现push跳转过程

为了实现新页面的全覆盖,我使用了push打开方式。为了保证小程序能push打开,修改APP宿主打开uniapp小程序的方式从默认DCUniMPOpenModePresent变成DCUniMPOpenModePush

小程序打开的配置代码:

// 初始化小程序的配置信息对象
DCUniMPConfiguration *configuration = [[DCUniMPConfiguration alloc] init];
/**
修改打开方式present变成push
*/
configuration.openMode = DCUniMPOpenModePush;
// 配置启动小程序时传递的参数
configuration.extraData = @{ @"arguments":@"Hello uni microprogram" };
// 启动小程序
[DCUniMPSDKEngine openUniMP:k_AppId configuration:configuration completed:^(DCUniMPInstance * _Nullable uniMPInstance, NSError * _Nullable error) {
	if (uniMPInstance) {
		// success
	} else {
		// error
	}
}];

在小程序打开的时候,使用push方式打开。

//第二个页面
PayResultVC *vc=[PayResultVC new];
//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC.navigationController pushViewController:vc animated:YES];
  • push方式打开原生页面的优缺点:

优点:保证了全部新页面都是通过由UINavigationController管理,保证了整个APP打开页面的统一性。

缺点:uniapp通过push方式打开的小程序侧滑退出会出现多层标题栏。如图:

【IOS-Debug】uniapp小程序打开APP原生页面,#IOS遇见的Bug,uni-app,小程序,objective-c,xcode

  • 解决方案(并未解决,更换present打开)
  • 解决方案一:

  • 翻阅官方文档,通过uniapp代码修改小程序控制器标题栏显隐,结果侧滑还是会出现两个按钮。

  • /// 注意:只有通过 push 的方式打开小程序才生效
    /// @param hidden 是否隐藏
    + (void)whenUniMPCloseSetNavigationBarHidden:(BOOL)hidden;
    
    
    /// 设置 push 打开方式小程序内是否自动控制原生导航栏的显隐(默认控制)
    /// @param isControl Bool
    + (void)setAutoControlNavigationBar:(BOOL)isControl;

    官方代码文档地址:DCUniMPSDKEngine | uni小程序SDK

  • 解决方案二:

  • 修改项目控制页面跳转的UINavigationController,判断若是小程序实例则隐藏,Debug模式下发现小程序打开未走过UINavigationController

  • 方案失败。

二、使用present跳转
  • 实现present跳转过程

默认打开uniapp的方式,不修改。

打开原生APP页面代码:

//第二个页面
PayResultVC *vc=[PayResultVC new];
//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
  • present方式打开原生页面的优缺点:
  • 优点:没有push打开小程序侧滑出现的多个导航栏Bug。

    缺点:打开的新页面无法全部覆盖上一层页面,有空隙。如图:

​​​​​​​【IOS-Debug】uniapp小程序打开APP原生页面,#IOS遇见的Bug,uni-app,小程序,objective-c,xcode

  • 修改方式

修改跳转模式,变成全屏模式。代码:

//第二个页面
PayResultVC *vc=[PayResultVC new];

//模式要加在新打开的页面
vc.modalPresentationStyle=UIModalPresentationFullScreen;

//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
修改结果:

可以全部覆盖上级页面,也没有多个导航栏的Bug。文章来源地址https://www.toymoban.com/news/detail-781765.html

到了这里,关于【IOS-Debug】uniapp小程序打开APP原生页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包