Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nabízená oznámení umožňují klientům dostávat oznámení o příchozích zprávách a dalších operacích, ke kterým dochází ve vlákně chatu, 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:
Oznámení push chatu jsou podporována pro Android SDK ve verzích počínaje 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.
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 appaEdit your app manifestv dokumentaci Firebase.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í.
Vytvořte nový soubor volaný
MyFirebaseMessagingService.javave stejném adresáři, ve kterémMainActivity.javase nachází. Zkopírujte následující kód doMyFirebaseMessagingService.javasouboru . Je třeba nahradit<your_package_name>názvem balíčku použitým vMainActivity.java. Můžete použít vlastní hodnotu pro<your_intent_name>. Tuto hodnotu použijte v kroku 6.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); } }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;Do třídy
MainActivitypřidejte následující kód: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); } }); } }); }Aktualizujte funkci
onCreatevMainActivity.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LocalBroadcastManager .getInstance(this) .registerReceiver( firebaseMessagingReceiver, new IntentFilter("<your_intent_name>")); }Za komentář
<RECEIVE CHAT MESSAGES>vložteMainActivityná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
});
-
xmlns:toolsPřidejte pole doAndroidManifest.xmlsouboru:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.azure.android.communication.chat.sampleapp">
- Zakažte výchozí inicializátor pro
WorkManagervAndroidManifest.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 -->
- Přidejte závislost
WorkManagerdo souborubuild.gradle.
def work_version = "2.7.1"
implementation "androidx.work:work-runtime:$work_version"
- Přidání vlastního
WorkManagerinicializá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í předchozího kódu: Výchozí inicializátor WorkManager je zakázán v kroku 9. Tento krok implementuje Configuration.Provider pro poskytnutí přizpůsobeného WorkFactory, který je zodpovědný za vytvoření WorkerManager za běhu.
Pokud je aplikace integrovaná se službou Azure Functions, inicializujte parametry aplikace 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), takže parametry aplikace lze před použitím inicializovat. Další podrobnosti najdete v ukázkové chatovací aplikaci.
-
android:name=.MyAppConfigurationPř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"
>