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"
}
}
아는 사람 있나요:
- 이것이 버그라면?
- 그리고 B 또는 C가 원격 알림으로 취급되고 있다고 가정하는 것이 옳다면 (사운드 속성이 필요한 자동 푸시의 버그가 아님)? 그렇다면 이는 무음 푸시처럼 속도 제한이 없다는 것을 의미합니다. 그래서 나는 그것에 의존해서는 안됩니다.
- 속도 제한은 무엇입니까 (N은 X 초마다 푸시 등)?
미리 감사드립니다.
추가 정보로 편집
A의 경우 애플리케이션 상태는 중요하지 않습니다. 알림이 수신되지 않습니다.
아래와 같이 속성과 값을 따옴표로 묶는 경우에만 B와 C가 작동하는 것처럼 보입니다.
{"aps":{"content-available": 1, "sound":"silent.wav"}}
그리고 알림 은 상태에 관계없이 application : didReceiveRemoteNotification : fetchCompletionHandler :에 도착합니다 .
답변
이것은 또한 작동하며 도착했을 때 소리가 나지 않습니다.
{
aps = {
"content-available" : 1,
sound : ""
};
}
편집하다
이 문제가있는 사람들은이 링크 를 확인하는 것이 좋습니다. 나는 모든 앱 상태와 자동 푸시가 수신되고 수신되지 않을 때를 다루는 Apple 개발자 포럼의 스레드에 참여했습니다.
답변
그래서 어제이 문제를 발견했고, 빈 문자열로 설정된 사운드와 함께 페이로드를 보내려고 시도한 후에도 여전히 장치에서 진동 / 사운드가 발생했습니다. 결국 저는 Urban Airship의 블로그 게시물에서 다음을 보내야한다고 제안했습니다.
{ priority: 5 }
한 번도 본 적이없는 푸시 알림에서. 푸시 알림에 대한 Apple 문서를 숙독 한 후이 페이지에서 우연히 발견했습니다.
우선 순위가 “5”또는 “10”으로 설정되어야 함을 나타내며 다음을 설명합니다.
알림의 우선 순위입니다. 다음 값 중 하나를 제공하십시오.
10 푸시 메시지가 즉시 전송됩니다.
푸시 알림은 장치에서 경고, 소리 또는 배지를 트리거해야합니다. 콘텐츠 사용 가능 키만 포함 된 푸시에이 우선 순위를 사용하는 것은 오류입니다.
5 푸시 메시지는 수신 장치의 전원을 절약하는 시간에 전송됩니다.
궁극적으로 다음 형식으로 배지 카운트 (알림에서도 똑같이 할 수있을 것 같음)로 작동하는 자동 푸시 알림을받을 수있었습니다.
aps = {
badge = 7;
"content-available" = 1;
priority = 5;
};
답변
경고 속성으로 빈 문자열을 설정하려고 시도했지만 작동했습니다.
{
aps = {
"content-available" = 1;
"alert" = "";
};
}
APNS가 푸시 페이로드의 유효성을 검사하기 위해이 속성의 존재를 확인하는 것 같습니다. 흥미롭게도 그들은 실제 내용을 확인하지 않습니다. 그래도 약간 엉뚱한 것 같습니다 …
답변
도구를 사용합니다. Knuff 가 내 장치로 푸시 알림을 보냅니다.
그런 다음이 예제를 시도했습니다.
모두 작동하지만 우선 순위 10을 설정해야합니다!
따라서 도구를 사용하지 않는 경우에도주의해야합니다.
예 :
- 경고 없음, 소리 없음
{
"aps":{
"content-available":1,
}
}
- 경고 만
{
"aps":{
"content-available":1,
"alert":""
}
}
- 소리 만
{
"aps":{
"content-available":1,
"sound":""
}
}
답변
이것은 나를 위해 작동합니다.
{
aps: {
content-available: 1
}
}
체크 Background fetch
박스 를 체크하면 Project Capabilities
>Background Modes
답변
나는 같은 문제를보고있다. “content-available”: 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-더 많은 매개 변수가있는 최신 (신규)