Udostępnij za pośrednictwem


Wprowadzenie do usługi Notification Hubs przy użyciu usługi Baidu

Baidu Cloud Push to chińska usługa w chmurze, której można użyć do wysyłania powiadomień push do urządzeń mobilnych.

Ponieważ sklepy Google Play i FCM (Firebase Cloud Messaging) nie są dostępne w Chinach, konieczne jest korzystanie z różnych sklepów z aplikacjami i usług wypychanych. Baidu jest jednym z nich, a ta usługa jest obecnie używana przez Notification Hub.

Wymagania wstępne

Ten samouczek wymaga:

Uwaga

Do wykonania kroków tego samouczka potrzebne jest aktywne konto platformy Azure. Jeśli go nie masz, możesz utworzyć bezpłatne konto próbne w zaledwie kilka minut. Aby uzyskać szczegółowe informacje, zobacz Bezpłatna wersja próbna platformy Azure.

Aby rozpocząć pracę, wykonaj następujące czynności:

  1. Utwórz konto usługi Baidu.
  2. Utwórz projekt powiadomień Baidu w chmurze i zapisz klucz API oraz klucz tajny.

Konfigurowanie nowego centrum powiadomień

  1. Zaloguj się do portalu Azure.

  2. Wybierz pozycję Wszystkie usługi w menu po lewej stronie. Zrzut ekranu przedstawiający pozycję Wszystkie usługi dla istniejącej przestrzeni nazw.

  3. W polu tekstowym Filtruj usługi wpisz Notification Hubs. Wybierz ikonę gwiazdki obok nazwy usługi, aby dodać usługę do sekcji ULUBIONE w menu po lewej stronie. Wybierz pozycję Notification Hubs.

    Zrzut ekranu przedstawiający sposób filtrowania centrów powiadomień.

  4. Na stronie Notification Hubs wybierz pozycję Utwórz na pasku narzędzi.

    Zrzut ekranu przedstawiający sposób tworzenia nowego centrum powiadomień.

  5. Na karcie Podstawowe na stronie Centrum powiadomień wykonaj następujące czynności:

    1. W obszarze Subskrypcja wybierz nazwę subskrypcji platformy Azure, której chcesz użyć, a następnie wybierz istniejącą grupę zasobów lub utwórz nową.

    2. Wprowadź unikatową nazwę nowej przestrzeni nazw w obszarze Szczegóły przestrzeni nazw.

    3. Przestrzeń nazw zawiera jedno lub więcej centrów powiadomień, więc wpisz nazwę centrum w szczegółach centrum powiadomień.

    4. Wybierz wartość z listy rozwijanej Lokalizacja . Ta wartość określa lokalizację, w której chcesz utworzyć centrum.

      Zrzut ekranu przedstawiający szczegóły centrum powiadomień.

    5. Przejrzyj opcję Strefy dostępności. Jeśli wybrano region ze strefami dostępności, pole wyboru jest zaznaczone domyślnie. Strefy dostępności są funkcją płatną, dlatego do twojego planu dodawana jest dodatkowa opłata.

    6. Wybierz opcję odzyskiwania po awarii:Brak, Sparowany region odzyskiwania, lub Elastyczny region odzyskiwania. Jeśli wybierzesz sparowany region odzyskiwania, zostanie wyświetlony region awaryjny. Jeśli wybierzesz pozycję Elastyczny region odzyskiwania, użyj listy rozwijanej, aby wybrać z listy regionów odzyskiwania.

      Zrzut ekranu przedstawiający szczegóły strefy dostępności.

    7. Wybierz Utwórz.

  6. Po zakończeniu wdrażania wybierz pozycję Przejdź do zasobu.

  6. W centrum powiadomień wybierz pozycję Usługi powiadomień , a następnie Baidu (Android China).

     Azure Notification Hubs — Baidu

  7. Przewiń w dół do sekcji Ustawienia powiadomień baidu. Wprowadź klucz interfejsu API i klucz tajny, które uzyskałeś z konsoli Baidu, w projekcie Baidu Cloud Push. Następnie kliknij przycisk Zapisz.

     Azure Notification Hubs: tajne informacje Baidu

Twoje centrum powiadomień jest teraz skonfigurowane do pracy z usługą Baidu. Masz również parametry połączenia , aby zarejestrować aplikację w celu wysyłania i odbierania powiadomień wypychanych.

Zanotuj DefaultListenSharedAccessSignature i DefaultFullSharedAccessSignature z okna informacji o połączeniu Access.

Łączenie aplikacji z centrum powiadomień

  1. W programie Android Studio utwórz nowy projekt systemu Android (Plik > nowy > projekt).

    Azure Notification Hubs — nowy projekt Baidu

  2. Wprowadź nazwę aplikacji i upewnij się, że minimalna wymagana wersja zestawu SDK jest ustawiona na interfejs API 16: Android 4.1. Upewnij się również, że nazwa aplikacyjnego pakietu (应用包名) jest taka sama jak w portalu Baidu Cloud Push

    Azure Notification Hubs - Baidu Min SDK1 Azure Notification Hubs - Baidu Min SDK2

  3. Kliknij Dalej i postępuj zgodnie z asystentem, aż pojawi się okno Tworzenie aktywności. Upewnij się, że wybrano pozycję Puste działanie, a na koniec wybierz pozycję Zakończ, aby utworzyć nową aplikację systemu Android.

    Azure Notification Hubs — dodawanie aktywności Baidu

  4. Upewnij się, że cel budowy projektu jest poprawnie ustawiony.

  5. Następnie dodaj biblioteki usługi Azure Notification Hubs. Build.Gradle W pliku aplikacji dodaj następujące wiersze w sekcji zależności.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
    

    Dodaj następujące repozytorium po sekcji zależności.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

    Aby uniknąć konfliktu z Listą, dodaj następujący kod w pliku projektu Manifest.xml.

    <manifest package="YOUR.PACKAGE.NAME"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    

    i w tagu <application/> :

    <application
        tools:replace="android:allowBackup,icon,theme,label">
    
  6. Pobierz i rozpakuj Baidu Push SDK dla Androida. pushservice-x.y.z jar Skopiuj plik w folderze libs. Następnie skopiuj .so pliki do folderów src/main/jniLibs (utwórz nowy folder) aplikacji systemu Android.

    Azure Notification Hubs — biblioteki SDK Baidu

  7. W folderze projektu libs kliknij prawym przyciskiem myszy pushervice-x.y.z.jar plik. Wybierz pozycję Dodaj jako bibliotekę , aby włączyć tę bibliotekę w projekcie.

    Azure Notification Hubs — dodanie Baidu jako biblioteki

  8. Otwórz plik projektu AndroidManifest.xml systemu Android i dodaj uprawnienia wymagane przez zestaw SDK baidu. Zastąp YOURPACKAGENAME nazwą pakietu

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    !! <uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" />
    !!<permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" android:protectionLevel="normal" />
    
    
  9. Dodaj następującą konfigurację w elemencie aplikacji po elemencie .MainActivity activity, zastępując ciąg yourprojectname (na przykład com.example.BaiduTest).

    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaViewActivity" />
    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaListActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaListActivity"
        android:launchMode="singleTask" />
    
    <!-- Push application definition message -->
    <receiver android:name=".MyPushMessageReceiver">
        <intent-filter>
    
            <!-- receive push message-->
            <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
            <!-- receive bind,unbind,fetch,delete.. message-->
            <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
            <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
        </intent-filter>
    </receiver>
    
    <receiver
        android:name="com.baidu.android.pushservice.PushServiceReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
            <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
            <action android:name="android.intent.action.MEDIA_MOUNTED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
        </intent-filter>
    </receiver>
    
    <receiver
        android:name="com.baidu.android.pushservice.RegistrationReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="com.baidu.android.pushservice.action.METHOD" />
            <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
    
            <data android:scheme="package" />
        </intent-filter>
    </receiver>
    
    <service
        android:name="com.baidu.android.pushservice.PushService"
        android:exported="true"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
        </intent-filter>
    </service>
    
    <service
        android:name="com.baidu.android.pushservice.CommandService"
        android:exported="true" />
    
    <!-- Adapt the ContentProvider declaration required for the Android N system, and the write permissions include the application package name-->
    <provider
        android:name="com.baidu.android.pushservice.PushInfoProvider"
        android:authorities="com.baidu.push.example.bdpush"
        android:exported="true"
        android:protectionLevel="signature"
        android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER. yourprojectname  " />
    
    <!-- API Key of the Baidu application -->
    <meta-data
        android:name="api_key"
        !!   android:value="api_key" />
    </application>
    
  10. Dodaj nową klasę o nazwie ConfigurationSettings.java do projektu.

    public class ConfigurationSettings {
        public static String API_KEY = "...";
        public static String NotificationHubName = "...";
        public static String NotificationHubConnectionString = "...";
    }
    

    Ustaw wartość API_KEY ciągu przy użyciu API_KEY z projektu Baidu Cloud.

    Ustaw wartość NotificationHubName ciągu przy użyciu nazwy centrum powiadomień z portalu Azure, a następnie NotificationHubConnectionString z DefaultListenSharedAccessSignature z portalu Azure.

  11. Otwórz MainActivity.java i dodaj następujący kod do metody onCreate:

    PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,  API_KEY );
    
  12. Dodaj nową klasę o nazwie MyPushMessageReceiver.javai dodaj do niej następujący kod. Jest to klasa, która obsługuje powiadomienia push odbierane z serwera Baidu.

    package your.package.name;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.text.TextUtils;
    import android.util.Log;
    
    import com.baidu.android.pushservice.PushMessageReceiver;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.List;
    
    public class MyPushMessageReceiver extends PushMessageReceiver {
    
        public static final String TAG = MyPushMessageReceiver.class
                .getSimpleName();
        public static NotificationHub hub = null;
        public static String mChannelId, mUserId;
    
        @Override
        public void onBind(Context context, int errorCode, String appid,
                        String userId, String channelId, String requestId) {
            String responseString = "onBind errorCode=" + errorCode + " appid="
                    + appid + " userId=" + userId + " channelId=" + channelId
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
            if (errorCode == 0) {
                // Binding successful
                Log.d(TAG, " Binding successful");
            }
            try {
                if (hub == null) {
                    hub = new NotificationHub(
                            ConfigurationSettings.NotificationHubName,
                            ConfigurationSettings.NotificationHubConnectionString,
                            context);
                    Log.i(TAG, "Notification hub initialized");
                }
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            mChannelId = channelId;
            mUserId = userId;
    
            registerWithNotificationHubs();
        }
        private void registerWithNotificationHubs() {
    
            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        hub.registerBaidu(mUserId, mChannelId);
                        Log.i(TAG, "Registered with Notification Hub - '"
                                + ConfigurationSettings.NotificationHubName + "'"
                                + " with UserId - '"
                                + mUserId + "' and Channel Id - '"
                                + mChannelId + "'");
                    } catch (Exception e) {
                        Log.e(TAG, e.getMessage());
                    }
                    return null;
                }
            }.execute(null, null, null);
        }
    
        @Override
        public void onMessage(Context context, String message,
                            String customContentString) {
            String messageString = " onMessage=\"" + message
                    + "\" customContentString=" + customContentString;
            Log.d(TAG, messageString);
            if (!TextUtils.isEmpty(customContentString)) {
                JSONObject customJson = null;
                try {
                    customJson = new JSONObject(customContentString);
                    String myvalue = null;
                    if (!customJson.isNull("mykey")) {
                        myvalue = customJson.getString("mykey");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        @Override
        public void onNotificationArrived(Context context, String title, String description, String customContentString) {
            String notifyString = " Notice Arrives onNotificationArrived  title=\"" + title
                    + "\" description=\"" + description + "\" customContent="
                    + customContentString;
            Log.d(TAG, notifyString);
            if (!TextUtils.isEmpty(customContentString)) {
                JSONObject customJson = null;
                try {
                    customJson = new JSONObject(customContentString);
                    String myvalue = null;
                    if (!customJson.isNull("mykey")) {
                        myvalue = customJson.getString("mykey");
                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
        @Override
        public void onNotificationClicked(Context context, String title, String description, String customContentString) {
            String notifyString = " onNotificationClicked title=\"" + title + "\" description=\""
                    + description + "\" customContent=" + customContentString;
            Log.d(TAG, notifyString);
            Intent intent = new Intent(context.getApplicationContext(),MainActivity.class);
            intent.putExtra("title",title);
            intent.putExtra("description",description);
            intent.putExtra("isFromNotify",true);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.getApplicationContext().startActivity(intent);
    
        }
    
        @Override
        public void onSetTags(Context context, int errorCode,
                            List<String> successTags, List<String> failTags, String requestId) {
            String responseString = "onSetTags errorCode=" + errorCode
                    + " successTags=" + successTags + " failTags=" + failTags
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onDelTags(Context context, int errorCode,
                            List<String> successTags, List<String> failTags, String requestId) {
            String responseString = "onDelTags errorCode=" + errorCode
                    + " successTags=" + successTags + " failTags=" + failTags
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onListTags(Context context, int errorCode, List<String> tags,
                            String requestId) {
            String responseString = "onListTags errorCode=" + errorCode + " tags="
                    + tags;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onUnbind(Context context, int errorCode, String requestId) {
            String responseString = "onUnbind errorCode=" + errorCode
                    + " requestId = " + requestId;
            Log.d(TAG, responseString);
    
            if (errorCode == 0) {
                // Unbinding is successful
                Log.d(TAG, " Unbinding is successful ");
            }
        }
    }
    

Wysyłanie powiadomień do aplikacji

Możesz szybko przetestować odbieranie powiadomień z witryny Azure Portal za pomocą przycisku Wyślij na ekranie konfiguracji centrum powiadomień, jak pokazano na następujących ekranach:

Zrzut ekranu portalu Azure z opcją Wyślij test oznaczoną na czerwono i czerwoną strzałką wskazującą na nią. Zrzut ekranu przedstawiający stronę Wysyłanie testowe Baidu w portalu Azure.

Powiadomienia push są zwykle wysyłane za pomocą usługi zaplecza, takiej jak Mobile Services lub ASP.NET, korzystając ze zgodnej biblioteki. Jeśli biblioteka nie jest dostępna dla zaplecza, możesz użyć interfejsu API REST bezpośrednio do wysyłania komunikatów powiadomień.

Dla uproszczenia ten samouczek używa aplikacji konsolowej jako pokazu sposobu wysyłania powiadomienia przy użyciu zestawu .NET SDK. Zalecamy jednak samouczek Używanie usługi Notification Hubs do wysyłania powiadomień do użytkowników jako następny krok w wysyłaniu powiadomień z serwera ASP.NET.

Poniżej przedstawiono różne podejścia do wysyłania powiadomień:

(Opcjonalnie) Wysyłanie powiadomień z aplikacji konsolowej .NET.

W tej sekcji pokażemy wysyłanie powiadomienia przy użyciu aplikacji konsolowej platformy .NET.

  1. Utwórz nową aplikację konsolową visual C#:

    Zrzut ekranu przedstawiający okno dialogowe Nowy projekt z wyróżnioną opcją Aplikacja konsolowa Visual C#.

  2. W oknie Konsola menedżera pakietów ustaw Projekt domyślny na swój nowy projekt aplikacji konsolowej, a następnie w tym oknie wykonaj następujące polecenie:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Ta instrukcja dodaje odwołanie do zestawu SDK usługi Azure Notification Hubs przy użyciu pakietu NuGet Microsoft.Azure.Notification Hubs.

    Zrzut ekranu przedstawiający okno dialogowe Konsoli menedżera pakietów, z opcją

  3. Otwórz plik Program.cs i dodaj następującą instrukcję using:

    using Microsoft.Azure.NotificationHubs;
    
  4. W swojej klasie dodaj następującą metodę i zastąp DefaultFullSharedAccessSignatureSASConnectionString oraz NotificationHubName wartościami, które posiadasz.

    private static async void SendNotificationAsync()
    {
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("DefaultFullSharedAccessSignatureSASConnectionString", "NotificationHubName");
        string message = "{\"title\":\"((Notification title))\",\"description\":\"Hello from Azure\"}";
        var result = await hub.SendBaiduNativeNotificationAsync(message);
    }
    
  5. Dodaj następujące wiersze w metodzie Main :

    SendNotificationAsync();
    Console.ReadLine();
    

Przetestuj aplikację

Aby przetestować tę aplikację za pomocą rzeczywistego telefonu, wystarczy podłączyć telefon do komputera przy użyciu USB. Ta akcja ładuje aplikację na dołączony telefon.

Aby przetestować tę aplikację za pomocą emulatora, na górnym pasku narzędzi programu Android Studio kliknij pozycję Uruchom, a następnie wybierz aplikację: uruchamia emulator, ładuje i uruchamia aplikację.

Aplikacja pobiera userId i channelId z usługi powiadomień Baidu Push i rejestruje się w ośrodku powiadomień.

Aby wysłać powiadomienie testowe, możesz użyć karty debugowania w witrynie Azure Portal. Jeśli skompilujesz aplikację konsolową .NET dla programu Visual Studio, wystarczy nacisnąć F5 w programie Visual Studio, aby uruchomić aplikację. Aplikacja wysyła powiadomienie wyświetlane w górnym obszarze powiadomień urządzenia lub emulatora.