2015-08-27 169 views
3

我一直在阅读this关于使用GCM进行Xamarin Android推送通知的教程,我创建了client APKasp.NET服务器,但有些东西我无法使用ASP项目在这里:如何在Xamarin中使用Google云消息传递(GCM)Android

public string SendNotification(string deviceId, string message).... 

var GoogleAppID = "123456789ABCDEFGHIJKLMNOP"; 
var SENDER_ID = "123456789"; 
var value = message; 
var webRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
webRequest.Method = "post"; 
webRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8"; 
webRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID)); 
webRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); 
var postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" 
    + value + "&registration_id=" + deviceId + ""; 

我有SENDER_IDGoogleAppID,但什么是deviceId?本教程未提及如何获取此属性,有谁知道如何获取此属性!谢谢!

回答

2

如果您检查教程here的来源,它在创建deviceId的客户端中有一个OnRegistered方法。

protected override void OnRegistered (Context context, string registrationId) 
    { 
     Console.WriteLine ("Device Id:" + registrationId); 
     var preferences = GetSharedPreferences("AppData", FileCreationMode.Private); 
     var deviceId = preferences.GetString("DeviceId",""); 
     if (string.IsNullOrEmpty (deviceId)) { 
      var editor = preferences.Edit(); 
      editor.PutString ("DeviceId", registrationId); 
      editor.Commit(); 
     } 
    } 

同样来自教程:

一旦设备注册成功后,您将获得 注册ID在OnRegistered事件。

,他们已经实现了,像这样的方法:

protected override void OnRegistered (Context context, string registrationId) 
{ 
    Console.WriteLine ("Device Id:" + registrationId); 
} 

这是从源头上不同,并有可能造成混乱。我将通过源代码查看实现中是否缺少其他位。

+0

对不起,但我不知道如何使用ID,但在我的实现中,我只有两个类:GcmService.cs和GcmBroadcastReceiver.cs,但是这个推送通知只能在我的手机中使用?我的意思是我不能在不同的手机中使用相同的应用程序,并从我的服务器发送消息,每个人都收到? –

+0

您看到的教程一次发送一个,最后以“现在您可以运行Android应用程序,从输出窗口获取注册ID。运行ASP.Net应用程序,提供注册ID和消息。单击发送通知。如果一切顺利,您会在模拟器中看到通知。“如果你想发送一个通知到所有注册的设备,你将不得不存储你的注册标识(又名deviceIds)并在它们上面循环,从文档中你可以批量发送1000个设备标识。 GCM中没有发送到“所有设备”选项。 –

+0

谢谢大家!真的帮助我! –

相关问题