fc2ブログ

記事一覧

VoIPプッシュ通知を実装する方法 -iOS編- | Xamarin.Forms


今回はiOSでVoIPプッシュ通知を実装する方法についてご紹介いたします。
前回の記事では標準プッシュ通知を実装する方法についてご紹介しました。
標準プッシュ通知よりも優先度が高く、アプリが起動していなくてもアプリを起動したり、アプリが起動していなくてもバックグラウンド処理を実行できたりと、かなり優遇されている仕組みです。
今回も配信サーバーはAWSを利用します。



前提条件
・Windows10 Pro 64Bit
・Visual Studio 2015 Community Update3
・Xamarin 4.3.0.795 (NuGet Xamarin.Forms 2.3.4.247)
・macOS Sierra 10.12.4 / Xcode8.3.1 / Xamarin.iOS 10.6.0.10
・AppleDeveloperProgramへの申し込み(年間12,000円程)
・基本的なプロビジョニングが設定済みであること
・AWSのSDKがインストール済み(前回の記事をご確認ください)



1.VoIP証明書の作成

Apple Developer Program にログインし、VoIP用の追加の証明書を作成します。
手順は前回のプッシュ通知の件と酷似していますので、慣れていきますね。

(1)Certificatesからプラスマークのボタンを押下し、証明書を追加します。

(2)種類を「VoIP services Certificate」を選択し、Continueボタンを押下します。

xamarin_voip_push_01.png


(3)どのアプリケーションにVoIPを追加するかを選択します。該当のAppIDを選択してください。

xamarin_voip_push_02.png


(4)Choose FileよりCSRファイルを選択します。プロビジョニングを作成する際または前回でも使用しておりますので、CSRファイルの作成方法については割愛しています。

xamarin_voip_push_03.png


(5)Downloadボタンより証明書を取得します。

xamarin_voip_push_04.png


(6)再度メニューのCertificatesから確認すると以下のように有効な状態であることが表示されているはずです。

xamarin_voip_push_05.png


(7)先ほどダウンロードしたファイルをMac上でダブルクリックしてキーチェーンアクセスに取り込みます。取り込みましたらP12ファイルに書き出します。
※ログイン>自分の証明書にドラッグすると正しくP12ファイルとして書き出しができる状態となります。
※手順は前回の記事と同じです。

xamarin_voip_push_06.png




2.AWSの設定

前回の記事でご紹介しましたプッシュ通知の設定が済みであることを前提とします。
(1)AmazonSNSからApplicaitonsを選択し、新しいApplicationを作成します。

(2)Application作成手順は以下の通りです。
1:任意の名称を入力します。
2:デバッグ環境では「Apple Development」を選択します。
  配信用アプリの場合は「Apple Production」を選択します。
3:「VoIP push certificate」を選択します。
4:手順1-7で作成したP12ファイルを選択します。
5:P12ファイルを作成した際のパスワードを入力します。
6:Load credentials from file ボタンを押下してP12ファイルを読み込みます。
7:Create platform application ボタンを押下して作成します。

xamarin_voip_push_07.png




3.iOSプロジェクトの設定

(1)iOSプロジェクトのプロパティを開き、VoIP over IP を有効にします。

xamarin_voip_push_08.png


(2)AppDelegate.csに追加のコードを記載します。

using PushKit;
using CoreFoundation;
using Amazon;
using Amazon.CognitoIdentity;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    //PKPushRegistryDelegateから呼び出しできるように
    public static AmazonSimpleNotificationServiceClient SnsClient = null;

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
global::Xamarin.Forms.Forms.Init();

        //VoIPの設定
        PKPushRegistry voipReg = new PKPushRegistry(DispatchQueue.MainQueue);
        voipReg.Delegate = new VoIPRegistryDelegate();
        voipReg.DesiredPushTypes = new NSSet(new string[] { PKPushType.Voip });

        //AWS
        this.SetAmazonSnsSettings();

        LoadApplication(new App());
        return base.FinishedLaunching(app, options);
    }
}
#region "VoIP"
public class VoIPRegistryDelegate : PKPushRegistryDelegate
{
    public override void DidReceiveIncomingPush(PKPushRegistry registry, PKPushPayload payload, string type)
    {
        // VoIPプッシュ通知を受けたときの処理
if (UIApplication.SharedApplication.ApplicationState == UIApplicationState.Background)
{
//アプリが起動していない場合にバックグラウンド処理を実行する
        AppDelegate.BackgroundService();
}
    }

    public override void DidUpdatePushCredentials(PKPushRegistry registry, PKPushCredentials credentials, string type)
    {
        // デバイストークンをプッシュ通知サーバに登録する処理
        if (credentials != null &&
            credentials.Token != null &&
            !String.IsNullOrEmpty(credentials.Token.ToString()))
        {
            string token = credentials.Token.ToString();
            token = token.Trim('<').Trim('>').Replace(" ", "");

            //register with SNS to create an endpoint ARN
            var response = AppDelegate.SnsClient.CreatePlatformEndpointAsync(
            new CreatePlatformEndpointRequest
            {
                Token = token,
                PlatformApplicationArn = "arn:aws:sns:us-west-9:999999999999:app/APNS_VOIP_SANDBOX/AppName_VoIP"
            });
        }
    }
}
#endregion

※AmazonSimpleNotificationServiceClient については前回の記事をご参考ください。



4.VoIPプッシュ通知のテスト

これも前回の標準プッシュ通知と同じです。
(1)Amazon SNS のApplicationsメニューから送信したいデバイス(EndPoint)を選択してPublish to endpoint ボタンを押下します。

xamarin_voip_push_09.png


(2)送信したいメッセージを入力して、Publishします。

xamarin_voip_push_10.png


(3)Visual Studio上でブレークポイントにヒットします。

xamarin_voip_push_11.png



5.処理の順序

以下のように処理が流れます。
(1)アプリ起動
(2)AppDelegate.FinishedLaunching
(3)PKPushRegistryDelegate.DidUpdatePushCredentials
(4)手動でアプリ終了
(5)AWSからVoIPプッシュ通知を実行
(6)AppDelegate.FinishedLaunching
(7)PKPushRegistryDelegate.DidReceiveIncomingPush




最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblog.dynaspo.com/blog-entry-81.html


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。