2013-10-08 2 views
4

Я работаю над андроидным приложением, которое использует функцию push-уведомления от GCM. В настоящее время я застреваю при создании сервера. Руководства, предоставленные документацией GCM, представлены в java, который я понятия не имею, как реализовать. После исследования на некоторое время, я нашел GCMSharp на GitHub, который использует C#Сервер для GCM push-уведомления для android в C#

PushSharp - https://github.com/Redth/PushSharp

Но как сейчас, я новичок в создании сервера и не имеют ни малейшего представления о том, как начать работу. Является ли сервер фактически веб-службой, которая продолжает слушать запрос и, получив запрос, направляет его в GCM, который посылает уведомление на клиентский телефон?

И если да, то реализую ли я его в веб-сервисе, таком как WCF?

ответ

5

Вы можете следовать this учебник.

ли сервер на самом деле это веб-сервис, который продолжает слушать просить и после получения запроса направляет его на ГКЙ, который выталкивает уведомления клиента телефона?

Вам не нужно слушать запросы. GCM Push напрямую передает любое сообщение на устройство без какого-либо запроса. Для получения дополнительной информации, прочтите это documentation.

+0

Если это так, то зачем использовать сервер? В документации он пишет: Сервер сторонних приложений, который вы должны реализовать. Этот сервер приложений отправляет данные в приложение Android с поддержкой GCM через выбранный сервер соединения GCM. Разве сервер не реализует тот, который отправляет сообщение? – user2857001

+0

Все, что вам нужно сделать в бэкэнд, - это собирать токены устройства с устройств Android, так как пользователи регистрируются на сервере GCM и сохраняют их в вашей БД. Когда вы хотите нажать сообщение, вы можете попросить Google Server отправить ваше сообщение с помощью токенов устройства и вашего ключа Api. –

+0

Ох! Таким образом, сервер только для регистрации идентификатора устройства и получения идентификатора устройства. А для отправки с устройства A на устройство B устройство A получит идентификатор устройства B с сервера и просто нажимает уведомление с использованием GCM на устройство B? – user2857001

1

Я ответил на это в другой теме, и здесь я повторяю. Код выглядит немного дольше, но он работает. Я только что отправил push-уведомление на свой телефон после боев через 2 дня, выполнив следующий код в проекте C#. Я ссылался на ссылку относительно этой реализации, но не смог найти ее для публикации здесь. Так что я поделюсь с вами своим кодом. Если вы хотите протестировать онлайн-уведомление, вы можете посетить этот link.

примечание: Я hardcorded apiKey, DeviceId и PostData, пожалуйста, передайте в apiKey, DeviceId и PostData в запросе и удалить их из метод тела. Если вы хотите передать строку сообщения также

public string SendGCMNotification(string apiKey, string deviceId, string postData) 
{ 
    string postDataContentType = "application/json"; 
    apiKey = "AIzaSyC13...PhtPvBj1Blihv_J4"; // hardcorded 
    deviceId = "da5azdfZ0hc:APA91bGM...t8uH"; // hardcorded 

    string message = "Your text"; 
    string tickerText = "example test GCM"; 
    string contentTitle = "content title GCM"; 
    postData = 
    "{ \"registration_ids\": [ \"" + deviceId + "\" ], " + 
     "\"data\": {\"tickerText\":\"" + tickerText + "\", " + 
       "\"contentTitle\":\"" + contentTitle + "\", " + 
       "\"message\": \"" + message + "\"}}"; 


    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateServerCertificate); 

    // 
    // MESSAGE CONTENT 
    byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

    // 
    // CREATE REQUEST 
    HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send"); 
    Request.Method = "POST"; 
    Request.KeepAlive = false; 
    Request.ContentType = postDataContentType; 
    Request.Headers.Add(string.Format("Authorization: key={0}", apiKey)); 
    Request.ContentLength = byteArray.Length; 

    Stream dataStream = Request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 

    // 
    // SEND MESSAGE 
    try 
    { 
     WebResponse Response = Request.GetResponse(); 
     HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode; 
     if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden)) 
     { 
      var text = "Unauthorized - need new token"; 
     } 
     else if (!ResponseCode.Equals(HttpStatusCode.OK)) 
     { 
      var text = "Response from web service isn't OK"; 
     } 

     StreamReader Reader = new StreamReader(Response.GetResponseStream()); 
     string responseLine = Reader.ReadToEnd(); 
     Reader.Close(); 

     return responseLine; 
    } 
    catch (Exception e) 
    { 
    } 
    return "error"; 
} 

public static bool ValidateServerCertificate(
object sender, 
X509Certificate certificate, 
X509Chain chain, 
SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 

Вы не можете знакомы со словами как apiKey, DeviceId. Не волнуйтесь, я объясню, что это такое и как их создать.

apiKey
Что & почему: Это ключ, который будет использоваться при отправке запросов на GCM сервер.
Как создать: Refer this post

DeviceId
Что & почему: Этот идентификатор также известен как RegistrationID. Это уникальный идентификатор для идентификации устройства. Если вы хотите отправить уведомление на конкретное устройство, вам понадобится этот идентификатор.
Как сделать create: Это зависит от того, как вы реализуете приложение. Для cordova я использовал простой pushNotification Plugin Вы можете просто создать deviceId/RegistrationId, используя этот плагин. Для этого вам необходимо иметь a senderId.Google, как создать senderId действительно просто =)

Если кому-то понадобится помощь, оставьте комментарий.

Счастливое кодирование.
-Charitha-

Смежные вопросы