Anında iletme bildirimlerini etkinleştirme
Anında iletme bildirimleri, mobil uygulamanın ön planda çalışmadığı durumlarda bir sohbet yazışmasında gerçekleşen gelen iletiler ve diğer işlemler için istemcilere bildirim verilmesini sağlar. Azure İletişim Hizmetleri abone olabileceğiniz olayların listesini destekler.
Not
Sohbet anında iletme bildirimleri, Android SDK'sı için 1.1.0-beta.4 ve 1.1.0 sürümlerinde desteklenir. Eski sürümlerde kayıt yenilemeyle ilgili bilinen bir sorun olduğundan, sürüm 2.0.0 veya üzerini kullanmanız önerilir. 8'den 12'ye kadar olan adımlar yalnızca 2.0.0'a eşit veya 2.0.0'dan büyük sürümler için gereklidir.
ChatQuickstart projesi için Firebase Cloud Messaging'i ayarlayın. Firebase Belgeleri'nde ,
Register your app with Firebase
Add a Firebase configuration file
, ,Add Firebase SDKs to your app
veEdit your app manifest
adımlarınıCreate a Firebase project
tamamlayın.İletişim Hizmetleri kaynağınızla aynı abonelik içinde bir Bildirim Hub'ı oluşturun, hub için Firebase Cloud Messaging ayarlarınızı yapılandırın ve Bildirim Hub'ını İletişim Hizmetleri kaynağınıza bağlayın. Bkz. Bildirim Hub'ı sağlama.
Bulunduğu dizinde
MainActivity.java
adlıMyFirebaseMessagingService.java
yeni bir dosya oluşturun. Aşağıdaki kodu içineMyFirebaseMessagingService.java
kopyalayın. değerini içindeMainActivity.java
kullanılan paket adıyla değiştirmeniz<your_package_name>
gerekir. için<your_intent_name>
kendi değerinizi kullanabilirsiniz. Bu değer aşağıdaki 6. adımda kullanılacaktır.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); } }
dosyasının
MainActivity.java
en üstüne aşağıdaki içeri aktarma deyimlerini ekleyin: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;
Sınıfına
MainActivity
aşağıdaki kodu ekleyin: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); } }); } }); }
içindeki
MainActivity
işlevinionCreate
güncelleştirin.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LocalBroadcastManager .getInstance(this) .registerReceiver( firebaseMessagingReceiver, new IntentFilter("<your_intent_name>")); }
aşağıdaki kodu içindeki
MainActivity
açıklamasının<RECEIVE CHAT MESSAGES>
altına yerleştirin:
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:tools
Alanı dosyayaAndroidManifest.xml
ekleyin:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.azure.android.communication.chat.sampleapp">
- içinde
AndroidManifest.xml
içinWorkManager
varsayılan başlatıcıyı devre dışı bırakın:
<!-- 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 -->
WorkManager
Dosyanızabuild.gradle
bağımlılığı ekleyin:
def work_version = "2.7.1"
implementation "androidx.work:work-runtime:$work_version"
- uygulayan
Configuration.Provider
bir sınıf oluşturarak özelWorkManager
başlatıcı ekleyin:
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();
}
}
Yukarıdaki kodun açıklaması: Varsayılan başlatıcısı WorkManager
9. adımda devre dışı bırakıldı. Bu adım, çalışma zamanı sırasında oluşturmakla WorkerManager
sorumlu olan özelleştirilmiş bir 'WorkFactory' sağlamak için uygulanırConfiguration.Provider
.
Uygulama Azure İşlevi ile tümleştirilmişse, uygulama parametrelerinin başlatılması 'onCreate()' yöntemine eklenmelidir. Uygulama parametreleri kullanılmadan önce başlatılabilmesi için herhangi bir etkinlik, hizmet veya alıcı nesnesi (içerik sağlayıcıları hariç) oluşturulmadan önce uygulama başlatılırken 'getWorkManagerConfiguration()' yöntemi çağrılır. Diğer ayrıntılara örnek sohbet uygulamasından ulaşabilirsiniz.
android:name=.MyAppConfiguration
11. adımdaki sınıf adını kullanan alanını içineAndroidManifest.xml
ekleyin:
<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"
>