13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

push 通知からブラウザ起動させる際に注意すること

Last updated at Posted at 2014-12-14

push 通知からブラウザ起動させる際に注意すること

push 通知からダイレクトにブラウザを起動させたとき、アプリが10秒くらい固まった後にようやくブラウザが起動する問題が起こりました。どうやら、Application Delegate の didReceiveRemoteNotification(※) や didFinishLaunchingWithOptions で [UIApplication openUrl] を呼ぶとアプリが固まってしまうそう。。
※ iOS8 からは didReceiveRemoteNotification ではなく以下に変更されてます。

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)notification

対応方法

対応方法としては GCD(Grand Central Dispatch)を使って openUrl を呼び出すことで解決できます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://~"]];
});

GCD は iOS におけるマルチスレッドの手法の一つです。処理したいタスクを Block で渡すことで逐次実行します。dispatch_async を使うことでタスクの処理を非同期で実行してくれます。同期処理させたい場合は dispatch_sync。

なぜ固まるのか原因が定かではないですが、これによってスムーズにブラウザを起動させることができます。

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?