Brak uprawnienia do powiadomienia push

126

Mam aplikację do przesłania, gdy została odrzucona i otrzymałem wiadomość

Brak uprawnienia do powiadomienia push - Twoja aplikacja wydaje się rejestrować w usłudze Apple Push Notification, ale uprawnienia podpisu aplikacji nie obejmują uprawnienia „aps-environment”. Jeśli Twoja aplikacja korzysta z usługi Apple Push Notification, upewnij się, że identyfikator aplikacji obsługuje powiadomienia push w portalu obsługi administracyjnej i prześlij ją ponownie po podpisaniu aplikacji za pomocą profilu udostępniania dystrybucji, który obejmuje uprawnienie „aps-environment”.

Sprawdziłem moją obsługę ad-hoc i znalazłem środowisko aps i produkcję, jednak kiedy otwieram moją dystrybucję, nie znajduję takich.

Czy to jest przyczyną tego komunikatu o błędzie i odrzucenia jabłka, jak mogę to naprawić?

mirageservo
źródło

Odpowiedzi:

80

Tak, to jest przyczyna odrzucenia App Store. Jeśli Twój profil aprowizacji ad-hoc zawiera klucz środowiska aps, oznacza to, że Twoja aplikacja jest poprawnie skonfigurowana w portalu obsługi administracyjnej Apple. Wszystko, co musisz zrobić, to usunąć profil dystrybucji App Store na komputerze lokalnym, a następnie ponownie pobrać i zainstalować profil dystrybucji z portalu obsługi administracyjnej. Ten nowy powinien zawierać klucz środowiska aps.

Tomek
źródło
Aby usunąć trochę więcej mgły, to uczciwie stwierdza, że ​​"profil dystrybucji MUSI zawierać środowisko aps itp." I że kiedy otwieram
obsługę administracyjną
czy muszę wygenerować nowy certyfikat ssl, szczególnie gdy zmieniłem coś w moim profilu dystrybucji?
mirageservo
2
Nie, nie ma potrzeby posiadania nowego certyfikatu programisty. Po włączeniu dystrybucji powiadomień push (co musiało być zrobione w pewnym momencie, ponieważ profil ad hoc ma klucz środowiska aps), portal obsługi administracyjnej iTunes generuje nowy profil dystrybucji sklepu z aplikacjami zawierający klucz środowiska aps. Prawdopodobnie właśnie pobrałeś i zainstalowałeś najnowszą wersję.
tom
Jeszcze jedno, zanim to pytanie dotrze do galaktyki, czy muszę ponownie skompilować (ponownie zarchiwizować) IPA, ponieważ nastąpiłaby zmiana w ustawieniach kompilacji projektu, czy mogę bezpośrednio rozpowszechniać aplikację bez zawracania sobie głowy ponowną kompilacją?
mirageservo
Musisz ponownie zarchiwizować. Profil informacyjny skojarzony z aplikacją zostaje osadzony w pliku .ipa.
jutro
43

Identyfikator pierwszej aplikacji

upewnij się, że powiadomienia push ID są włączone po stronie produkcyjnej

jak na zdjęciu

wprowadź opis obrazu tutaj

Drugi certyfikat

z sekcji produkcyjnej utwórz dwa certyfikaty ze swoim identyfikatorem (włączone powiadomienia push)

Certyfikat App Store i Ad Hoc

Certyfikat SSL (Sandbox) usługi Apple Push Notification

wprowadź opis obrazu tutaj

Trzecie profile obsługi administracyjnej

W sekcji Dystrybucja utwórz profil App Store ze swoim identyfikatorem

Wreszcie

podczas przesyłania kosza należy sprawdzić, który profil obsługi administracyjnej był używany i mieć wiele uprawnień

wprowadź opis obrazu tutaj

wszystkie te przypadki powodują ten problem, mam nadzieję, że będzie to pomocne dla Ciebie

Mina Fawzy
źródło
1
Tego mi brakowało. Musiałem utworzyć nowy profil obsługi administracyjnej w witrynie programistów Apple, używając identyfikatora aplikacji z powiadomieniami push. Wraz z nowym profilem obsługi administracyjnej ostatecznie uprawnienie środowiska aps zostało dodane do mojej aplikacji. Dziękuję Ci!
M. Luisa Carrión
38

W XCode 8 musisz włączyć wypychanie w zakładce Możliwości na swoim miejscu docelowym, oprócz włączania wszystkiego w przepisach i certyfikatach: Xcode 8 „Brak uprawnienia aps-environment w sygnaturze aplikacji” przy przesyłaniu

Mój wpis na blogu o tym tutaj .

Vaiden
źródło
8
To taki klasyczny Apple. Dwie godziny po przesłaniu kompilacji wysyłają komunikat o błędzie dotyczący problemu, który już dawno rozwiązałem (włączenie usługi aplikacji powiadomień push w portalu deweloperskim) i jest wyjaśniony za pomocą linku do numeru 404. Wtedy okazuje się, że prawdziwy problem polega na tym, że nie migrowali moich ustawień podczas aktualizacji do nowej wersji swojego oprogramowania (w której jestem zablokowany). Fuj.
Rembrandt Q. Einstein
3
Ta sama historia. Prawie odrzuciliśmy komunikat o błędzie jako błąd Apple.
Vaiden
23

Otrzymałem tę wiadomość z innego powodu - przesłałem aplikację za pośrednictwem Xcode bez wcześniejszego tworzenia profilu dystrybucji App Store specjalnie dla tej aplikacji. Uważam, że Xcode automatycznie używa profilu wieloznacznego App Store, jeśli masz zainstalowany. Jednak aplikacja korzysta z powiadomień push i wymaga własnego profilu.

Rozwiązaniem jest utworzenie nowego profilu dystrybucji App Store dla aplikacji. Następnie pobierz go, przeciągnij do Xcode i zmodyfikuj ustawienia kompilacji projektu> Podpisywanie kodu> Zwolnij, aby użyć nowego profilu.

Simon Woodside
źródło
11

Kontynuując odpowiedź udzieloną przez @Vaiden, w Xcode 8 możesz rozwiązać ten problem, wybierając cel i klikając „Napraw problem”. Oczywiście nadal będziesz musiał skonfigurować powiadomienia push w portalu Apple Developer (możesz nieco uprościć ten proces, korzystając z nowej opcji „Automatycznie zarządzaj podpisywaniem”, która oszczędza kłopotów z pobieraniem profili udostępniania).

Opcja napraw mnie

Ian
źródło
8

Dla tych, którzy napotykają ten problem, którzy faktycznie używają powiadomień push w swoich aplikacjach:

Nasze certyfikaty push miały niedawno wygasnąć, więc stworzyliśmy nowe certyfikaty push dla deweloperów / produktów w standardowy sposób opisany przez Apple (nie będę tutaj omawiać szczegółów, jest mnóstwo informacji na ten temat w całej sieci podczas aktualizacji Twoje certyfikaty push na kolejny rok użytkowania).

Po wykonaniu tej czynności pojawił się jednak problem w tym pytaniu. Niezależnie od tego, co zrobiliśmy, otrzymaliśmy tę wiadomość e-mail od Apple po przesłaniu naszej aplikacji. Kiedy sprawdziliśmy ustawienia naszego profilu udostępniania dystrybucji w Apple Member Center, wszystko wyglądało dobrze (funkcja Push była włączona dla naszego identyfikatora aplikacji dla obu produktów i deweloperów, a nasz profil udostępniania dystrybucji był nadal połączony z tym identyfikatorem aplikacji, dosłownie właśnie utworzyliśmy nowe certyfikaty push na kolejny rok, co jest standardową praktyką).

Na koniec rozwiązałem to dla mnie:

  1. Utwórz nowy profil obsługi administracyjnej dystrybucji wskazujący na identyfikator aplikacji (pozostaw bieżący bez zmian)
  2. W Xcode odśwież swoje profile aprowizacji poprzez Ustawienia> Konta> Wybierz swoje konto> Szczegóły> Kliknij ikonę odświeżania
  3. Utwórz ręcznie plik plist uprawnień dla swojej aplikacji:
    • Menu Plik> Nowy plik ...
    • Wybierz iOS> Zasób> Lista usług
    • Nazwij nowy plik „foo.entitlements” (zwykle „foo” to nazwa docelowa)
    • Kliknij (+) obok „Plik uprawnień”, aby dodać element najwyższego poziomu (edytor listy właściwości użyje poprawnego schematu ze względu na rozszerzenie pliku)
  4. Upewnij się, że ten plik uprawnień jest używany w ustawieniach kompilacji celu (Cel> Ustawienia kompilacji> Wyszukaj „Uprawnienia”, w CODE_SIGN_ENTITLEMENTS ustaw ścieżkę do utworzonego właśnie pliku uprawnień)
  5. Upewnij się, że profil informacyjny / tożsamość podpisująca kod w obiekcie Target jest poprawnie ustawiona na odpowiedni profil udostępniania dystrybucji / tożsamość podpisywania (to powinno być oczywiste)
  6. Nie jestem w 100% pewien, czy to wpłynęło na to (nie powinno, ponieważ ustawienia docelowe zastępują ustawienia projektu, ale i tak to zrobiłem), upewnij się, że profil aprowizacji / tożsamość podpisywania Twojego projektu są zgodne
  7. W utworzonym pliku uprawnień kliknij prawym przyciskiem myszy pusty plik i wybierz „Pokaż surowe klucze / wartości”
  8. Dodaj nowy wpis do pliku uprawnień o nazwie „aps-environment” i ustaw jego wartość na „production”
  9. Jedna kluczowa uwaga: jeśli wcześniej korzystałeś z uprawnienia grup dostępu do pęku kluczy, będziesz chciał dodać ten klucz również tutaj, ponieważ z jakiegoś powodu został on wyczyszczony, gdy robiłem to ręcznie. Upewnij się, że wartość jest taka sama jak wartość użyta w poprzednich kompilacjach (możesz znaleźć wartość, znajdując poprzednią kompilację w Organizatorze, próbując przesłać do sklepu z aplikacjami, wybierz swój zespół, a następnie przed przesłaniem aplikacji dotknij strzałki obok przycisku Ciąg „(X) Entitlements”, aby rozwinąć uprawnienia i zobaczyć wartość uprawnienia grupy dostępu do pęku kluczy.
  10. Zarchiwizuj aplikację i spróbuj przesłać ją do momentu, w którym dotrzesz do ostatniego przycisku „Prześlij”. Powinieneś zobaczyć, że ta aplikacja została teraz zbudowana z nowym profilem obsługi administracyjnym utworzonym w centrum członków. Anuluj to teraz.
  11. Wróć do centrum członków Apple i usuń nowy profil informacyjny utworzony w kroku 1.
  12. Po powrocie do Xcode ponownie odśwież listę profili obsługi administracyjnej, powtarzając krok 2.
  13. Teraz zarchiwizuj ponownie aplikację i powinieneś zobaczyć, że aplikacja została zbudowana przy użyciu starego profilu udostępniania dystrybucji, którego chciałeś użyć, i poprawnie ma uprawnienia aps-environment. Prześlij i gotowe.

Wiem, że to nie jest tak szczegółowe, jak powinno, ponieważ powinno mieć zrzuty ekranu, spróbuję zaktualizować to zrzutami ekranu, kiedy będę mógł, ale na razie jestem teraz w kryzysie czasowym i chciałem uzyskać jist co tam zrobiłem. Istnieje również duża szansa, że ​​niektóre lub większość z opisanych przeze mnie kroków nie jest konieczna. Umieszczam je tutaj, ponieważ je wykonałem i mogły one doprowadzić do ostatecznego rozwiązania.

Adam Eisfeld
źródło
Dziękuję Ci. # 8 dla mnie był ustawiony na rozwój, co może być naszym problemem.
ingage
Dziękuję bardzo, zmarnowałem cały dzień na tym gównie, problem był krok 4, z jakiegoś powodu bez określenia CODE_SIGN_ENTITLEMENTS uprawnienia zostały zignorowane tylko podczas przesyłania do sklepu z aplikacjami.
Mark Kazakov,
5

sprawdź, czy Twój identyfikator aplikacji jest aktywny w trybie push na developer.apple.com w portalu obsługi administracyjnej iOS Jeśli nie, to włącz go, skonfiguruj certyfikat Push SSL dla identyfikatora aplikacji Pobierz go i zainstaluj ponownie w swoim pęku kluczy Jeszcze raz pobierz swój profil dystrybucji w swojej Xcode Liabrary

Vishal s
źródło
4

Miałem też do czynienia z tym problemem, nawet jeśli w ogóle nie korzystałem z powiadomień push w mojej aplikacji, tworzenie nowego profilu obsługi administracyjnej również nie działało dla mnie.

1. Utwórz nowy certyfikat tylko dla Ad hoc i App Store.

2. Następnie utwórz profil dystrybucyjny z tym certyfikatem i zintegruj profil z Xcode.

Następnie nowo przesłana kompilacja z tym profilem została zatwierdzona bez żadnego ostrzeżenia.

Kwiat pustyni
źródło
2
próbowałem tego - nie pomogło. wciąż otrzymuję brakujące powiadomienia push .. nie używam powiadomień push!
Adam,
2

W moim przypadku nawet utworzyłem plik myapp.profile i ustawiłem go ręcznie w xcode, a kiedy wybrałem "pokaż w wyszukiwarce" i zlokalizowałem embedded.mobileprovision i sprawdziłem, czy plik aps-environment znajduje się w pliku, błąd był wciąż tam.

Następnie udałem się do centrum programistów i stwierdziłem, że stan XC: myapp.profile jest nieprawidłowy. Zaktualizowałem go i zainstalowałem XC: myapp.profile i działało dobrze.

Myślę, że xcode próbuje zarządzać profilem i musisz sprawdzić profil aprowizacji podczas przesyłania pliku binarnego do magazynu i upewnić się, że jest poprawny. A według innych odpowiedzi może to być spowodowane z różnych powodów, więc może być naprawdę irytujące.

AKTUALIZACJA:

Po podpisaniu się za pomocą pobranego profilu i potwierdzeniu, że aps-environmentbył tam podczas próby przesłania App Store, powinieneś być w stanie zmienić profil i podmiot podpisujący kod na automatyczny i iOS Developer. Mam nadzieję, że można to poprawić w Xcode 7.

superarts.org
źródło
Sprawdziłem wszystkie profile, a także XC: profil jest aktualizowany i nie zawiera żadnego klucza środowiska ASP, wciąż mam ten sam problem. Każda pomoc zostanie doceniona. I tak, nie potrzebuję żadnego powiadomienia push zaimplementowanego w aplikacji
iOSDev
Czy możesz się upewnić, sprawdzając zawartość binarną profilu obsługi administracyjnej i sprawdzając, czy ciąg „aps-environment” jest w środku, czy nie? Jeśli jest w środku, musisz znaleźć sposób, aby się go pozbyć, w przeciwnym razie musisz upewnić się, że profil jest tym, z którym podpisujesz swoją aplikację. Tak czy inaczej, musi być problem.
superarts.org
1
Sprawdziłem to dwa razy i próbuję dowiedzieć się więcej, ale bez powodzenia. Nie ma takiego ciągu, ale po 2 dniach poszukiwań i prób udało mi się stwierdzić, że ten problem dotyczy Xcode 7 beta, a nie mojego kodu :) Ta sama kompilacja w Xcode 6.4 działa doskonale i nie ma wiadomości e-mail od Apple zgłaszającej, że problem, więc problem dotyczy Xcode 7 beta 4, a nie kodu lub profilu.
iOSDev
2

To właśnie naprawiło to dla mnie. (Próbowałem już włączać / wyłączać te funkcje, odtwarzać profil informacyjny itp.).

Na karcie Ustawienia kompilacji w sekcji Uprawnienia do podpisywania kodu mój plik .entitlements nie był odsyłaczem do wszystkich sekcji. Po dodaniu go do sekcji Any SDK błąd został rozwiązany.

wprowadź opis obrazu tutaj

mogile_oli
źródło
2

Aby rozwiązać ten problem w przypadku „wyrzuconej” aplikacji, przeszedłem do karty możliwości, włączyłem wypychanie, a następnie ponownie wyłączyłem. Spowodowało to usunięcie ustawienia „uprawnienia” APNS z pliku .entitlements.

Chris
źródło
próbowałem tego w moim „wyrzuconym” projekcie, ale nadal otrzymuję te powiadomienia
webdevbyjoss
1

Miałem ten sam problem i moim rozwiązaniem było dodanie uprawnienia do powiadomień push z Cel -> Możliwości.

Shalom Dahan
źródło
0

Zdarzyło mi się to nagle, ponieważ profil dystrybucji mojej aplikacji wygasł. Zamiast tego Xcode zaczął używać profilu wieloznacznego, który nie miał włączonego uprawnienia do powiadomień push. Nie otrzymałem żadnego ostrzeżenia. Poprawka była łatwa; Musiałem tylko wygenerować kolejny profil dystrybucji dla mojej aplikacji w Apple Developer Member Center, pobrać go i kliknąć dwukrotnie, aby zainstalować w Xcode.

ahmacleod
źródło
0

Jest tutaj kilka naprawdę dobrych sugestii.

Nawiązując do ostatniego zrzutu ekranu, który Mina dostarczyła, po początkowej archiwizacji mojej aplikacji, profil informacyjny wspomniany podczas przesyłania zawierał symbol wieloznaczny (XC. *). To jest źle.

Rozwiązanie tego problemu wymagało sporego wysiłku. Musiałem wykonać kombinację sugestii, które przedstawili Simon Woodside i Mina Fawzy.

Jeśli masz jakiekolwiek istniejące certyfikaty i profile aprowizacji związane z projektem, teraz byłby dobry moment, aby usunąć je wszystkie lokalnie i odwołać je wszystkie zdalnie. Daj sobie nowy początek.

Szczegółowa sugestia Miny Fawzy jest doskonała. Wykonanie sugestii Miny, jeśli zostanie wykonane poprawnie, powinno zająć się tobą online.

Wpisz sugestię Simona. Dwie rzeczy, które musiałem sprawdzić w swoim projekcie. Korzystając z XCode, przejdź tutaj:

PROJEKT -> BUDUJ USTAWIENIA -> PODPISYWANIE KODÓW

Przejrzyj tożsamość podpisywania kodu i profil obsługi administracyjnej . Upewnij się, że ustawiłeś te dwie właściwości na nazwę projektu. Nie pozwól XCode na automatyczne wybieranie za Ciebie i nie używaj jakiejś ogólnej tożsamości podpisywania kodu (np. Iphone Developer).

Przed podjęciem decyzji o archiwizacji upewnij się, że możesz faktycznie zainstalować aplikację na swoich urządzeniach.

Trener Roebuck
źródło
0

Największym problemem, jaki mam po włączeniu Push Notificationfrom Capabilitiesi przerobieniu wszystkich certyfikatów, jest to, że nazwa docelowa i nazwa folderu, w którym był przechowywany projekt, składały się z 2 ciągów oddzielonych spacją. Po usunięciu przestrzeni wszystko działało dobrze!

Constantin Saulenco
źródło
1
Moja aplikacja nie używa powiadomień push, ale nadal otrzymuję to ostrzeżenie od Apple. Proszę zasugerować
Chandni
0

Miałem ten problem, ponieważ mój plik uprawnień został zniekształcony z powodu wcześniejszej ręcznej edycji. Usunąłem nieprawidłowo sformatowaną składnię wpisu uprawnień, a następnie mogłem kliknąć „napraw” na karcie możliwości, a Xcode dodał uprawnienie do mojego pliku.

Oto przykład prawidłowo sformatowanego pliku uprawnień („ Runner.entitlements”):

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>aps-environment</key>
    <string>development</string>
    <key>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
</dict>
</plist>
Jonas357
źródło
0

FIX IDEA Hej, więc stworzyłem aplikację i nie korzystałem z żadnych funkcji powiadomień push, ale nadal otrzymałem e-mail. Po sprawdzeniu certyfikatów, identyfikatorów i profili identyfikatora pakietu, którego użyłem do stworzenia mojej aplikacji w Apple Store Connect w portalu dla programistów Apple, zdałem sobie sprawę, że powiadomienia push są włączone.

Musisz:

przejdź do witryny logowania programisty Apple, gdzie możesz zarządzać swoimi certyfikatami, tak jak 2. wybierz kartę „Certyfikaty, identyfikatory i profile” po prawej stronie 3. teraz wybierz „Identyfikatory” 4. i identyfikator pakietu z listy po prawej 5. teraz przewiń w dół, aż zobaczysz powiadomienie push 6. wyłącz je 7. zarchiwizuj kompilację i prześlij ją ponownie do Apple Store Connect

Mam nadzieję, że to pomoże!

Qooplite
źródło