iOS 7에서 자동 푸시 알림이 작동하지 않습니다.


87

WWDC 2013의 "멀티 태스킹의 새로운 기능"프레젠테이션에는 자동 푸시 알림에 대한 섹션이 있습니다. 똑바로 보인다. 프레젠테이션에 따르면 사용 가능한 콘텐츠 만 1로 설정 한 상태에서 APS 페이로드를 보내면 사용자에게 알림이 표시되지 않습니다.

// A. This doesn't work
{ 
  aps: { 
          content-available: 1 
       }
}

내 테스트에 따르면 푸시가 수신되지 않아 작동하지 않는 것으로 나타났습니다. 그러나 사운드 속성을 포함하고 경고 속성을 제외하면 작동합니다 (더 이상 조용하지는 않지만).

// B. This works
{ 
  aps: {
          content-available: 1,
          sound: "default"
       }
}

그러나 무음 오디오를 재생하도록 사운드 속성을 변경하면 무음 푸시를 흉내낼 수 있습니다.

// C. This works too.
{ 
  aps: {
          content-available: 1,
          sound: "silence.wav"
       }
}

아는 사람 있나요:

  1. 이것이 버그라면?
  2. 그리고 B 또는 C가 원격 알림으로 취급되고 있다고 가정하는 것이 옳다면 (사운드 속성이 필요한 자동 푸시의 버그가 아님)? 그렇다면 이는 무음 푸시처럼 속도 제한이 없다는 것을 의미합니다. 그래서 나는 그것에 의존해서는 안됩니다.
  3. 속도 제한은 무엇입니까 (N은 X 초마다 푸시 등)?

미리 감사드립니다.

추가 정보로 편집

A의 경우 애플리케이션 상태는 중요하지 않습니다. 알림이 수신되지 않습니다.

아래와 같이 속성과 값을 따옴표로 묶는 경우에만 B와 C가 작동하는 것처럼 보입니다.

{"aps":{"content-available": 1, "sound":"silent.wav"}}

그리고 알림 은 상태에 관계없이 application : didReceiveRemoteNotification : fetchCompletionHandler :에 도착합니다 .


어떤 앱 상태에서도 작동하지 않습니까? 저에게 " A "는 앱이 포 그라운드에서 실행되는 한 작동합니다 (didReceiveRemoteNotification이 호출 됨). 그러나 앱이 실행되지 않을 때 앱에 알림이 표시되지 않습니다 ( " B "를 시도 할 때 소리 만 들림 ). " B "또는 " C " 를 사용할 때 앱이 백그라운드에서 깨어나나요 (didReceiveRemoteNotification) ?
DerBernie 2013 년

나는 비슷한 행동을보고 있는데, 내가 한동안 이것을 시도하고 처음에 앱을 올바르게 설정하지 않았기 때문에 Apple이 설정을 올바르게하기 전에 나를 제한했을 수 있기 때문일 수 있다고 생각합니다.
nickthedude

4
야 ... 내가 당신에게 10 표를 줄 수 있으면 좋겠다
마이클 와일즈

첫 번째 옵션이 작동해야하므로 > Background fetch에서 확인란을 선택 했는지 확인하십시오 . 무음 푸시는 사운드 속성이 필요 하지 않으며 애플리케이션이 백그라운드 / 포 그라운드에서 실행 중이거나 실행되지 않는 경우에도 항상 수신 됩니다. Project CapabilitiesBackground Modesapplication:didReceiveRemoteNotification:fetchCompletionHandler:
IgniteCoders

답변:


73

이것은 또한 작동하며 도착했을 때 소리가 나지 않습니다.

{
    aps = {
        "content-available" : 1,
        sound : ""
    };
}

편집하다

이 문제가있는 사람들은이 링크 를 확인하는 것이 좋습니다. 나는 모든 앱 상태와 자동 푸시가 수신되고 수신되지 않을 때를 다루는 Apple 개발자 포럼의 스레드에 참여했습니다.


링크 주셔서 감사합니다. ADC의 포럼에서 이에 대해 논의하는 여러 스레드가 있습니다. 결론 : 장치를 다시 시작한 후 버그가 있습니다. Apple 담당자는 업데이트에서 수정해야합니다 (결국).
SG1

3
iOS7에서는 사운드 / 경고 키 없이도 훌륭하게 작동합니다. 사용 가능한 콘텐츠는 충분한 열쇠입니다! 그러나 iOS8에서는 "content-available"외에 비어 있지 않은 문자열로 경고 키를 설정하더라도 "alert"문자열이있는 배너 만 표시되지만 "content-available"은 몇 가지 이유로 무시됩니다.
malex 2015 년

나는 추가 된 소리가 있든 없든 알림에서 앱을 시작하는 데 성공했습니다. 소리, 경고 또는 배지 (비어 있거나 없음)를 설정하면 기본 알림 우선 순위가 10으로 높아져 안정성이 높아질 수 있습니다. pans-priority에 대해 Apple이 말하는 것을보십시오 : developer.apple.com/library/ios/documentation/… 기본 우선 순위는 10 (높음)이지만 콘텐츠 사용 가능 키만있는 푸시 알림에 이것을 사용하는 것은 오류입니다. 따라서 콘텐츠 사용 가능 키만 설정된 경우 기본값이 5로 설정 될 수 있습니다.
EMEM

1
iOS10에서는 작동하지 않습니다. 나는 무언가를 "소리"로 밀어야한다.
Stony

나를 위해 iOS10에서 일했습니다. 하지만 지금은 iOS11에서 작동하지 않습니다
Slav

30

그래서 어제이 문제를 발견했고, 빈 문자열로 설정된 사운드와 함께 페이로드를 보내려고 시도한 후에도 여전히 장치에서 진동 / 사운드가 발생했습니다. 결국 저는 Urban Airship의 블로그 게시물에서 다음을 보내야한다고 제안했습니다.

{ priority: 5 }

한 번도 본 적이없는 푸시 알림에서. 푸시 알림에 대한 Apple 문서를 숙독 한 후이 페이지에서 우연히 발견했습니다.

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html

우선 순위가 "5"또는 "10"으로 설정되어야 함을 나타내며 다음을 설명합니다.

알림의 우선 순위입니다. 다음 값 중 하나를 제공하십시오.

10 푸시 메시지가 즉시 전송됩니다.

푸시 알림은 장치에서 경고, 소리 또는 배지를 트리거해야합니다. 콘텐츠 사용 가능 키만 포함 된 푸시에이 우선 순위를 사용하는 것은 오류입니다.

5 푸시 메시지는 수신 장치의 전원을 절약하는 시간에 전송됩니다.

궁극적으로 다음 형식으로 배지 카운트 (알림에서도 똑같이 할 수있을 것 같음)로 작동하는 자동 푸시 알림을받을 수있었습니다.

    aps =     {
        badge = 7;
        "content-available" = 1;
        priority = 5;
    };

좋은 대답 데이브! "콘텐츠 사용 가능 키만 포함 된 푸시에이 우선 순위 [10]을 사용하는 것은 오류입니다."동안 우선 순위 5가 허용됩니다. developer.apple.com/library/ios/documentation/...
rjobidon

4
페이로드에 우선 순위가 포함되어야합니까? IMO 그것은 당신이 보내는 푸시에서 별도의 1 바이트입니다.
Foriger 2014

6
페이로드에 우선 순위가 설정되지 않습니다. 이것은 바이너리 알림에서 설정됩니다.
Sandy D.

10

경고 속성으로 빈 문자열을 설정하려고 시도했지만 작동했습니다.

{
    aps =     {
        "content-available" = 1;
        "alert" = "";
    };
}

APNS가 푸시 페이로드의 유효성을 검사하기 위해이 속성의 존재를 확인하는 것 같습니다. 흥미롭게도 그들은 실제 내용을 확인하지 않습니다. 그래도 약간 엉뚱한 것 같습니다 ...


alert=""페이로드에 포함 된 이 솔루션 은 iOS 9.0. 는 sound=""대신 작동하지 않았다.
loretoparisi

5

도구를 사용합니다. Knuff 가 내 장치로 푸시 알림을 보냅니다.

다음과 같이 보입니다. 여기에 이미지 설명 입력

그런 다음이 예제를 시도했습니다.

모두 작동하지만 우선 순위 10을 설정해야합니다!

따라서 도구를 사용하지 않는 경우에도주의해야합니다.


예 :

  • 경고 없음, 소리 없음

{
    "aps":{
        "content-available":1,
    }
}

  • 경고 만

{
    "aps":{
        "content-available":1,
        "alert":""
    }
}

  • 소리 만

{
    "aps":{
        "content-available":1,
        "sound":""
    }
}


4

이것은 나를 위해 작동합니다.

{ 
  aps: { 
          content-available: 1 
       }
}

체크 Background fetch박스 를 체크하면 Project Capabilities>Background Modes


2

나는 같은 문제를보고있다. "content-available": 1로 푸시를 보내고 다른 속성이 설정되지 않은 경우 알림이 수신되지 않습니다. 다른 속성을 추가하면 완벽하게 작동합니다.

일시적인 해결책으로 배지 속성을 아이콘에 추가하는 것 외에는 사용자에게 경고하지 않기 때문에 배지 속성을 추가하고 있습니다.

더 나은 해결책을 찾았다면 알려주세요.


1

우선 순위는 바이너리 스트림에서 하나의 항목으로 설정되어야하지만 페이로드 json 문자열에서는 설정되지 않아야합니다. 다음과 같이 우선 순위를 설정하는 데 최신 유형 2 형식 만 사용할 수 있습니다.

$token      = chr(1) . pack('n', 32)     . pack('H*', $deviceToken);
$payload    = chr(2) . pack('n', strlen($json)) . $json;
$identifier = chr(3) . pack('n', 4)      . pack('N', $notification);
$expiration = chr(4) . pack('n', 4)      . pack('N', time()+86400);
$priority   = chr(5) . pack('n', 1)      . chr($priority);

$frame_data = $token.$payload.$identifier.$expiration.$priority;
$frame_length = strlen(bin2hex($frame_data))/2;

$msg = chr(2) . pack('N', $frame_length) . $frame_data;

원격 알림 바이너리 메시지의 형식 유형 (첫 번째 바이트) :

0-단순 (이전) 1-향상된 (이전) 2-더 많은 매개 변수가있는 최신 (신규)


0

아아! 또한 내 머리카락을 잡아 당깁니다. 이것은 작동하지 않는 페이로드의 또 다른 예만큼 답이 아닙니다. 장치가 절전 모드 인 경우 경고 텍스트가 표시되지만 didReceiveRemoteNotification 메서드는 호출되지 않습니다.

 {"aps":
    {  "alert":"alert!",
       "sound":"default",
       "content-available" : 1},
    "content-id":21482,
    "apt":"1"
}

"apt"는 알림 유형을 나타내는 데 사용하는 사용자 정의 필드입니다.


2
앱이 백그라운드에 있고 'alert'속성을 제거하면 application : didReceiveRemoteNotification : fetchCompletionHandler에서 콜백을 수신해야합니다.
mkwon

@mkwon 및 BG + invoke application : didReceiveRemoteNotification : fetchCompletionHand‌ ler :? Tnx
DaNLtR


0

우선 순위를 5로 설정하면 효과가 없었지만 사운드 또는 경고를 빈 문자열로 설정하면 알림이 우선 순위가 높은 알림으로 처리됩니다.


0

알림이 전달되지 않는 것과 동일한 문제가 발생했습니다. 우리의 경우에는 자동 푸시를 사용하여 배지 번호를 업데이트했습니다. 경고 (본문 및 제목) 및 소리에 빈 문자열을 설정하면 작동하지만 키가 없으면 실패했습니다. 다음은 사운드 또는 경고없이 배지를 업데이트하는 것입니다 (didReceiveRemoteNotification의 결과 userInfo 사전 로그).

{
    aps =     {
        alert =         {
            body = "";
            title = "";
        };
        badge = 103;
        "content-available" = 1;
        sound = "";
    };
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.