Sdílet prostřednictvím


Povolit nabízená oznámení

Nabízená oznámení umožňují klientům dostávat oznámení o příchozích zprávách a dalších operacích v chatovacím vlákně v situacích, kdy mobilní aplikace není spuštěná v popředí. Azure Communication Services podporuje seznam událostí, ke kterým se můžete přihlásit.

Poznámka:

Nabízená oznámení chatu jsou podporována pro Sadu Android SDK ve verzích od verze 1.1.0-beta.4 a 1.1.0. Doporučujeme používat verzi 2.0.0 nebo novější, protože starší verze mají známý problém s prodloužením registrace. Kroky od 8 do 12 jsou potřeba pouze pro verze rovnající se nebo větší než 2.0.0.

  1. Nastavte službu Firebase Cloud Messaging pro projekt ChatQuickstart. Proveďte kroky Create a Firebase project, , Register your app with FirebaseAdd a Firebase configuration file, Add Firebase SDKs to your appa Edit your app manifest v dokumentaci Firebase.

  2. Vytvořte centrum oznámení ve stejném předplatném jako prostředek služby Communication Services, nakonfigurujte nastavení služby Firebase Cloud Messaging pro centrum a propojte centrum oznámení s prostředkem služby Communication Services. Viz zřizování centra oznámení.

  3. Vytvořte nový soubor volaný MyFirebaseMessagingService.java ve stejném adresáři, ve kterém MainActivity.java se nachází. Zkopírujte následující kód do MyFirebaseMessagingService.javasouboru . Budete muset nahradit <your_package_name> názvem balíčku použitým v MainActivity.javasouboru . Můžete použít vlastní hodnotu pro <your_intent_name>. Tato hodnota se použije v kroku 6 níže.

       package <your_package_name>;
    
       import android.content.Intent;
       import android.util.Log;
    
       import androidx.localbroadcastmanager.content.LocalBroadcastManager;
    
       import com.azure.android.communication.chat.models.ChatPushNotification;
       import com.google.firebase.messaging.FirebaseMessagingService;
       import com.google.firebase.messaging.RemoteMessage;
    
       import java.util.concurrent.Semaphore;
    
       public class MyFirebaseMessagingService extends FirebaseMessagingService {
           private static final String TAG = "MyFirebaseMsgService";
           public static Semaphore initCompleted = new Semaphore(1);
    
           @Override
           public void onMessageReceived(RemoteMessage remoteMessage) {
               try {
                   Log.d(TAG, "Incoming push notification.");
    
                   initCompleted.acquire();
    
                   if (remoteMessage.getData().size() > 0) {
                       ChatPushNotification chatPushNotification =
                           new ChatPushNotification().setPayload(remoteMessage.getData());
                       sendPushNotificationToActivity(chatPushNotification);
                   }
    
                   initCompleted.release();
               } catch (InterruptedException e) {
                   Log.e(TAG, "Error receiving push notification.");
               }
           }
    
           private void sendPushNotificationToActivity(ChatPushNotification chatPushNotification) {
               Log.d(TAG, "Passing push notification to Activity: " + chatPushNotification.getPayload());
               Intent intent = new Intent("<your_intent_name>");
               intent.putExtra("PushNotificationPayload", chatPushNotification);
               LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
           }
       }
    
    
  4. Na začátek souboru MainActivity.javapřidejte následující příkazy importu:

       import android.content.BroadcastReceiver;
       import android.content.Context;
       import android.content.Intent;
       import android.content.IntentFilter;
    
       import androidx.localbroadcastmanager.content.LocalBroadcastManager;
       import com.azure.android.communication.chat.models.ChatPushNotification;
       import com.google.android.gms.tasks.OnCompleteListener;
       import com.google.android.gms.tasks.Task;
       import com.google.firebase.messaging.FirebaseMessaging;
    
  5. Do třídy přidejte následující kód MainActivity :

       private BroadcastReceiver firebaseMessagingReceiver = new BroadcastReceiver() {
           @Override
           public void onReceive(Context context, Intent intent) {
               ChatPushNotification pushNotification =
                   (ChatPushNotification) intent.getParcelableExtra("PushNotificationPayload");
    
               Log.d(TAG, "Push Notification received in MainActivity: " + pushNotification.getPayload());
    
               boolean isHandled = chatAsyncClient.handlePushNotification(pushNotification);
               if (!isHandled) {
                   Log.d(TAG, "No listener registered for incoming push notification!");
               }
           }
       };
    
    
       private void startFcmPushNotification() {
           FirebaseMessaging.getInstance().getToken()
               .addOnCompleteListener(new OnCompleteListener<String>() {
                   @Override
                   public void onComplete(@NonNull Task<String> task) {
                       if (!task.isSuccessful()) {
                           Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                           return;
                       }
    
                       // Get new FCM registration token
                       String token = task.getResult();
    
                       // Log and toast
                       Log.d(TAG, "Fcm push token generated:" + token);
                       Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
    
                       chatAsyncClient.startPushNotifications(token, new Consumer<Throwable>() {
                           @Override
                           public void accept(Throwable throwable) {
                               Log.w(TAG, "Registration failed for push notifications!", throwable);
                           }
                       });
                   }
               });
       }
    
    
  6. Aktualizujte funkci onCreate v MainActivitysouboru .

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
    
           LocalBroadcastManager
               .getInstance(this)
               .registerReceiver(
                   firebaseMessagingReceiver,
                   new IntentFilter("<your_intent_name>"));
       }
    
  7. Pod komentář <RECEIVE CHAT MESSAGES> MainActivityvložte následující kód:

   startFcmPushNotification();

   chatAsyncClient.addPushNotificationHandler(CHAT_MESSAGE_RECEIVED, (ChatEvent payload) -> {
       Log.i(TAG, "Push Notification CHAT_MESSAGE_RECEIVED.");
       ChatMessageReceivedEvent event = (ChatMessageReceivedEvent) payload;
       // You code to handle ChatMessageReceived event
   });
  1. xmlns:tools Přidejte pole do AndroidManifest.xml souboru:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.azure.android.communication.chat.sampleapp">
  1. Zakažte výchozí inicializátor pro WorkManager :AndroidManifest.xml
    <!-- Disable the default initializer of WorkManager so that we could override it in MyAppConfiguration  -->
    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        android:exported="false"
        tools:node="merge">
      <!-- If you are using androidx.startup to initialize other components -->
      <meta-data
          android:name="androidx.work.WorkManagerInitializer"
          android:value="androidx.startup"
          tools:node="remove" />
    </provider>
    <!-- End of Disabling default initializer of WorkManager -->
  1. WorkManager Přidejte závislost do build.gradle souboru:
    def work_version = "2.7.1"
    implementation "androidx.work:work-runtime:$work_version"
  1. Přidání vlastního WorkManager inicializátoru vytvořením implementované Configuration.Providertřídy:
    public class MyAppConfiguration extends Application implements Configuration.Provider {
        Consumer<Throwable> exceptionHandler = new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) {
                Log.i("YOUR_TAG", "Registration failed for push notifications!" + throwable.getMessage());
            }
        };
    
        @Override
        public void onCreate() {
            super.onCreate();
            // Initialize application parameters here
            WorkManager.initialize(getApplicationContext(), getWorkManagerConfiguration());
        }
    
        @NonNull
        @Override
        public Configuration getWorkManagerConfiguration() {
            return new Configuration.Builder().
                setWorkerFactory(new RegistrationRenewalWorkerFactory(COMMUNICATION_TOKEN_CREDENTIAL, exceptionHandler)).build();
        }
    }

Vysvětlení výše uvedeného kódu: Výchozí inicializátor WorkManager byl zakázán v kroku 9. Tento krok implementuje Configuration.Provider , aby poskytoval přizpůsobenou aplikaci WorkFactory, která je zodpovědná za vytvoření WorkerManager během běhu.

Pokud je aplikace integrovaná se službou Azure Functions, měla by se inicializace parametrů aplikace přidat v metodě onCreate(). Metoda getWorkManagerConfiguration() se volá při spuštění aplikace před vytvořením jakékoli aktivity, služby nebo objektu příjemce (s výjimkou poskytovatelů obsahu), aby bylo možné před použitím inicializovat parametry aplikace. Další podrobnosti najdete v ukázkové chatovací aplikaci.

  1. android:name=.MyAppConfiguration Přidejte pole, které používá název třídy z kroku 11, doAndroidManifest.xml:
<application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:theme="@style/Theme.AppCompat"
      android:supportsRtl="true"
      android:name=".MyAppConfiguration"
>