Ş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 210private 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;
}
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
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) –
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