2

Production APNS 인증서를 사용하여 APNS가 프로덕션 모드로 구성된 Azure Notification Hub가 설정되었습니다. 우리는 테스트 장치를 TestFlight/Production 빌드 및 인증서를 사용하여 APNS에 등록한 다음 dealer-1 태그를 사용하여 ANH에 등록합니다. APNS를 직접 사용할 때 생산 인증서와 등록 된 장치 ID를 사용하여 알림을 보낼 수 있지만 '테스트 보내기'를 사용하면 1 대의 장치 (또는 등록한 많은 장치)에 '보내기 성공'메시지가 전송됩니다. 알림을받지 못했습니다. 'Test Send'를 다시 실행하면 0 개의 장치로 보내집니다.Push (APNS) 후 알림 허브 장치가 사라짐

로그에 테스트 당 전송 당 'APNS 오류'가 표시됩니다. 오류가 실제로 무엇인지를 볼 수있는 방법을 찾을 수 없으므로 이것은 절대적으로 쓸모없는 척도입니다.

나는 모든 문제 해결 단계를 거쳤으며 여러 번 '생산'에 모든 것이 설정되었음을 확인했습니다.

  • ..

    샌드 박스 인증서를 등록하고 생산에 변경 :

    는 답변의 라인을 따라왔다, 다른 질문을 검토 데. 불행히도 우리는 이러한 잠재적 인 문제를 해결하기 위해 Production으로 처음부터이 허브를 만들었습니다.
  • .. 샌드 박스 장치 (및 토큰)를 프로덕션 인증서에 등록합니다. 불행하게도 저는 이것을 엄격히 통제했으며 우리가 ANH에 대한 TestFlight 빌드 (따라서 Production)만을 등록하도록했습니다.
  • .. 잘못된 인증서를 업로드하고 있습니다. 위의 푸시 알림 테스터에서 인증서가 정확하고 (지문 확인, 다시 업로드 등) 프로덕션 APNS 끝점을 통해 장치로 보내도록 확인했습니다.

리소스 이름은 다음 여덟 기술/반응 푸시 통지 허브

다음

인앱 등록 과정은 다음과 푸시 알림

  • 장치 레지스터를
  • 등록 이벤트는 iOS 프로젝트 (AppDelegate 이벤트)에서 처리됩니다 ..

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) 
    { 
        //base.RegisteredForRemoteNotifications(application, deviceToken); 
        App.ConfigurePushNotifications(deviceToken.ToString()); 
    } 
    
  • ConfigurePushNotifications이

    public static void ConfigurePushNotifications(string deviceToken) 
    { 
        var azureComm = DependencyService.Get<Interop.IAzureCommunication>(); 
        azureComm.RegisterForPushTags(
         "sb://eight-technology.servicebus.windows.net/", 
         ".. token ..", 
         "react-push-notification-hub", 
         deviceToken, 
         StateManager.SelectedNodes.Select(m => "dealer-" + m).ToArray()); 
    } 
    
  • 이 구현은

    public class AzureCommunication : DealerwebReact.Interop.IAzureCommunication 
    { 
        public void RegisterForPushTags(string url, string key, string hubName, string deviceToken, string[] tags) 
        { 
         var cs = SBConnectionString.CreateListenAccess(new NSUrl(url), key); 
    
         var hub = new SBNotificationHub(cs, hubName); 
         hub.RegisterNativeAsync(deviceToken, new NSSet(tags), err => 
         { 
          if (err != null) 
           Console.WriteLine("Error: " + err.Description); 
          else 
           Console.WriteLine("Success"); 
         }); 
        } 
    } 
    

답변

2

몇 일 후 좌절과 Nikita G. 및 hvaughan3의 도움 덕분에 마침내 내 문제의 근본 원인에 도달했습니다. 예상 한대로 실제 윤곽이 드러난 문제는 아니지만 Xamarin Forms를 사용하여 교차 플랫폼을 처리하는 방식과 관련이있었습니다.

즉, 토큰을 string 클래스로 저장했습니다. RegisteredForRemoteNotifications에 iOS 장치 등록의 일부로 수신 된 NSDataToString() 메서드를 사용하며 ANH 로의 전송과 호환되지 않습니다. 또한, Azure 라이브러리의 RegisterNativeAsync 메서드는 Xamarin이 경고 또는 오류없이 문자열을 변형 할 수 있다고 가정하는 NSData이 필요합니다. 따라서이 두 가지가 다소 호환되지 않습니다.

기본적으로 크로스 플랫폼 기능을 유지하기 위해 토큰을 object으로 전달하고 푸시 구성 방법의 플랫폼 별 구현에서 원래 유형으로 다시 변환합니다. 는 자 마린 양식 층을 통과하는 동안 그대로 유지되도록

이 우리의 등록 방법은 지금과 같다

에서, NSData 종류의 명시 적 사용을주의 :

public void RegisterForPushTags(string url, string key, string hubName, object deviceToken, string[] tags) 
    { 
     var cs = SBConnectionString.CreateListenAccess(new NSUrl(url), key); 

     var hub = new SBNotificationHub(cs, hubName); 
     hub.RegisterNativeAsync((NSData)deviceToken, new NSSet(tags), err => 
     { 
      if (err != null) 
       Console.WriteLine("Error: " + err.Description); 
      else 
       Console.WriteLine("Success"); 
     }); 
    } 
1

인가에서 제공하는 샘플 코드에 따라 꽤 많이 (아이폰 OS 프로젝트에 포함)되어 있습니다 .. XF 공유 프로젝트에 this the guide 당신은 사용 문제 해결을 위해?

기기를 등록하기 전에 APN 핸들에서 문자열 (또는 다른 유형)을 처리 할 수 ​​있습니까? 'APNS 오류'가 '유효하지 않은 토큰 크기'인 것 같습니다. 귀하의 코드에서 어떤 일이 일어나고 있는지 알지 못하기 때문에 정확히 무엇이 될지 제안하는 것은 어렵지만 어쩌면 당신을 도울 것입니다.

+0

감사 니키타 - 그건 내가 약 연주 가이드이었다 예. 내 코드는 약간의 코드로 업데이트 하겠지만, APN 토큰을 전혀 조작하지는 않는다. 클래스에 NSString으로 전달된다. 로그를 기록 할 때 APNS Tester에서 사용할 수있는 정확한 내용으로 믿어지는 '<... ... ...>'형식입니다. 전혀 바뀌어야합니까? –

+0

코드 제공 - 등록과 관련하여 상당히 솔직합니다. 어떤 아이디어라도 대단히 감사하겠습니다. 장치 토큰의 예 :'<97e0614c 3c18b3d7 a8d5274b ca7037dc 3e00e703 635d5172 3c755d9c 8616f375> –

+0

@RudiVisser 지금까지 질문을 보지 못했습니다. 실제로는 이하와 같은 문자와 공백을 제거합니다 :'deviceToken.ToString(). Replace ("<", string.Empty) .Replace (">", string.Empty) .Replace (" ", string.Empty); ' – hvaughan3

1

장치가 올바르게 등록 될 때 비슷한 일이 발생했지만 알림이 전송 되 자마자 장치가 목록에서 사라집니다. 알림 허브에 구성된 APNS 인증서가 항상 앱 ID에 제대로 연결되지 않았거나 앱이 올바른 프로비저닝 프로필로 서명되지 않았기 때문에 문제가되는 것으로 나타났습니다.

+0

고마워 - 나는 비슷한 문제가 될 수도 있다고 생각했다. , 그런 다음 인증서가 APNS와 직접 작동하지 않을 수 있습니까? –

+0

@RudiVisser 맞아요, 그 질문의 일부입니다. 잘 모르겠습니다. APNS를 통해 직접 알림을 보내려고 한 적이 없었습니다. 그 앞에서 더 도움이되기를 바랍니다. 다운로드 및 [Service Bus Explorer] (https://code.msdn.microsoft.com/windowsapps/Service-Bus-Explorer-f2abca5a)를 사용해 보셨습니까? Azure 사이트가 등록 된 장치의 관점에서하는 것보다 더 많은 정보를 보여줍니다. 최근에 그것을 사용하지 않아서 그것이 당신의 상황에 직접적으로 도움이되는지 아닌지 말할 수 없습니다. – hvaughan3

+0

나는 그것을 시도하고 응용 프로그램이 작동하지 않았지만 VS의 등록 된 장치를보고 올바르게 보낸 토큰과 태그로 등록 된 장치를 보여주었습니다. 모든 것은 단지 이상하고 극단적으로 실망 스럽습니다. ( –