[ios] iPhone없이 Apple 푸시 알림 서비스를 테스트하려면 어떻게해야합니까?

iPhone 애플리케이션없이 Apple Push Notification Services를 테스트 할 수 있습니까? (Windows에서 에뮬레이터를 만드시겠습니까?)

그렇지 않은 경우 어떻게 테스트 할 수 있습니까? 이를 위해 컴파일 된 무료 샘플 애플리케이션이 있습니까?

서버 공급자를 만들었지 만 기능을 테스트해야합니다.



답변

이 답변은 구식 입니다. 2020 / Xcode 11.4부터 시뮬레이터에서 푸시 알림을 테스트 할 수 있습니다.

아래 답변 에서 전체 설명을 참조하십시오.

죄송합니다.이 기능을 테스트하려면 하드웨어를 찾아야합니다.

시뮬레이터에서는 푸시 알림을 사용할 수 없습니다. iTunes Connect의 프로비저닝 프로파일이 필요하므로 장치에 설치해야합니다. 그것은 또한 당신이 아마도 애플 아이폰 개발자 프로그램에 가입하고 $ 99를 지불해야한다는 것을 의미합니다.

밝은면에서는 iPhone OS 3.0 업데이트를 통해 1 세대 iPhone을 포함한 모든 장치에서이 기능을 테스트 할 수 있습니다.


답변

실제 푸시 알림은 테스트 할 수 없습니다. 그러나 프로그래밍 방식으로 하나를 만들고 AppDelegate의 메서드를 수동으로 트리거하여 시뮬레이션 된 푸시 알림에 대한 앱의 응답 을 테스트 할 수 있습니다 - application:application didReceiveRemoteNotification:notification.

다른 클래스 (예 : UIViewController)에서이를 트리거하려면 :

[[[UIApplication sharedApplication] delegate]
                    application:[UIApplication sharedApplication]
   didReceiveRemoteNotification:testNotification];

testNotification은 실제 알림과 동일한 형식이어야합니다. 즉, 속성 목록 개체와 NSNull이 포함 된 NSDictionary입니다.

testNotification위의 정보 를 제공하는 방법의 예는 다음과 같습니다 .

NSMutableDictionary *notification = [[NSMutableDictionary alloc] init];
[notification setValue:@"Test" forKey:@"alert"];
[notification setValue:@"default" forKey:@"sound"];

NSMutableDictionary *testNotification = [[NSMutableDictionary alloc] init];
[testNotification setValue:notification forKey:@"aps"];

작업 할 합리적인 알림 NSDictionary를 만들어야합니다.


답변

요즘에는 이 라이브러리로 푸시 알림을 테스트 할 수 있습니다 .

터미널을 통해 푸시를 보내는 것은 매우 쉽습니다.

echo -n '{"message":"message"}' | nc -4u -w1 localhost 9930

echo -n '{"aps":{"alert" : "message","badge" : 99,"sound" : "default"}, "myField" : 54758}' | nc -4u -w1 localhost 9930


답변

Xcode 11.4 iOS 시뮬레이터를 사용하여 푸시 알림 테스트

현재 엑스 코드 11.4 ,으로 푸시 알림을 시뮬레이션 할 수있게되었습니다 드래그 앤 드롭.apns 아이폰 OS 시뮬레이터에 파일을. 엑스 코드 11.4 릴리스 노트는 새로운 기능에 대해 할 말이 다음을 가지고 :

Simulator는 백그라운드 콘텐츠 가져 오기 알림을 포함한 원격 푸시 알림 시뮬레이션을 지원합니다. Simulator에서 APNs 파일을 대상 시뮬레이터로 끌어다 놓습니다 . 파일은 “aps”키를 포함하여 유효한 Apple Push Notification Service 페이로드가있는 JSON 파일이어야합니다 . 또한 최상위 “시뮬레이터 대상 번들”을 포함해야합니다. 대상 응용 프로그램의 번들 식별자와 일치하는 문자열 값이있는 을 .

simctl시뮬레이션 된 푸시 알림 전송도 지원합니다. 파일에 “Simulator Target Bundle”이 포함 된 경우 번들 식별자가 필요하지 않습니다. 그렇지 않으면 인수로 제공해야합니다 (8164566).

xcrun simctl push <device> com.example.my-app ExamplePush.apns

다음은 .apns시스템 설정 앱을 대상으로하는 이러한 파일 의 예입니다 .

{
    "Simulator Target Bundle": "com.apple.Preferences",
    "aps": {
        "alert": "This is a simulated notification!",
        "badge": 3,
        "sound": "default"
    }
}

이것을 대상 시뮬레이터로 드래그 앤 드롭하면 알림이 표시되고 배지가 설정됩니다.

iOS 시뮬레이터에 대한 알림

이제 디버깅을 위해 이것을 사용하기 만해야 을 변경 Simulator Target Bundle하여 자신의 응용 프로그램의 식별자페이로드를 조정 하여 디버깅 요구에!


답변

시뮬레이터는 푸시 알림을 수행하지 않습니다.

그리고 서버에서 푸시하려면 푸시 할 디바이스와 해당 디바이스의 앱이 있어야합니다.

토큰에는 앱 ID와 기기 ID가 포함됩니다.


답변

Apple은 시뮬레이터에 대한 푸시 알림을 지원합니다. iOS 13.4 이상 또는 Xcode 11.4 이상.

일반적으로 Xcode 프로젝트를 만들고 사용자 알림 및 권한 부여 권한을 구현합니다.

시뮬레이터 iOS 13.4 이상 에서 애플리케이션을 실행합니다 .

애플리케이션을 백그라운드에 둡니다.

  1. payload.apns ” 라는 이름의 APNS 페이로드 파일을 만듭니다.
{
  "aps": {
    "alert": {
      "title": "Test Push",
      "body": "Success! Push notification in simulator! ?",
      "sound": "default"
    },
    "badge": 10
  },
  "Simulator Target Bundle": "com.company.app"
}
  1. iOS 시뮬레이터로 드래그 앤 드롭합니다.

지금 당신의 푸시 알림이 시뮬레이터에 나타날 것입니다.

또한 터미널별로 푸시 알림을 시뮬레이션 할 수 있습니다.

Window-> Devices and Simulators 를 열어 시뮬레이터 식별자를 얻고 대상 시뮬레이터를 선택한 다음 마우스 오른쪽 버튼을 클릭하고 식별자를 복사합니다.

이제 다음과 같은 터미널 명령을 작성하십시오.

xcrun simctl push <simulator-identifier> <path-to-payload-file>

전의:

xcrun simctl push 27A23727-45A9-4C12-BE29-8C0E6D1E5360 payload.apns

이 명령을 실행하고 시뮬레이터에서 푸시 알림을 시뮬레이션하십시오.


답변

당신은 사용해야합니다

NSString *notificationString = @"{\"aps\":{\"alert\":\"Test alert\",\"sound\":\"default\"}}";

NSData *notificationData = [notificationString dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *testNotification = [NSJSONSerialization JSONObjectWithData:notificationData options:0 error:&error];

[[[UIApplication sharedApplication] delegate] application:[UIApplication sharedApplication] didReceiveRemoteNotification:testNotification  fetchCompletionHandler:nil];