4

自分のURLスキームをアプリに追加することに成功しました。アプリはスキームを使用して正しく起動します。

着信データを処理したいのですが、デリゲートが呼び出されません。これはユニバーサルアプリであり、両方のAppDelegatesに次の関数を追加しました。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}

私は次のようなスキーマでテストしています:myapp://appalarm.com…そしてURLStringでappalarm.comになることを期待します

何が問題なのですか?

ご回答ありがとうございます!

4

3 に答える 3

7

私は別の投稿で明確にしようとしました。アシュリークラークの答えは部分的にしか正しくありません。OS 4.0では、handleOpenURLが(少なくともファイルURLに対して)呼び出され、アプリがバックグラウンドで実行されている場合のオープンURL呼び出しを処理するためにそれを実装する必要があります。したがって、両方のメソッドでファイルを開くと、ファイルが2回開かれる可能性があります(applicationDidFinishLaunchingWithOptionsがYESを返した場合は、そうする必要があります)。別の投稿を参照してください。

于 2010-08-31T20:56:01.467 に答える
5

アプリケーションデリゲートが「applicationDidFinishLaunchingWithOptions:」を実装している場合、「handleOpenURL:」メソッドは呼び出されません。他の方法で渡されたオプションを調べて、アプリの起動方法と実装する必要のある動作を判断します。

于 2010-06-02T22:30:33.190 に答える
2

以下の関数にコードを試してください

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if (!url) {  return NO; }

    NSString *URLString = [url absoluteString];
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:NSLocalizedString(@"test message", nil) 
                          message:URLString
                          delegate:self 
                          cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];     
    [alert release];
    return YES;
}
于 2014-06-03T10:40:11.727 に答える