0

UIApplicationShortcutItems を動的に更新することが理にかなっているアプリがあります。問題は、特定のショートカット アイテムのセットがネットワークの状態に依存することです (到達可能性、キャプティブ ポータル、VPN の状態などを考えてください)。

アプリがフォアグラウンドにあるときにショートカット項目を更新するのは簡単ですが、アプリがバックグラウンドにあるときにそうする明確で適切なタイミングがわかりません...そしてもちろん、ネットワークの状態は非常に簡単に変化する可能性がありますそれからも。

何か不足していますか、それとも iOS 10 まで待つ必要がありますか? :-)

4

1 に答える 1

0

質問は、バックグラウンド実行ショートカット項目の動的更新の 2 つの部分に分けられると思います。

私見では、iOS のバックグラウンド実行はまだかなり制限されています。たとえば、有限長のタスクを実行したり、特定の種類のアプリのみをバックグラウンドで長時間実行することが許可されています。 到達可能性は、長時間実行されるバックグラウンド タスクのケースにはあまり適していません。

あなたが言及したように、ショートカット項目を動的に更新するのは非常に簡単です (以下のように):

// replace updateShortcutItemMethod and EventYouAreInterestedIn accordingly
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(<updateShortcutItemMethod>) name:<EventYouAreInterestedIn> object:nil];

- (void)updateShortcutItemWithType:(NSString *)type title:(NSString *)title subtitle:(NSString *)subtitle icon:(NSString *)icon
{
    NSMutableArray *shortcutItems = [NSMutableArray arrayWithArray:[UIApplication sharedApplication].shortcutItems];
    for (UIMutableApplicationShortcutItem *shortcutItem in shortcutItems) {
        if ([shortcutItem.type isEqualToString:type]) {
            UIMutableApplicationShortcutItem *updatedShortcutItem = [[UIMutableApplicationShortcutItem alloc] initWithType:type localizedTitle:title localizedSubtitle:subtitle icon:[self getIconFrom:icon] userInfo:nil];
            NSUInteger index = [shortcutItems indexOfObject:shortcutItem];
            [shortcutItems replaceObjectAtIndex:index withObject:updatedShortcutItem];
            [UIApplication sharedApplication].shortcutItems = shortcutItems;
        }
    }
}

技術的な側面は別として、ユーザー エクスペリエンスの観点からすると、アプリケーションがバックグラウンドにあるときに UIApplicationShortcutItem を更新することは、あまり良い考えではありません。

アプリケーションがバックグラウンドにある場合、ユーザーはアプリケーションのコンテキストにいないためです (対話は発生しません)。ユーザーが理由を認識していないときに UIApplicationShortcutItem を頻繁に変更すると、ユーザーが混乱する可能性があります。それを行うためのより良い方法は、ユーザーがアプリケーションと対話している間に何が起こっているかを明示的にユーザーに通知することです。

申し訳ありませんが、これは実際にはあなたが望むものを達成するのに役立たないかもしれません.

于 2015-11-15T21:56:52.993 に答える