Próbowałem znaleźć informacje dotyczące nowego przełącznika wielozadaniowego w iOS 7, a zwłaszcza zrzut ekranu, który system operacyjny wykonuje, gdy aplikacja przechodzi w stan hibernacji.
Czy istnieje sposób, aby całkowicie wyłączyć tę funkcję lub zrzut ekranu? Czy mogę całkowicie ukryć aplikację przed przełącznikiem? Aplikacja musi działać w tle, ale nie chcemy wyświetlać żadnego zrzutu ekranu z aplikacji.
Zrzut ekranu stanowi potencjalne zagrożenie bezpieczeństwa, pomyśl podobnie jak w przypadku aplikacji bankowych, w których numer Twojej karty lub podsumowanie konta będą dostępne dla każdego, kto dwukrotnie kliknie przycisk strony głównej na urządzeniu.
Czy ktoś ma w tym jakiś wgląd? Dzięki.
Odpowiedzi:
W Przygotowanie UI aby działać w tle , Apple mówi:
Widzieć Pytania i odpowiedzi techniczne QA1838: Zapobieganie pojawianiu się poufnych informacji w przełączniku zadań
Oprócz ukrywania / zastępowania poufnych informacji możesz również powiedzieć systemowi iOS 7, aby nie wykonywał migawki ekranu za pośrednictwem
ignoreSnapshotOnNextApplicationLaunch
, którego dokumentacja mówi:To powiedziawszy, wygląda na to, że zrzut ekranu jest nadal wykonywany i dlatego złożyłem raport o błędzie. Ale powinieneś przetestować dalej i sprawdzić, czy użycie tego ustawienia pomaga.
Jeśli była to aplikacja dla przedsiębiorstw, warto również przyjrzeć się odpowiedniemu ustawieniu
allowScreenShot
opisanemu w sekcji Obciążenie ograniczeń w dokumencie Odwołanie do profilu konfiguracji.Oto implementacja, która osiąga to, czego potrzebowałem. Możesz przedstawić własny
UIImageView
wzorzec lub użyć wzorca protokołu delegata, aby ukryć poufne informacje:Następnie przekazałem delegatowi mojej aplikacji właściwość:
Mój kontroler widoku ustawia to:
Kontroler widoku oczywiście implementuje ten protokół:
I wreszcie, mój delegat aplikacji korzysta z tego protokołu i właściwości:
Uwaga, używam
applicationWillResignActive
raczej niż zalecanaapplicationDidEnterBackground
, ponieważ, jak zauważyli inni, ten ostatni nie jest wywoływany po dwukrotnym dotknięciu przycisku głównego, gdy aplikacja jest uruchomiona.Chciałbym móc używać powiadomień do obsługi tego wszystkiego, zamiast wzorca delegata-protokołu, ale w moich ograniczonych testach powiadomienia nie są obsługiwane w odpowiednim czasie, ale powyższy wzorzec działa dobrze.
źródło
ignoreSnapshotOnNextApplicationLaunch
metoda jest ignorowana, jeśli nie zostanie wywołana podczas przywracania stanu, jak opisano tutaj .ignoreSnapshotOnNextApplicationLaunch
jest niepoprawna, że jak wszyscy zauważyliśmy, migawka jest faktycznie wykonywana, ale po prostu nie zostanie użyta przy następnym uruchomieniu.Oto rozwiązanie, z którym pracowałem dla mojej aplikacji:
Jak powiedział Tommy: Możesz użyć applicationWillResignActive. To, co zrobiłem, to utworzenie UIImageView z moim SplashImage i dodanie go jako podwidoku do mojego głównego okna-
Użyłem tej metody zamiast applicationDidEnterBackground, ponieważ applicationDidEnterBackground nie zostanie wyzwolona, jeśli dwukrotnie klikniesz przycisk home, a applicationWillResignActive będzie. Słyszałem, jak ludzie mówią, że może to być wyzwalane również w innych przypadkach, więc nadal testuję, aby sprawdzić, czy powoduje to problem, ale jak dotąd żaden! ;)
Tutaj, aby usunąć widok obrazu:
Mam nadzieję że to pomoże!
Uwaga: Przetestowałem to zarówno na symulatorze, jak i na prawdziwym urządzeniu: nie pokaże się na symulatorze, ale na prawdziwym urządzeniu!
źródło
Ta szybka i łatwa metoda da czarną migawkę nad ikoną aplikacji w przełączniku aplikacji iOS7 lub nowszym.
Najpierw weź okno klucza aplikacji (zwykle jest to konfigurowane w AppDelegate.m w application: didFinishLaunchingWithOptions) i ukryj je, gdy aplikacja ma zamiar przejść do tła:
Następnie usuń ukrywanie okna klucza aplikacji, gdy aplikacja stanie się ponownie aktywna:
W tym momencie sprawdź przełącznik aplikacji i sprawdź, czy widzisz czarną migawkę nad ikoną aplikacji. Zauważyłem, że jeśli uruchomisz przełącznik aplikacji natychmiast po przeniesieniu aplikacji w tło, może wystąpić opóźnienie ~ 5 sekund, w którym zobaczysz migawkę aplikacji (tę, którą chcesz ukryć!), Po który przechodzi w całkowicie czarną migawkę. Nie jestem pewien, o co chodzi z opóźnieniem; jeśli ktoś ma jakieś sugestie, zadzwoń.
Jeśli chcesz mieć w przełączniku kolor inny niż czarny, możesz zrobić coś takiego, dodając widok podrzędny z dowolnym kolorem tła:
Następnie usuń ten widok podrzędny koloru, gdy aplikacja stanie się ponownie aktywna:
źródło
Skorzystałem z następującego rozwiązania: kiedy aplikacja ma zamiar zrezygnować, otrzymuję migawkę appWindow jako widok i dodaję do niej rozmycie. Następnie dodaję ten widok do okna aplikacji
jak to zrobić:
w appDelegate tuż przed wdrożeniem dodaj wiersz:
dodaj te metody:
spraw, aby implementacja appDelegate wyglądała następująco:
Stworzyłem Przykładowe projekty w Swift i Objective C . Oba projekty wykonują następujące działania w:
-application: didResignActive - tworzona jest migawka, zamazywana i dodawana do okna aplikacji
-application: willBecomeActive blur view jest usuwany z okna.
Jak używać:
Cel C
Dodaj
AppDelegate+NVSBlurAppScreen
pliki .h i .m do swojego projektuw swojej -applicationWillResignActive: metoda dodaj następujący wiersz:
w swojej metodzie -applicationDidEnterBackground: dodaj następujący wiersz:
Szybki
dodaj plik AppDelegateExtention.swift do swojego projektu
w swojej aplikacji funkcja WillResignActive dodaj następujący wiersz:
w funkcji applicationDidBecomeActive dodaj następujący wiersz:
źródło
jeśli jest używany tylko
[self.window addSubview:imageView];
wapplicationWillResignActive
funkcji, ten imageView nie obejmie UIAlertView, UIActionSheet ani MFMailComposeViewController ...Najlepszym rozwiązaniem jest
źródło
Podaję własne rozwiązanie jako „odpowiedzi”, chociaż to rozwiązanie jest bardzo zawodne. Czasami jako zrzut ekranu pojawia się czarny ekran, czasami XIB, a czasami zrzut ekranu z samej aplikacji. W zależności od urządzenia i / lub czy uruchomię to w symulatorze.
Należy pamiętać, że nie mogę podać żadnego kodu dla tego rozwiązania, ponieważ zawiera wiele szczegółów dotyczących aplikacji. Ale to powinno wyjaśnić podstawową istotę mojego rozwiązania.
źródło
Możesz użyć aktywatora, aby skonfigurować podwójne kliknięcie przycisku głównego, aby uruchomić wielozadaniowość i wyłączyć domyślne podwójne kliknięcie przycisku głównego i uruchamianie okna wielozadaniowości. Tej metody można użyć do zmiany zrzutów ekranu na domyślny obraz aplikacji. Dotyczy to aplikacji z domyślną funkcją ochrony hasłem.
źródło
Xamarin.iOS
Na podstawie https://stackoverflow.com/a/20040270/7561
Zamiast tylko pokazywać kolor, chciałem pokazać mój ekran startowy.
źródło