3

ここには 2 つのシナリオがあります。

1 つは、iPad のバックグラウンドでアプリがアクティブになっていることです。Safari にアクセスして URL スキームのリンクをクリックすると、アプリが開き、URL を含むアラートが表示されます。

これは私が欲しいものです!

2 番目のシナリオは、アプリが非アクティブであり、バックグラウンドではない場合です。ここでアプリが起動しますが、アラートは表示されません。「didFinishLaunchingWithOptions」から URL を警告することはできますが、JavaScript 関数 handleOpenURL(url) でそれが必要です。

私の AppDelegate.m の handleOpenURL は、アプリがバックグラウンドにあるときにのみ起動されるようです。バックグラウンドで実行していないときに同じことをさせる方法はありますか?

これが私のobj-c handleOpenUrlです:

if (!url) { return NO; }

// calls into javascript global function 'handleOpenURL'
NSString* jsString = [NSString stringWithFormat:@"window.setTimeout(function(){ handleOpenURL(\"%@\"); }, 1)", url];
[self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];

// all plugins will get the notification, and their handlers will be called 
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];

return YES;

この JavaScript 関数に出力する必要があります。

function handleOpenURL(url) { 
    alert('invoke: ' + url);
}

アプリが最初に起動すると、didFinishLaunchingWithOptions が実行されます。

NSURL* url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
NSString* invokeString = nil;

if (url) {
    invokeString = [url absoluteString];
    NSLog(@"iPaperReeder launchOptions = %@", url);
}

self.viewController.invokeString = invokeString;

didFinishLaunchingWithOptions メソッドを変更して、handleOpenURL を実行する必要がありますか?

4

2 に答える 2