7

アプリにハンドオフを実装しました。アプリがフォアグラウンドまたはバックグラウンドで実行されている場合、Web からアプリへのハンドオフ、およびその逆で正常に動作しています。

ただし、アプリが実行されていない場合、ユーザーが web からアプリへのハンドオフからアプリを起動すると、launchOptions ディクショナリで が取得UIApplicationLaunchOptionsUserActivityDictionaryKeyされますが、アクティビティへの参照が欠落しています。

スクリーンショットを参照してください:

ここに画像の説明を入力

ご覧のとおり、の ID のみを取得していNSUserActivityます。これは iOS 9 のバグですか?

ID を使用してアクティビティへの参照を取得する方法はありますか?

編集、ここにコードがありますが、これは関係ないと思います

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
        __block NSUserActivity *activity;

        NSDictionary *userActivityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
        if (userActivityDictionary) {
            [userActivityDictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
                if ([obj isKindOfClass:[NSUserActivity class]]) {
                    activity = obj;
                }
            }];
        }

        //app was started by URL (deep linking), check parameters
        if (activity) {
            NSURL *url = activity.webpageURL;
            //resume from URL
        }
    }

    return YES;
}
4

1 に答える 1

7

Ok、

これについて TSI を Apple に提出しましたが、これはバグではなく、仕様によるものと思われます。

application:continueUserActivity:restorationHandlerデリゲートでアクティビティを再開できますが、私の場合は呼び出されませんでした。

私の間違いは、application:didFinishLaunchingWithOptions:メソッドで YES を返す必要があることです。それ以外の場合、NO を返すと、メソッドapplication:continueUserActivity:restorationHandlerは呼び出されません。

アプリに FB を実装していたので、[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]NO を返すものを返します。

application:didFinishLaunchingWithOptions:関数内のコードをこれに変更しました

if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
        return YES;
    }
else {
        return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
}

このようにして、application:continueUserActivity:restorationHandlerデリゲートが正常に呼び出され、アクティビティを正常に再開できます。

于 2016-04-30T09:06:18.957 に答える