0

在我的应用程序中,我希望用户在关闭当前应用程序时看到另一个应用程序。有没有可能?我尝试通过以下方法编写代码并通过自定义 url 架构打开应用程序:

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSString * string = @"InnovationLab://";
    NSURL * url = [NSURL URLWithString:string];
    [[UIApplication sharedApplication] openURL:url];
}

但它没有用。我在这里放了一个断点,一旦我关闭应用程序,它就会停在这里,但什么也没有发生。这不会转到 AppStore。仅用于演示和内部使用。

4

2 回答 2

4

你应该这样做吗?不
,你能做到吗?(可能不是

我编写了一个小测试应用程序来尝试打开一个我知道可以工作的 URL(一个将打开地图应用程序的 Apple Maps URL)。我输入了一些日志代码以查看发生了什么。

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        NSLog(@"Can Open URL");
    } else {
        NSLog(@"Cannot Open URL");
    }
    BOOL success =  [[UIApplication sharedApplication] openURL:url];
    NSLog(@"Success is %@", [NSNumber numberWithBool:success]);

    NSLog(@"Shared app: %@", [UIApplication sharedApplication]);
    NSLog(@"applicationWillResignActive");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"];
    [[UIApplication sharedApplication] openURL:url];
    NSLog(@"Shared app: %@", [UIApplication sharedApplication]);
    NSLog(@"Entered Background");
}

NSLogs记录了一些东西。应用程序返回YESfor canOpenURL:,但NO在您尝试时作为返回值返回-openURL:

这是日志:

Flipper[18946:907] Can Open URL
Flipper[18946:907] Success is 0
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0>
Flipper[18946:907] applicationWillResignActive
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0>
Flipper[18946:907] Entered Background

如果您想允许您的用户打开另一个应用程序,您应该为他们提供一个按钮(或操作表或警报)。重新使用 Home 按钮听起来可能会让您的应用程序被拒绝。

请注意,如果您将相同的代码放入application:didFinishLaunchingWithOptions:,它会起作用 find 并立即将您带到地图应用程序。该行为可能在applicationWillResignActive:. 如果您真的打算这样做(并且您有一个只有一个视图的应用程序),您可以使用viewWillDisappear.

于 2013-02-11T20:17:52.377 回答
3

您可以使用他们的 URL 方案和您提供的代码自由打开任何其他应用程序 - 只需确保它不违反 HIG(人机界面指南)。不过,它不适用于您的情况。

这个问题和答案提供了更详细的信息,但如果你在越狱手机上运行应用程序,你可以使用这个小片段来代替:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO];

或者这个答案的这个片段:

system("/usr/bin/open com.mycompany.MyAppName");

也就是说,坏主意。Apple 会以 99% 的把握拒绝你的应用。-applicationWillResignActive方法用于保存您的工作并准备关闭,您不应该也不能以该方法打开另一个应用程序。(不适用,因为应用程序不会上传到 App Store。

于 2013-02-11T19:57:15.097 回答