Xamarin.iOSでAPNS

APNSはApple Push Notification Serviceの略でiOS用のPUSH通知です。
証明書の作成方法とかApple Developer Centerとかはそこら中にあるので割愛
サーバー側は使うサーバーによって違うので割愛(今回はWindows Azure使いました)

AppDelegate.cs

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
+	public string DeviceToken { get; set; }

	public override bool FinishedLaunching (UIApplication app, NSDictionary options)
	{
+		// APNS サーバにアプリを登録
+		UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound | UIRemoteNotificationType.Alert;
+		UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);

		〜中略〜

		return true;
	}

	// DeviceTokenの取得に成功
+	public override async void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken)
+	{
+		string trimmedDeveceToken = deviceToken.Description;
+		if (!string.IsNullOrWhiteSpace (trimmedDeveceToken)) 
+		{
+			trimmedDeveceToken = trimmedDeveceToken.Trim ('');
+			trimmedDeveceToken = trimmedDeveceToken.Replace (" ", "");
+		}
+		DeviceToken = trimmedDeveceToken;
+
+		(サーバーにDeviceTokenを送信する処理)
+	}
+
+	// DeviceTokenの取得に失敗(ネットつながってないとかシミュレータとか)
+	public override void FailedToRegisterForRemoteNotifications (UIApplication application, NSError error)
+	{
+		base.FailedToRegisterForRemoteNotifications (application, error);
+	}
+
+	// PUSH通知を受け取った
+	public override void ReceivedRemoteNotification (UIApplication application, NSDictionary userInfo)
+	{
+		bool success = userInfo.TryGetValue(new NSString("inAppMessage"), out inAppMessage);
+		if (success)
+		{
+			// 通知センターに登録して各Controllerで受け取れるようにする
+			NSNotificationCenter.DefaultCenter.PostNotificationName ("ReloadChatMessage", null);
+		}
+	}

NotificationViewController.cs

public partial class NotificationViewController : UIViewController
{
+	NSObject notification;

	public override void ViewWillAppear (bool animated)
	{
		base.ViewWillAppear (animated);

+		// PUSH通知受け取り通知
+		notification = NSNotificationCenter.DefaultCenter.AddObserver ("ReloadChatMessage", async delegate(NSNotification obj) {
+			(PUSH通知受け取った時に行いたい処理)
+		});
	}

	public override void ViewDidDisappear (bool animated)
	{
		base.ViewDidDisappear (animated);

+		// PUSH通知受け取り削除
+		NSNotificationCenter.DefaultCenter.RemoveObserver (notification);
	}
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中