0

複数のユースケースを持つアプリを作成しています。主な機能 (アプリ アイコンを押すことでアクティブ化) と、カスタム URL スキームによってアクティブ化される主な機能の他のサブセットがあります。

私の問題を説明するには、現在、アプリに異なる動作を指示する方法を説明する必要があります。

私は使用しています: -(BOOL)application:didFinishLaunchingWithOptions:

オプションから URL を取得: [launchOptions objectForKey:[keyArray objectAtIndex:0]]

次に、その urlString を解析し、すべての launchType パラメーターを取得して、NSUserDefaults に入れます。次に、スプ​​ラッシュ スクリーンが表示されるのを待ちます。その後、アプリの動作方法が通知されます。

これは最初は問題ないように思えましたが、アプリにディープリンクし、機能 B が表示された場合、アプリはバックグラウンドに入り、次にアプリがフォアグラウンドになったときに (どちらの方法でも)、次のことに気付きました。 、機能 B が表示されます。

誰かが標準的な慣行について考えを持っているかどうか疑問に思っていました.人々は通常どのような方法を使用していますか?

参考までに、-(BOOL)application:application handleOpenURL: が呼び出されたときに、didFinishLaunchingWithOptions がその前に呼び出されない限り、ナビゲーション コントローラーに popToRootViewController を指示することで、この問題を解決しようとしています。 .

4

1 に答える 1

2

このアプローチについて、いくつか考慮すべき点があるように思えます。

まず、UIApplicationDelegate のドキュメントをご覧ください。-application:willFinishLaunchingWithOptions:警告:

URL を開くためにアプリを起動した場合は、UIApplicationLaunchOptionsURLKey キーの値を調べて、アプリが実際に URL を開くことができるかどうかを示すブール値を返す必要があります。このメソッドで URL を開こうとしないでください。代わりに、アプリケーション デリゲートに application:openURL:sourceApplication:annotation: メソッドを実装し、そのメソッドを使用して URL を開きます。

見ると、次のことが-application:openURL:sourceApplication:annotation:わかります。

URL を開くためにアプリを起動する必要がある場合、アプリは最初に application:willFinishLaunchingWithOptions: メソッドと application:didFinishLaunchingWithOptions: メソッドを呼び出し、次にこのメソッドを呼び出します。これらのメソッドの戻り値を使用して、このメソッドが呼び出されないようにすることができます。(アプリケーションが既に実行されている場合は、このメソッドのみが呼び出されます。 )

NSUserDefaults第二に、一時的な状態であるべきものを永続的に保存するために使用しているようです(アプリがURL経由で起動されたかどうかにかかわらず)。そこに設定した値をリセットしたり、URL を介してアプリを起動したりしたことがありますか?

最後に、ユーザーは、アプリが中断したところから再開されるという合理的な期待を持っています。ユーザーは、電話、テキスト メッセージ、通知、外部からの気晴らし、他のアプリの必要性など、さまざまな理由でアプリを離れます。アプリを (URL 経由ではなく) 再開/再起動するときに中断した場所に戻ることを拒否すると、ユーザー エクスペリエンスが低下する可能性があります。

于 2012-10-13T03:01:56.473 に答える