2016-08-31 2 views
0

알림을 보내기 위해 Direct Batch send API를 구현하려고합니다. 우편 배달부를 사용하여 요청을 시뮬레이션합니다. 그리고 잘못된 인증 토큰 오류를 반환합니다.직접 일괄 처리 구현 방법 Microsoft Azure API

POST 요청 :

https://mynamespace.servicebus.windows.net/myHub/messages/ $ 일괄 직접 & API 버전 = 아래의 헤더와 2015-08

:

콘텐츠 형식 : 응용 프로그램/JSON 인증 : SharedAccessSignature SR = https://mynamespace.servicebus.windows.net/myHub/messages/ $ 배치? 직접 % 3fapi 버전 % 3d2015-01 & sig = xxxx & se = xxxx & skn = DefaultFullSharedAccessSignature

그럼이 오류를 해결하는 방법은 무엇입니까?

POST https://{Namespace}.servicebus.windows.net/{Notification Hub}/messages/$batch?direct&api-version=2015-08 HTTP/1.1 
Content-Type: multipart/mixed; boundary="simple-boundary" 
Authorization: SharedAccessSignature sr=https%3a%2f%2f{Namespace}.servicebus.windows.net%2f{Notification Hub}%2fmessages%2f%24batch%3fdirect%26api-version%3d2015-08&sig={Signature}&skn=DefaultFullSharedAccessSignature 
ServiceBusNotification-Format: apple 
Host: {Namespace}.servicebus.windows.net 
Content-Length: 511 
Expect: 100-continue 
Connection: Keep-Alive 


--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=notification 

{"aps":{"alert":"Hello using APNS via Direct Batch Send!!!"}} 
--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=devices 

['Device Token1','Device Token2','Device Token3'] 
--simple-boundary-- 


--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=notification 

{"aps":{"alert":"Hello using APNS via Direct Batch Send!!!"}} 
--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=devices 

['Device Token1','Device Token2','Device Token3'] 
--simple-boundary-- 

방법 이죠 그것을 테스트하기 :

또한 APNS 예 있는가?

답변

0

NotificationHubs SDK를 사용하여 일괄 전송 보내기를 시도 했습니까? 그렇다면 SDK의 http 요청과 Postman의 전송 내용을 비교할 수 있습니까?

Authorization 헤더를 채우는 것에 대한 문서에는 몇 가지 부정확 한 내용이 들어 있습니다. 아래의 C# 코드는 올바른 방법을 보여줍니다.

string GenerateSasToken(Uri uri, string sasKeyName, string sasKeyValue) 
{ 
    var targetUri = HttpUtility.UrlEncode(uri.ToString().ToLower(), Encoding.UTF8).ToLower(); 
    var expiresOnDate = Convert.ToInt64(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds) + 60*60 /* one hour */; 
    var toSign = targetUri + "\n" + expiresOnDate; 

    var keyBytes = Encoding.UTF8.GetBytes(sasKeyValue); 
    var mac = new HMACSHA256(keyBytes); 
    mac.Initialize(); 
    var rawHmac = mac.ComputeHash(Encoding.UTF8.GetBytes(toSign)); 
    var signature = HttpUtility.UrlEncode(Convert.ToBase64String(rawHmac), Encoding.UTF8); 

    var token = "SharedAccessSignature sr=" + targetUri + "&sig=" + signature + "&se=" + expiresOnDate + "&skn=" + sasKeyName; 
    return token; 
}