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が何かを記録しました。アプリはに対して戻りますYESが、試行すると戻り値として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

ユーザーが別のアプリを開くことを許可する場合は、ユーザーが開くためのボタン(またはアクションシート、またはアラート)を提供する必要があります。ホームボタンを転用すると、アプリが拒否される可能性があるようです。

同じコードをに入れるとapplication:didFinishLaunchingWithOptions:、それが機能し、すぐにマップアプリに移動することに注意してください。で動作が妨げられている可能性がありapplicationWillResignActive:ます。これを実行する準備ができている場合(およびビューが1つしかないアプリがある場合)は、を使用できます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メソッドは、作業を保存して閉じる準備をするためのものであり、そのメソッドで別のアプリを開くことはできません。また、開くこともできません。(アプリケーションはAppStoreにアップロードされないため適用されません。

于 2013-02-11T19:57:15.097 に答える