【问题标题】:UIApplication sharedApplication openURLUIApplication sharedApplication openURL
【发布时间】:2023-03-23 18:52:01
【问题描述】:

我有一个混合应用程序,它有一个只有 AppDelegate 类的 iOS obj-c 案例项目,所有其他逻辑都在混合应用程序中开发。

在混合应用中有多种 openURL 用法。 我需要什么:

1) 在iOS应用(AppDelegate)的情况下处理openURL委托

2) 我可以更改所有网址吗? (在 AppDelegate 中)

3) 我可以覆盖[[UIApplication sharedApplication] openURL]

【问题讨论】:

  • 您想在您的混合应用或原生生成的代码中实现开放 URL 登录?

标签: ios xcode appdelegate uiapplicationdelegate openurl


【解决方案1】:

为您的应用注册自定义 URL 方案

使用自定义 URL 调用您的应用程序

这是您的应用委托中被调用的委托方法,您可以向下解析以读取不同的 URL 并在应用中调用不同的功能。

- (BOOL) application : (UIApplication*) app openURL : (NSURL*) url options : (NSDictionary<UIApplicationOpenURLOptionsKey, id>*) options {

         //Parse the URL and invoke the necessary modules or webpages 

        return true;

    }

请阅读本教程here。它会给你完整的想法。

希望这会有所帮助。


更新

1) 在iOS应用(AppDelegate)的情况下处理openURL委托

是的,可以在上述委托中处理

2) 我可以更改所有网址吗? (在 AppDelegate 中)

是的,您可以阅读自定义 URL 方案并更改 URL 并在您的 web 视图中调用该 URL

3) 我可以覆盖 [[UIApplication sharedApplication] openURL]

如果您的意思是在委托方法中读取调用的 URL,那么是

【讨论】:

  • 我想在它退出应用程序之前处理 URL 并从原始应用程序打开 url
  • 这就是为什么我要覆盖 uiapplication 中的 openURL
  • 你的意思是说你的混合应用中有 URL,当它被点击时你想捕获 URL 并更改 URL 然后调用 URL?
  • 您能否通过一个场景逐步向我解释您要实现的目标,以便我更好地理解并帮助您。
  • 我找到了解决方案,我创建了 UIApplication 的子类并覆盖了 openURL 方法
【解决方案2】:

解决方法是创建 UIApplication 的子类并覆盖 openURL 方法

头文件

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Application : UIApplication

@end

实现文件

 #import "Application.h"


@implementation Application

- (void)openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey,id> *)options completionHandler:(void (^)(BOOL))completion
{

    //DO what Ever Here befor called supoer

    [super openURL:url options:options completionHandler:completion];

}

@end

main.m 文件需要额外修改

UIApplication要修改,所以放子类而不是通用系统

ma​​in.m

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "Application.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, NSStringFromClass([Application class]), NSStringFromClass([AppDelegate class]));
    }
}

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 2012-06-29
    • 2011-03-20
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多