OpenVPN iOS客户端自定义URL Scheme

4

我的应用程序依赖于iOS OpenVPN Connect 应用。

因此,我必须检查该应用是否已安装。

如果已安装,则只需使用OpenURL scheme打开该应用程序,否则将打开其App Store链接以便用户安装。

所以,我的问题在于我找不到与该应用相关联的任何打开链接。

感谢任何帮助!

6个回答

2

它输出一个文档类型。因此,您可以使用UIDocumentInteractionController来检查文件类型是否可以打开,从而确定应用程序是否已安装。

UTI是 net.openvpn.formats.ovpn

将该类型的文件复制到捆绑包中(您可以在Mac上创建这样的文件),并尝试使用 presentOpenInMenuFromRect 呈现交互控制器。

将自己设置为委托方,如果它触发willShowMenu,则表示应用程序存在-您将关闭菜单。

因此,以下是一些入门代码:

NSString *file = ... //path to file with UTI in question 
UIDocumentInteractionController *c = ... //init with file
c.delegate = self;
_hasAppInstalledForUTI = NO;
[c present...];

if(!_hasAppInstalledForUTI) {
    //act
}

...

- willPresentOpenInMenu {
    [c dismissAnimated:NO];
    _hasAppInstalledForUTI = YES;
}

顺便提一下:我检查了应用程序,没有URL方案。


上面的解决方案将检查文件是否可以打开。我想检查openvpn是否已安装。因为我需要仅使用openvpn应用程序打开我的文件。 - karthik
据我所知,那个uti仅被该应用程序使用...用于openvpn配置文件。由于没有urrl方案,并且没有更新的应用程序,因此这是您可以获得的最接近的内容。 - Daij-Djan
如果未安装OpenVPN,则将调用willPresentOpenInMenu函数,它将打开带有邮件和消息选项的菜单,请参见此图像http://monosnap.com/image/ja8NsXVGwhxc3QpvNQx5jBGvMgP61m。 - Thamilan S

1
虽然听起来有些无礼,但我认为一种方法是通过电子邮件联系开发人员,询问他们是否有URL方案,或者是否会创建对其的支持。这是一个双赢的局面,因为如果软件可以以新的方式利用,它更有可能被安装,而您将获得所需的功能。

基本上是我答案的后半部分的重复 ;) - CaptJak

0

支持openvpn:// URL协议的功能在OpenVPN Connect 1.0.6中被引入,根据OpenVPN Connect FAQ,您可以使用以下代码:

BOOL installed = [application canOpenURL:[NSURL URLWithString:@"openvpn://"]];

以下代码将打开,如果尚未安装OpenVPN Connect,则会安装它:
UIApplication * app = [UIApplication sharedApplication];
BOOL installed = [app canOpenURL:[NSURL URLWithString:@"openvpn://"]];
if (installed) {
    [app openURL: [NSURL URLWithString:@"openvpn://"]];
} else {
    [app openURL: [NSURL URLWithString: @"https://itunes.apple.com/app/id590379981?mt=8"]];
}

编辑:实际上这种方法不起作用,我刚刚测试过了——问题在于AppStore中发布的OpenVPN Connect版本是1.0.5,因此该功能不可用((


0

要检查用户是否安装了应用程序,您需要执行以下操作:

NSURL *url = "appScheme://"
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}
else {
    // can't open url
}

但并不是所有的应用程序都有URL方案。 我知道我的没有。

如果您无法在网上找到任何内容,则很可能不存在此类方案。 尝试联系开发人员以确定是否存在此类方案,否则尝试查找另一个具有此类方案的应用程序,并改用该应用程序。


1
谢谢您的回复,我已经有了上述代码,我正在寻找打开VPN应用程序的URL方案。 - karthik
好的,就像我说的一样,他们可能没有。试着给开放式 VPN 应用程序的开发人员发送电子邮件并询问他们。 - CaptJak
@Daij-Djan,你不是答案。这正是答案。使用 openvpn:// 并阅读常见问题解答 https://docs.openvpn.net/docs/openvpn-connect/openvpn-connect-ios-faq.html。 - pronebird
请不要侮辱我。你还好吗?这在2013年仍然没有答案。现在我不知道了。 - Daij-Djan

0

Napster,我想检查是否安装了“openvpn ios”。我知道可以使用URL方案来检查它,我想知道URL方案或任何其他实现相同功能的替代方法。 - karthik
1
Karthik:您可以使用以下代码检查应用程序是否已安装: NSString *ourPath = [@"appURLSheme://" stringByAppendingString:URLEncodedText];NSURL *ourURL = [NSURL URLWithString:ourPath]; if ([ourApplication canOpenURL:ourURL]) [ourApplication openURL:ourURL]; else NSLog(@"没有安装应用程序。"); - Nirmalsinh Rathod
Napster,我知道可以使用url scheme进行检查,我正在寻找openvpn的url scheme或达到相同效果的替代方法。 - karthik
你可以使用上面的代码打开。如果可能的话,需要检查备选方案。如果我有任何解决方案,我会及时更新给你。 - Nirmalsinh Rathod

0

您尝试打开一个.ovpn文件。

这里有一个旧问题,可以帮助您开始如何操作。

来源

虽然这不是专门针对那个特定应用程序的,但它应该能够完成工作。


100%我上面所写的,就像一个链接;) - Daij-Djan
我不想使用UIDocumentInteractionController显示open-in,我需要检查是否安装了openvpn。我需要自定义URL方案,因为我知道实现方法。 - karthik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接