2016-04-10 25 views
0

現在、Androidのメッセージングアプリケーションを構築しており、グループに参加しているすべてのユーザーに通知を送信しようとしています。私は登録されているすべてのデバイスに通知を送信するために正常に動作しているAzure Notification Hubを設定していますが、すべてのユーザー、つまりグループのサブセットのみで動作するようには見えません。Android搭載ハーブ通知 - サブセットへの通知の送信

デバイスは、起動時にAzureおよびGCMに登録されます。

私は個人に通知を送信しようとするために "タグ"を使用しようとしましたが、私はそれを正しくやっているかどうかわかりません...それは動作していないためではありません!私はタグとしてユーザー名を使用して、個々に通知を送信しようとしています次のコードで

...

これは、通知を送信するために私のサービスのコードです:

// 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); 
    } 

そして、これは私は、Android側のデバイスを登録しています方法です:

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; 
    } 

これは私がデバイスを登録する方法です。

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; 
    } 

答えて

1

おはようございます。 Visual studio 2015を使用して登録を確認してください。 それをインストールし、紺碧、紺碧のハブ、登録済みのデバイスを接続します。テストトークンでテストメッセージを送信してみてください(+「通知ハブに登録がありますか」をチェックしてください)。

+0

私はこれをチェックしてテスト通知を送信しましたが、それでもブロードキャストでしか動作しません。しかし、私は0タグが登録されていると言います。私はどのようにタグを登録するか分からない..? – semiColon

+0

通知ハブに登録すると、1)deviceToken、2)トークンの2つのパラメータが渡されます。 その新しいレコードが新しいregIdと有効期限の通知ハブに作成された後。 https://msdn.microsoft.com/en-us/library/azure/dn530747.aspx(登録登録) https://msdn.microsoft.com/ru-ru/library/microsoft.servicebus.notifications .windowsregistrationdescription.aspx(タグを設定) –

+0

私に戻ってくれてありがとう!このコード行を変更するにはどうすればいいですか?「var result = await _hubClient.SendGcmNativeNotificationAsync(notificationJsonPayload);」タグ「[email protected]」を含めるにはどうすればよいですか?デバイスを登録し、通知を送信するときにデバイスを登録する際にタグとして挿入しようとしましたが、動作していません。 – semiColon

関連する問題