2016-04-10 27 views
0

Şu anda bir Android mesajlaşma uygulaması yapıyorum ve grubun parçası olan tüm kullanıcılara bildirim göndermeye çalışıyorum. Kayıtlı tüm cihazlara bir bildirim göndermek için iyi çalışan bir Azure Notification Hub'ım var, ancak tüm grubun bir grubunun, yani bir grubun yalnızca bir alt kümesinde çalışmasını sağlayamıyorum.Android ile Azure Bildirim Hub'ları - Kullanıcıların alt kümelerine bildirim gönderme

Aygıtlar açılışta Azure ve GCM ile kayıtlıdır.

Bir kullanıcıya bir bildirim göndermeyi denemek için "Etiketler" kullanmayı denedim ancak doğru yapıp yapmadığımı bilmiyorum ... Çalışmıyor olması nedeniyle olmamalıyım! Bir Tag olarak kendi adını kullanarak bir bireye bir bildirim göndermek çalışıyorum Aşağıdaki kodda

...

Bu

bir bildirim göndermek için Hizmetimde kod şudur:

// POST api/notification 
    public async Task<IHttpActionResult> Post([FromBody]Notification notification) 
    { 
     var notificationToSave = new Notification 
     { 
      NotificationGuid = Guid.NewGuid().ToString(), 
      TimeStamp = DateTime.UtcNow, 
      Message = notification.Message, 
      SenderName = notification.SenderName 
     }; 

     var recipientNames = await GetRecipientNamesFromNotificationHub(); 

     var recipientNamesString = CreateCustomRecipientNamesString(recipientNames); 

     string notificationJsonPayload = 
      "{\"data\" : " + 
      " {" + 
      " \"message\": \"" + notificationToSave.Message + "\"," + 
      " \"senderName\": \"" + notificationToSave.SenderName + "\"," + 
      " \"recipientNames\": \"" + recipientNamesString + "\"" + 
      " }" + 
      "}"; 

     var result = await _hubClient.SendGcmNativeNotificationAsync(notificationJsonPayload, "[email protected]"); // If this second parameter is omitted then a notification is sent to all registered devices. 

     notificationToSave.TrackingId = result.TrackingId; 
     notificationToSave.Recipients = recipientNames; 

     await Session.StoreAsync(notificationToSave); 

     return Ok(notificationToSave); 
    } 

Ve Android tarafında bir cihaz kayıt am nasıl şudur:

private void sendRegistrationIdToBackend(String registrationId) { 

     String backendBaseUrl = "http://myurl.net/"; 
     if (backendBaseUrl == null || backendBaseUrl == "") 
     { 
      return; 
     } 

     PushNotificationClient client = new PushNotificationClient(backendBaseUrl); 

     Device device = createDevice(registrationId); 

     client.registerDevice(device, new Callback<Device>() { 
      @Override 
      public void success(Device device, Response response) { 
       //writeStringToSharedPreferences(SettingsActivity.SETTINGS_KEY_DEVICEGUID, device.DeviceGuid); 
       Toast.makeText(context, "Device successfully registered with backend, DeviceGUID=" + device.DeviceGuid, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void failure(RetrofitError retrofitError) { 
       Toast.makeText(context, "Backend registration error:" + retrofitError.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }); 

     Log.i(TAG, registrationId); 
    } 

    private Device createDevice(String registrationId) { 
     Device device = new Device(); 
     device.Platform = "Android"; 
     device.Token = registrationId; 
     device.UserName = LogInActivity.loggedInUser; 
     device.DeviceGuid = null; 
     //todo set device.PlatformDescription based on Android version 
     device.SubscriptionCategories = new ArrayList<>(); 
     device.SubscriptionCategories.add("[email protected]"); // This should be adding this username as a Tag which is referenced in the service.... Not sure if this is how I should do it! 
     return device; 
    } 

Bu benim bir cihaz kayıt nasıl:

İyi akşamlar 210
private async Task<RegistrationDescription> RegisterDeviceWithNotificationHub(Device device) 
    { 
     var hubTags = new HashSet<string>() 
      .Add("user", new[] { device.UserName }) 
      .Add("category", device.SubscriptionCategories); 

     var hubRegistrationId = device.HubRegistrationId ?? "0";//null or empty string as query input throws exception 
     var hubRegistration = await _hubClient.GetRegistrationAsync<RegistrationDescription>(hubRegistrationId); 
     if (hubRegistration != null) 
     { 
      hubRegistration.Tags = hubTags; 
      await _hubClient.UpdateRegistrationAsync(hubRegistration); 
     } 
     else 
     { 
      hubRegistration = await _hubClient.CreateGcmNativeRegistrationAsync(device.Token, hubTags); 
     } 
     return hubRegistration; 
    } 

cevap

1

. Kayıtlarınızı Visual Studio 2015 kullanarak kontrol etmelisiniz. Yükleyin, azure, azure hub'ları, kayıtlı aygıtları bağlayın. Ve test mesajınızı test tokenine göndermeyi deneyin (+ "kaydınızın bildirim merkezi üzerinde var olduğunu kontrol edin").

+0

Bunu kontrol ettim ve test bildirimleri gönderdim ancak yine de yalnızca bir yayınla çalışıyor. Ancak, kayıtlı 0 etiketim var diyor. Etiketleri nasıl kaydedeceğimi bilmiyorum ..? – semiColon

+0

bildirim merkezine kayıt olduğunuzda 2 param geçer: 1) deviceToken, 2) token. Bu yeni kayıt, yeni kayıt ve son kullanma tarihi ile bildirim merkezi üzerinde oluşturulduktan sonra. https://msdn.microsoft.com/en-us/library/azure/dn530747.aspx (oluşturma kaydı) https://msdn.microsoft.com/ru-ru/library/microsoft.servicebus.notifications .windowsregistrationdescription.aspx (etiketleri ayarla) –

+0

Bana döndüğünüz için teşekkür ederiz! Bu kod satırını nasıl değiştirebilirim var sonuç = _hubClient.SendGcmNativeNotificationAsync (notificationJsonPayload); “[email protected]” etiketini eklemek istersem? Aygıtı kaydederken ve bildirimi yayınlarken başvuruda bulunulan bir etiket olarak eklemeyi denedim ancak şu anda çalışmıyor – semiColon