2017-01-05 6 views
3

나는 (이번 달에 추락하기 때문에 Parse없이) 한 시간을 찾고있다.iOS에서 메시지 알림을 보내는 방법은 무엇입니까?

한 사용자가 다른 특정 사용자에게 푸시 알림 메시지를 보낼 수있는 앱에서 수행하려고합니다. 그것을 구현하는 옵션은 무엇

?

감사합니다 (구체적으로하시기 바랍니다).

+1

Firebase 실시간 데이터베이스 및 Firebase 클라우드 메시징. https://github.com/firebase/ios-swift-chat-example –

+0

프로젝트에서 FCM을 사용하려면 어떻게해야합니까? 당신이 준 github 프로젝트는 지저분하고 오류가 있습니다 .... @AL. – MuMtaZ

답변

2

당신이 찾고있는 것이 일반적으로 권장되지 않습니다. 문제가 될 수 있기 때문입니다. 기술적으로 사용자는 다른 사용자에게 직접 푸시 알림을 보낼 수 없어야합니다. 모든 알림은 개별 사용자가 액세스 할 수없는 중앙 시스템을 통해 처리해야합니다. 그러나 여전히이 작업을하고 싶다고 생각되면 읽어보십시오.

FCM을 사용하여 내 응용 프로그램 중 하나에서 이와 같은 메커니즘이 있습니다. 여기에 내가 한 사용자에서 다른 사용자로 메시지를 보내는 데 사용 (내 특정 정보를 가지고 몇 가지 수정을) 함수는 다음과 같습니다

func push(message: String, toUser: String) { 
    var token: String? 
    for person in self.users { 
     if toUser == person.username && person.firebaseToken != nil { 
      token = person.firebaseToken 
     } 
    } 
    if token != nil { 
     var request = URLRequest(url: URL(string: "https://fcm.googleapis.com/fcm/send")!) 
     request.httpMethod = "POST" 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.setValue("key=[your FCM Server Key]", forHTTPHeaderField: "Authorization") 
     let json = [ 
      "to" : token!, 
      "priority" : "high", 
      "notification" : [ 
       "body" : message 
      ] 
     ] as [String : Any] 
     do { 
      let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted) 
      request.httpBody = jsonData 
      let task = URLSession.shared.dataTask(with: request) { data, response, error in 
       guard let data = data, error == nil else { 
        print("Error=\(error)") 
        return 
       } 

       if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 
        // check for http errors 
        print("Status Code should be 200, but is \(httpStatus.statusCode)") 
        print("Response = \(response)") 
       } 

       let responseString = String(data: data, encoding: .utf8) 
       print("responseString = \(responseString)") 
      } 
      task.resume() 
     } 
     catch { 
      print(error) 
     } 
    } 
} 

내 AppDelegate에이 방법을 유지하고, 필요할 때마다 호출. 기본적으로 내 앱의 모든 사용자는 자신에게 할당 된 Firebase 메시징 토큰을 가지며, 이는 각 사용자의 또 다른 속성입니다. 다음 호출을 통해 사용자의 FCM 토큰을 얻을 수 있습니다.

일반적으로 토큰은 사용자가 처음 계정을 만들 때 검색하여 저장할 수 있습니다. 토큰은 사용자가 동일한 장치를 사용하는 한 동일하게 유지됩니다.

사용자가 푸시 알림을 보내는 것을 완전히 제어 할 수 없도록 적절한 보안 조치없이 구현되는 경우 매우 위험 할 수 있습니다.

+1

한 번에 많은 사용자에게 보내는 방법을 사용하는 것이 좋습니까? 실제로 한 사용자가 다른 사용자에게 푸시 할 수 있습니다. (whatsapp 그룹과 같이). 어떻게해야합니까? 이 방법을 사용 하시겠습니까? – MuMtaZ

+1

예, 계속 사용할 수 있습니다. 정기적으로 메시지를 보내 사람들에게 메시지를 보냅니다. for 루프를 사용하고 필요한만큼이 메서드를 계속 호출하면됩니다. – Bawpotter

+1

"FCM app code here"라고 썼다면 Firebase를 내 앱에 추가했지만이 FCM 코드는 어디에서 찾을 수 있습니까? – MuMtaZ

0

잘 모르겠습니다. 상태 코드가 200이지만 알림을 볼 수 없습니다.

반환 값입니다.

{ 
    \"multicast_id\":6666941437973455953, 
    \"success\":1, 
    \"failure\":0, 
    \"canonical_ids\":0, 
    \"results\":[{\"message_id\":\"0:1490256129594240%03b6b50f03b6b50f\"}] 
} 
관련 문제