アプリのカスタム URL スキームをセットアップしました。これは、アプリがバックグラウンドで実行されていない場合の動作です。
- カスタム URL リンクがメールで届き、クリックするとストーリーボードからログイン ビューが表示されます
- ログインボタンをクリックすると、タブコントローラーで要求したタブが表示されます
ここまでは順調ですね。
これが私が抱えている問題です:
- メールからカスタム URL リンクを再度クリックすると、アプリが既に一度読み込まれ、バックグラウンドで実行されている場合、ログイン ビューが再び表示されません。
私の質問は、カスタム URL リンクを複数回クリックしたときにログイン ビューを再度読み込むにはどうすればよいかということです。
カスタム URL スキームは、最初は完全に機能しますが、アプリが既に実行されている場合は機能しません。これをデバッグしようとしました...カスタムURLスキームリンクをクリックすると、AppDelegate.mファイルで「handleOpenURL:(NSURL *)url」メソッドが呼び出されるため、ストーリーボードからログイン画面を再度読み込むにはどうすればよいですか?ログイン画面が既にメモリにロードされているかどうかを確認しますか...ログイン画面はストーリーボードの開始ビューです。以下は、アプリのデリゲートで handleOpenUrl 関数がどのように見えるかです。
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
if(!url){
return NO;
}
// check if email link was clicked
if ([[url scheme] isEqualToString:@"docova"]) {
NSString *urlString = [url absoluteString];
NSLog(@"URL Parameter string: %@", [url query]);
NSLog(@"incoming url => %@", urlString);
// NSArray *arrayQStrings=[self getDataOfQueryString:urlString];
NSDictionary *dict = [self parseQueryString:[url query]];
NSLog(@"query dict: %@", dict);
NSLog(@"query dict: %@", [dict valueForKey:@"action"]);
NSLog(@"query dict: %@", [dict valueForKey:@"docpath"]);
//[self.tabBarController setSelectedIndex:1]; // tab 3
//[self.parentViewController.tabBarController setSelectedIndex:1]; // tab 3
/* save user data ***/
NSUserDefaults *appPrefs = [NSUserDefaults standardUserDefaults];
[appPrefs setObject:[dict valueForKey:@"action"] forKey:@"action"]; // reset these after using it
[appPrefs setObject:[dict valueForKey:@"docpath"] forKey:@"docpath"]; // reset these after using it
// save data to application preference
[appPrefs synchronize];
return YES;
}
return NO;
}
アプリが既に実行されているときに、ストーリーボードからビューを前もって表示する方法を誰かが提案できますか? Androidにもアクティビティスタックがあることは知っていますが、iOSにもそのようなものがあります...