共用方式為


教學課程:從 Azure 通知中樞接收推播通知的初始設定

本教學課程說明如何使用 Azure 通知中樞將推播通知傳送至 iOS 應用程式,並使用適用於 Apple 的 Azure 通知中樞 SDK。

本教學課程涵蓋下列步驟:

  • 建立範例 iOS 應用程式。
  • 連線 iOS 應用程式至 Azure 通知中樞。
  • 傳送測試推播通知。
  • 確認您的應用程式會收到通知。

您可以從 GitHub 下載本教學課程的完整程式碼。

必要條件

若要完成本教學課程,您需要下列必要條件:

  • 執行 Xcode 的 Mac,以及安裝到 Keychain 的有效開發人員憑證。
  • 執行 iOS 10 版或更新版本的 i 電話 或 iPad。
  • 您在Apple入口網站註冊的實體裝置,並與憑證相關聯。

在繼續進行之前,請務必完成上一 個開始使用適用於iOS 應用程式的 Azure 通知中樞的教學課程,在通知中樞中設定和設定推播認證。 即使您在 iOS 開發方面沒有先前的經驗,您也應該能夠遵循這些步驟。

注意

由於推播通知的設定需求,您必須在實體 iOS 裝置 (i 電話 或 iPad) 上部署及測試推播通知,而不是 iOS 模擬器。

將 iOS 應用程式 連線 至通知中樞

  1. 在 Xcode 中,建立新的 Xcode 專案,然後選取 iOS 索引標籤和 應用程式 範本。

    Diagram that shows Xcode setup for new app

  2. 設定新項目的選項時,請務必使用您在Apple Developer入口網站中設定套件組合標識碼時所使用的相同 產品名稱 和組織 標識碼 。 在新專案視窗中識別的套件組合應該填入,以符合 Apple Developer 入口網站中識別的套件組合。 這個值區分大小寫。

  3. 在 [項目導覽器] 底下,選取 [目標] 底下的專案名稱,然後選取 [簽署與功能] 索引標籤。請確定您為 Apple 開發人員帳戶選取適當的小組 XCode 應該會自動根據套件組合識別元提取您先前建立的布建配置檔。

    如果您沒有看到您在 Xcode 中建立的新佈建設定檔,請嘗試重新整理簽署身分識別的設定檔。 單擊 功能表欄上的 [Xcode ]、[ 喜好設定]、 [帳戶 ] 索引卷標、按兩下 [檢視詳細 數據] 按鈕、單擊您的簽署身分識別,然後按下右下角的 [重新整理] 按鈕。

    View details

  4. 在 [ 簽署與功能] 索引標籤中,選取 [+ 功能]。 按兩下 [ 推播通知 ] 加以啟用。

    Capability

  5. 新增 Azure 通知中樞 SDK 模組。

    您可以使用 Cocoapods 或手動將二進位檔新增至專案,將 Azure 通知中樞 SDK 整合到您的應用程式中。

    • 透過 Cocoapods 整合:將下列相依性新增至 Podfile,以在應用程式中包含 Azure 通知中樞 SDK:

      pod 'AzureNotificationHubs-iOS'
      
      • 執行 Pod 安裝以安裝新定義的 Pod,並開啟 .xcworkspace。

        如果您在執行 Pod 安裝時看到錯誤,例如 找不到 AzureNotificationHubs-iOS 的規格,請執行 pod repo update 以從 Cocoapods 存放庫取得最新的 Pod,然後執行 Pod 安裝。

    • 透過 Carthage 整合:將下列相依性新增至您的 Cartfile,以在應用程式中包含 Azure 通知中樞 SDK:

      github "Azure/azure-notificationhubs-ios"
      
      • 接下來,更新組建相依性:
      $ carthage update
      

      如需使用 Carthage 的詳細資訊,請參閱 Carthage GitHub 存放

    • 將二進位檔複製到您的項目中來進行整合:

      您可以將二進位檔複製到專案,如下所示:

      • 下載以 zip 檔案的形式提供的 Azure 通知中樞 SDK 架構,並將其解壓縮。

      • 在 Xcode 中,以滑鼠右鍵按下您的專案,然後按兩下 [新增檔案] 選項,將 WindowsAzureMessaging.framework 資料夾新增至 Xcode 專案。 選取 [ 選項 ],並確定 已選取 [視需要 複製專案],然後按兩下 [ 新增]。

        Add framework

  6. 新增或編輯名為 Dev 設定.plist 的檔案,其中包含兩個屬性、CONNECTION_STRING連接字串 至 Azure 通知中樞,以及 HUB_NAME Azure 通知中樞名稱。

  7. 在適當的 <string></string> 區段中新增連線至 Azure 通知中樞的資訊。 將字串常值佔位符 --HUB-NAME-- 取代 --CONNECTION-STRING-- 為中樞名稱和 DefaultListenSharedAccessSignature,如您先前從入口網站取得:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>HUB_NAME</key>
      <string>--HUB-NAME--</string>
      <key>CONNECTION_STRING</key>
      <string>--CONNECTION-STRING--</string>
    </dict>
    </plist>
    
  8. 在相同的 AppDelegate.m 檔案中,以下列程式代碼取代 之後 didFinishLaunchingWithOptions 的所有程式代碼:

    #import <WindowsAzureMessaging/WindowsAzureMessaging.h>
    #import <UserNotifications/UserNotifications.h>
    
    // Extend the AppDelegate to listen for messages using MSNotificationHubDelegate and User Notification Center
    @interface AppDelegate () <MSNotificationHubDelegate>
    
    @end
    
    @implementation AppDelegate
    
    @synthesize notificationPresentationCompletionHandler;
    @synthesize notificationResponseCompletionHandler;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        NSString *path = [[NSBundle mainBundle] pathForResource:@"DevSettings" ofType:@"plist"];
        NSDictionary *configValues = [NSDictionary dictionaryWithContentsOfFile:path];
    
        NSString *connectionString = [configValues objectForKey:@"CONNECTION_STRING"];
        NSString *hubName = [configValues objectForKey:@"HUB_NAME"];
    
        if([connectionString length] != 0 && [hubName length] != 0) {
            [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
            [MSNotificationHub setDelegate:self];
            [MSNotificationHub initWithConnectionString:connectionString withHubName:hubName];
    
            return YES;
        }
    
        NSLog(@"Please setup CONNECTION_STRING and HUB_NAME in DevSettings.plist and restart application");
    
        exit(-1);
    }
    
    - (void)notificationHub:(MSNotificationHub *)notificationHub didReceivePushNotification:(MSNotificationHubMessage *)message {
        // Send message using NSNotificationCenter with the message
        NSDictionary *userInfo = [NSDictionary dictionaryWithObject:message forKey:@"message"];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"MessageReceived" object:nil userInfo:userInfo];
    }
    
    @end
    

    此程式代碼會使用您在 Dev 設定.plist 中指定的連線資訊,連線到通知中樞。 然後,它會將裝置令牌提供給通知中樞,讓中樞可以傳送通知。

建立 NotificationDetailViewController 頭檔

  1. 類似於先前的指示,請新增另一個名為 SetupViewController.h 的頭檔。 以下欄程序代碼取代新標頭檔案的內容:

    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface SetupViewController : UIViewController
    
    @end
    
    NS_ASSUME_NONNULL_END
    
  2. 新增實作檔案 SetupViewController.m。 將檔案的內容取代為下列程序代碼,以實作 UIViewController 方法:

    #import "SetupViewController.h"
    
     static NSString *const kNHMessageReceived = @"MessageReceived";
    
     @interface SetupViewController ()
    
     @end
    
     @implementation SetupViewController
    
     - (void)viewDidLoad {
         [super viewDidLoad];
    
         // Listen for messages using NSNotificationCenter
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceivePushNotification:) name:kNHMessageReceived object:nil];
     }
    
     - (void)dealloc {
         // Clean up subscription to NSNotificationCenter
         [[NSNotificationCenter defaultCenter] removeObserver:self name:kNHMessageReceived object:nil];
     }
    
     - (void)didReceivePushNotification:(NSNotification *)notification {
         MSNotificationHubMessage *message = [notification.userInfo objectForKey:@"message"];
    
         // Create UI Alert controller with message title and body
         UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message.title
                              message:message.body
                       preferredStyle:UIAlertControllerStyleAlert];
         [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil]];
         [self presentViewController:alertController animated:YES completion:nil];
    
         // Dismiss after 2 seconds
         dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
             [alertController dismissViewControllerAnimated:YES completion: nil];
         });
    
     }
    
     @end
    
  3. 若要確認沒有任何失敗,請在您的裝置上建置並執行應用程式。

傳送測試推播通知

您可以使用 Azure 入口網站 中的 [測試傳送] 選項,在應用程式中測試接收通知。 它會將測試推播通知傳送至您的裝置。

Test send

推播通知通常會在後端服務中傳送,例如Mobile Apps或使用相容的連結庫 ASP.NET。 如果後端無法使用連結庫,您也可以直接使用 REST API 來傳送通知訊息。

以下是您可能想要檢閱以傳送通知的其他一些教學課程清單:

確認您的應用程式收到推播通知

若要在 iOS 上測試推播通知,您必須將應用程式部署至實體 iOS 裝置。 您無法使用 iOS 模擬器傳送 Apple 推播通知。

  1. 執行應用程式並確認註冊成功,然後按 [ 確定]。

    Register

  2. 接下來,從 Azure 入口網站 傳送測試推播通知,如上一節所述。

  3. 推播通知會傳送至所有已註冊的裝置,以接收來自指定通知中樞的通知。

    Send test

下一步

在此簡單範例中,您會將推播通知廣播到所有已註冊的 iOS 裝置。 若要瞭解如何將推播通知傳送至特定 iOS 裝置,請繼續進行下列教學課程:

教學課程:將通知推送至特定裝置

如需詳細資訊,請參閱下列文章: