Xamarin.iOS Uygulamanıza anında bildirim ekleme

Genel Bakış

Bu öğreticide, Xamarin.iOS hızlı başlangıç projesine anında İlerlerken bildirimleri eklersiniz; böylece bir kayıt her ekildiğinde cihaza anında İlerlerken bildirim gönderilir.

İndirilen hızlı başlangıç sunucusu projesini kullanmayacaksanız anında bildirim uzantısı paketi gerekir. Daha fazla bilgi için bkz. Azure için .NET arka Mobile Apps SDK'sı ile çalışma.

Önkoşullar

Apple'ın geliştirici portalında anında bildirim almak için uygulamayı kaydetme

Mobil Uygulamanızı anında bildirim gönderecek şekilde yapılandırma

  1. Mac'iniz üzerinde Anahtarlık Erişimi'ne basın. Sol gezinti çubuğunun Kategori'nin altındaSertifikalarım'ı açın. Önceki bölümde indirdiğiniz SSL sertifikasını bulun ve ardından içeriğini açıklar. Yalnızca sertifikayı seçin (özel anahtarı seçme). Ardından dışarı aktarın.
  2. Uygulamanın Azure portal Tüm Uygulama Hizmetleri'neGözat'ı> seçin. Ardından arka Mobile Apps seçin.
  3. Ayarlar'nin altında Anında App Service seçin. Ardından bildirim hub'nizin adını seçin.
  4. Apple Push Bildirim Hizmetleri>Upload gidin. Upload .p12 dosyasında doğru Modu seçerek (önceki istemci SSL sertifikanız üretim mi yoksa korumalı alan mı olduğuna bağlı olarak). Tüm değişiklikleri kaydedin.

Hizmetiniz artık iOS'ta anında İlerle bildirimleriyle çalışacak şekilde yapılandırılmıştır.

Anında bildirim göndermek için sunucu projesini güncelleştirme

Bu bölümde, mevcut arka uç Mobile Apps yeni bir öğe ekleniyorsa anında ileti bildirim göndermek için kodu güncelleştirin. Bu işlem, platformlar arası itmelere olanak Notification Hubs Azure Notification Hubs şablon özelliğiyle güçlendirilmiştir. Çeşitli istemciler şablonlar kullanılarak anında anında bildirim için kaydedilir ve tek bir evrensel anında bağlantı tüm istemci platformlarını kullanabilir.

Arka uç proje türünüzle eşleşen aşağıdaki yordamlardan birini ( .NET arka uç veya arka uçNode.js seçin.

.NET arka uç projesi

  1. Bu Visual Studio sunucu projesine sağ tıklayın. Ardından Paketleri Yönet'NuGet seçin. için arama Microsoft.Azure.NotificationHubsve ardından Yükle'yi seçin. Bu işlem, Notification Hubs göndermek için Notification Hubs kitaplığını yüklür.

  2. Sunucu projesinde ControllersTodoItemController.cs'yi> açın. Ardından deyimlerini kullanarak aşağıdakini ekleyin:

    using System.Collections.Generic;
    using Microsoft.Azure.NotificationHubs;
    using Microsoft.Azure.Mobile.Server.Config;
    
  3. PostTodoItem yöntemindeInsertAsync çağrısının ardından aşağıdaki kodu ekleyin:

    // Get the settings for the server project.
    HttpConfiguration config = this.Configuration;
    MobileAppSettingsDictionary settings =
        this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();
    
    // Get the Notification Hubs credentials for the mobile app.
    string notificationHubName = settings.NotificationHubName;
    string notificationHubConnection = settings
        .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;
    
    // Create a new Notification Hub client.
    NotificationHubClient hub = NotificationHubClient
    .CreateClientFromConnectionString(notificationHubConnection, notificationHubName);
    
    // Send the message so that all template registrations that contain "messageParam"
    // receive the notifications. This includes APNS, GCM, WNS, and MPNS template registrations.
    Dictionary<string,string> templateParams = new Dictionary<string,string>();
    templateParams["messageParam"] = item.Text + " was added to the list.";
    
    try
    {
        // Send the push notification and log the results.
        var result = await hub.SendTemplateNotificationAsync(templateParams);
    
        // Write the success result to the logs.
        config.Services.GetTraceWriter().Info(result.State.ToString());
    }
    catch (System.Exception ex)
    {
        // Write the failure result to the logs.
        config.Services.GetTraceWriter()
            .Error(ex.Message, null, "Push.SendAsync Error");
    }
    

    Bu işlem, öğeyi içeren bir şablon bildirimi gönderir. Yeni öğe ekildiğinde metin.

  4. Sunucu projesini yeniden yayımla.

Node.js arka uç projesi

  1. Arka uç projenizi ayarlayın.

  2. todoitem.js kodu aşağıdaki kodla değiştirin:

    var azureMobileApps = require('azure-mobile-apps'),
    promises = require('azure-mobile-apps/src/utilities/promises'),
    logger = require('azure-mobile-apps/src/logger');
    
    var table = azureMobileApps.table();
    
    table.insert(function (context) {
    // For more information about the Notification Hubs JavaScript SDK,
    // see https://aka.ms/nodejshubs.
    logger.info('Running TodoItem.insert');
    
    // Define the template payload.
    var payload = '{"messageParam": "' + context.item.text + '" }';  
    
    // Execute the insert. The insert returns the results as a promise.
    // Do the push as a post-execute action within the promise flow.
    return context.execute()
        .then(function (results) {
            // Only do the push if configured.
            if (context.push) {
                // Send a template notification.
                context.push.send(null, payload, function (error) {
                    if (error) {
                        logger.error('Error while sending push notification: ', error);
                    } else {
                        logger.info('Push notification sent successfully!');
                    }
                });
            }
            // Don't forget to return the results from the context.execute().
            return results;
        })
        .catch(function (error) {
            logger.error('Error while running context.execute: ', error);
        });
    });
    
    module.exports = table;  
    

    Bu işlem, yeni bir öğe ekildiğinde item.text öğesini içeren bir şablon bildirimi gönderir.

  3. Dosyayı yerel bilgisayarınızda düzenlerken sunucu projesini yeniden yayımlarsınız.

Xamarin.iOS projenizi yapılandırma

iOS projesini Xamarin Studio

  1. Xamarin.Studio'da Info.plist'i açın ve Paket Tanımlayıcısı'ı yeni uygulama kimliğiniz ile daha önce oluşturduğunuz paket kimliğiyle güncelleştirin.

  2. Ekranı aşağı kaydırarak Arka Plan Modları'ya kaydırın. Arka Plan Modlarını Etkinleştir kutusunu ve Uzak bildirimler kutusunu seçin.

  3. Çözüm Panelinde projenize çift tıklar ve Project açın.

  4. Build (Derleme) altında iOS Bundle Signing (iOS Paket Paketi İmzalama) öğesini seçin ve bu proje için az önce ayarlayarak ilgili kimlik ve sağlama profilini seçin.

    Bu, projenin kod imzalama için yeni profili kullanmasını sağlar. Resmi Xamarin cihaz sağlama belgeleri için bkz. Xamarin Cihaz Sağlama.

iOS projesini Visual Studio

  1. Bu Visual Studio projeye sağ tıklayın ve ardından Özellikler'e tıklayın.

  2. Özellikler sayfalarında iOS Uygulaması sekmesine tıklayın ve Tanımlayıcıyı daha önce oluşturduğunuz kimlikle güncelleştirin.

  3. iOS Paket Paketi İmzalama sekmesinde, bu proje için az önce ayarlayarak ilgili kimliği ve sağlama profilini seçin.

    Bu, projenin kod imzalama için yeni profili kullanmasını sağlar. Resmi Xamarin cihaz sağlama belgeleri için bkz. Xamarin Cihaz Sağlama.

  4. Info.plist'e çift tıklar ve ardından Arka Plan Modları altında RemoteNotifications'ıetkinleştirin.

Uygulamanıza anında iletme bildirimleri ekleme

  1. QSTodoService'te, AppDelegate'in mobil istemciyi edinemesi için aşağıdaki özelliği ekleyin:

    public MobileServiceClient GetClient {
        get
        {
            return client;
        }
        private set
        {
            client = value;
        }
    }
    
  2. usingAppDelegate.cs dosyasının en üstüne aşağıdaki deyimi ekleyin.

    using Microsoft.WindowsAzure.MobileServices;
    using Newtonsoft.Json.Linq;
    
  3. AppDelegate'teFinishedLaunching olayı geçersiz kılın:

     public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
     {
         // registers for push for iOS8
         var settings = UIUserNotificationSettings.GetSettingsForTypes(
             UIUserNotificationType.Alert
             | UIUserNotificationType.Badge
             | UIUserNotificationType.Sound,
             new NSSet());
    
         UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
         UIApplication.SharedApplication.RegisterForRemoteNotifications();
    
         return true;
     }
    
  4. Aynı dosyada olayı geçersiz RegisteredForRemoteNotifications kılın. Bu kodda, sunucu tarafından desteklenen tüm platformlara gönderilecek basit bir şablon bildirimine kaydolacaksınız.

    Şablon ekleme hakkında daha fazla bilgi Notification Hubs bkz. Şablonlar.

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        MobileServiceClient client = QSTodoService.DefaultService.GetClient;
    
        const string templateBodyAPNS = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";
    
        JObject templates = new JObject();
        templates["genericMessage"] = new JObject
        {
            {"body", templateBodyAPNS}
        };
    
        // Register for push with your mobile app
        var push = client.GetPush();
        push.RegisterAsync(deviceToken, templates);
    }
    
  5. Ardından DidReceivedRemoteNotification olaylarını geçersiz kılın:

     public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
     {
         NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary;
    
         string alert = string.Empty;
         if (aps.ContainsKey(new NSString("alert")))
             alert = (aps [new NSString("alert")] as NSString).ToString();
    
         //show alert
         if (!string.IsNullOrEmpty(alert))
         {
             UIAlertView avAlert = new UIAlertView("Notification", alert, null, "OK", null);
             avAlert.Show();
         }
     }
    

Artık uygulamanız anında bildirim desteği için güncelleştirildi.

Uygulamanıza anında bildirimlerini test edin

  1. Projeyi oluşturmak ve uygulamayı iOS özellikli bir cihazda başlatmak için Çalıştır düğmesine basın, ardından anında İlerle bildirimleri kabul etmek için Tamam'a tıklayın.

    Not

    Uygulamanıza gelen anında bildirimlerini açıkça kabul etmek gerekir. Bu istek yalnızca uygulama ilk kez çalıştır olduğunda gerçekleşir.

  2. Uygulamada bir görev yazın ve artı () simgesine+ tıklayın.

  3. Bir bildirimin alın olduğunu doğrulayın ve ardından tamam'a tıklar ve bildirimi reddedin.

  4. 2. adımı tekrarlayın ve uygulamayı hemen kapatın ve bir bildirim gösterildiğini doğrulayın.

Bu öğreticiyi başarıyla tamamladın.