2016-10-11 1 views
0

Я пытаюсь отправить токен, который я получил в didRegisterForRemoteNotificationsWithDeviceToken, на сервер. Но я получил ошибку при отправке: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Foundation._SwiftNSData). Для запросов я использую рамки Alamofire. Мой код:Отправка маркера push-уведомлений на сервер. Alamofire error

func signUp(withToken token: Data, completion: (Error) -> Void) { 
    let parameters: Parameters = ["registration_id": token] 
    print("token = \(token)") 
    Alamofire.request(baseUrl + signUpPath, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON(completionHandler: {response in 
    }) 
} 

Print показывает мне: token = 32 bytes. Какие-либо предложения? Возможно, мне нужны дополнительные шаги с Data, прежде чем отправлять их на сервер?

UPDATE

Я попытался преобразовать маркер NSString типа, но получил nil

let tokenNSString: NSString? = NSString(data: token, encoding: String.Encoding.utf8.rawValue) 
print("nsstrgin from token = \(tokenNSString)") 
+1

Вы можете скрывать NSData в String и отправлять его на сервер (http://stackoverflow.com/questions/4994302/didregisterforremotenotificationswithdevicetoken-doesnt-invoke-on-calling-regi). Если вы хотите отправить его в качестве данных на сервер, попробуйте многостраничную загрузку (http://stackoverflow.com/questions/26121827/uploading-file-with-parameters-using-alamofire). – vishnuvarthan

+0

@vishnuvarthan см. Мое обновление, пожалуйста. – RomanHouse

+0

Используйте это для преобразования в строку. http://stackoverflow.com/questions/9372815/how-can-i-convert-my-device-token-nsdata-into-an-nsstring – vishnuvarthan

ответ

-1

deviceToken вы получаете внутри AppDelegate вашего проекта didRegisterForRemoteNotificationsWithDeviceToken является NSData объектом. Чтобы извлечь фактический токен String из этого объекта NSData, используйте следующий код.

let tokenChars = UnsafePointer<CChar>(deviceToken.bytes) 
    var tokenString: String = "" 
    for i in 0..<deviceToken.length { 
    tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]]) 
    } 
    print("This is My Device Token for Push notification -", tokenString) 

Теперь, tokenString - это ваш фактический токен, который вы ищете. Попробуйте отправить это на свой сервер вместе с любым ключом.

BTW Я использую Xcode 7.3.1 с Swift 2.2. Не стесняйтесь изменять это в соответствии с вашими требованиями.

Спасибо, Надеюсь, это помогло.

+0

Почему объект NSData не корректен? – vishnuvarthan

+0

Вы хотите отправить строку токена, поэтому я пытался объяснить процедуру. – Tuhin

+0

Вы можете отправить свой токен как nsdata, а должен ли он быть только строкой?, Есть ли недостаток отправки токена в качестве данных? – vishnuvarthan