MANUAL & FAQ

文章详情

使用Ubiix PBX在Xamarin IOS APP中实施推送通知
来源: | 作者:ubiixcn | 发布时间: 2219天前 | 687 次浏览 | 分享到:

本指南将逐步说明如何基于Ubiix VoIP SDK创建本机iOS应用程序,该SDK可以接收Ubiix PBX发送的VoIP推送通知。

 

1. VoIP通知

官方文档可以在这里找到。其中的一些优点包括:

如果收到VoIP推送时应用程序未运行,应用程序会自动重新启动

设备仅在发生VoIP推送时唤醒(以节省电池)

VoIP会直接推送到您的应用进行处理,并且无延迟地发送

如果收到VoIP推送时应用程序未运行,应用程序会自动重新启动

 

2.先决条件设置

Apple为我们提供了一个名为PushKit的框架,以支持使用此VoIP推送功能。但是,我们需要配置一些额外的设置才能使其工作。

 

3.创建一个App ID

如果您没有应用程序(并因此没有应用程序ID),则需要创建一个。
首先,登录您的Apple开发者帐户并访问证书,标识符和配置文件:

接下来,转到标识符 - >应用程序ID,然后单击+按钮。

这里填写的两件重要的事情是:App ID Description和所谓的Bundle ID(这很可能是com.yourdomain.yourappname):

虽然在上面的截图中没有看到,但我使用ubiixVoipTest作为Bundle ID。这在下一步中将很重要。

 

4.生成VoIP推送证书

要生成VoIP推送证书,首先您需要登录:https
//developer.apple.com/account/ios/certificate

单击左侧“ 证书”部分中的“ 全部”按钮和+按钮:

在下一页中,您需要选择VoIP服务证书:

在此之后,您需要选择您创建此VoIP证书的App ID:

接下来,您将看到有关如何创建所谓的CSR(证书签名请求)文件的说明:

一旦你创建了这个文件,你就可以在下一个屏幕上选择它来上传。如果一切顺利,您将获得必须下载的证书:

下载证书后,将其打开,钥匙串访问应用程序将打开。现在您将在“ 我的证书”部分下看到证书:


5.将VoIP 推送支持添加到ubiix SIPSample项目中

下载示例项目,解压缩并打开推送 SIPSample项目。

在设置产品名称时要特别小心,因为根据它自动设置分类标识符。我们需要将其设置为与我们在上述步骤中设置的Bundle标识符相同。

6.设置适当的功能

要在应用程序中使用VoIP推送,我们需要打开我们的应用程序的背景模式,并检查几个复选框:

7.确保您选择了以下选项

启用推送通知

音频,Airplay和画中画

IP语音

后台提取

远程通知

 

8.添加代码

打开AppDelegate.cs并在其顶部添加导入PushKit语句。

接下来,在应用函数的  didFinishLaunchingWithOptions 部分中,确保您注册了如下通知:

public override bool FinishedLaunching(UIApplication app,NSDictionary options)
{
Console.WriteLine(“FinishedLaunching”); 
UIUserNotificationType notificationTypes = UIUserNotificationType.Alert | 
 UIUserNotificationType.Badge | 
 UIUserNotificationType.Sound;

var userNoticationSettings = UIUserNotificationSettings.GetSettingsForTypes(notificationTypes,new NSSet(new string [] {}));

app.RegisterUserNotificationSettings(userNoticationSettings); 
返回true; 
}

我们需要实现它的委托回调  函数didRegisterUserNotificationSettings:

公共覆盖无效DidRegisterUserNotificationSettings(UIApplication应用程序,UIUserNotificationSettings notificationSettings)

{

PKPushRegistry pushRegistry = new PKPushRegistry(null);

pushRegistry.Delegate = this;

pushRegistry.DesiredPushTypes = new NSSet(new string [] {PushKit.PKPushType.Voip});

}

在此回调中,我们注册了VoIP通知,因为我们知道用户已同意接收通知(因为此函数已被调用)。我们通过声明voipRegistry对象来启用VoIP通知。

此时,您将在pushRegistry.delegate = self上得到一个错误; 行说不能分配'AppDelegate'类型的值键入'PKPushRegistryDelegate!'。

pushRegistry的委托类型是PKPushRegistryDelegate,它有三种方法,其中两种是必需的。(didUpdatePushCredentials和didReceiveIncomingPushWithPayload)。我们必须定义一个所谓的AppDelegate类的扩展。我们通过在AppDelegate.m文件中的所有当前代码之后添加以下代码来完成此操作:

[Register(“AppDelegate”)] public partial class AppDelegate:UIApplicationDelegate,IPKPushRegistryDelegate 
{
公共无效DidUpdatePushCredentials(PKPushRegistry注册表,PKPushCredentials凭据,字符串类型)
如果(凭证= NULL && credentials.Token!= NULL!)
VAR fullToken = credentials.Token.ToString(); 
token = fullToken.Trim('<')。Trim('>')。Replace(“”,string.Empty); 
Console.WriteLine(“Token is”+ token); 
addPushSupportWithUbiix(真)
}
公共无效DidReceiveIncomingPush(PKPushRegistry注册表,PKPushPayload有效载荷,字符串类型)
Console.WriteLine(“我的推动即将到来!”); 
NSString alertKey = new NSString(“alert”);
UILocalNotification notification = new UILocalNotification(); 
notification.FireDate = NSDate.Now; 
notification.AlertBody =“接收新的电话”; 
notification.TimeZone = NSTimeZone.DefaultTimeZone; 
notification.SoundName = UILocalNotification.DefaultSoundName; 
notification.ApplicationIconBadgeNumber = 1; 
UIApplication.SharedApplication.ScheduleLocalNotification(通知); 
}

添加这个扩展后,你会注意到前面提到的错误消失了。

在第一个函数中,我们只输出设备令牌。当我们将通过发送VoIP推送通知来测试我们的应用程序时,我们将在下一部分中需要此令牌。

在第二个中,我们对收到的VoIP推送通知“采取行动”。在这个具体的例子中,如果应用程序在后台显示本地通知,或者如果我们在应用程序中显示警报。第三个函数(didInvalidatePushTokenForType)用于在令牌失效时进行处理。

我们需要通知Ubiix该客户端已经启用了推送,通过向REGISTER消息添加sip头“ubiix-push”。

public void addPushSupportWithubiixBoolean enablePush)
if(token == null || token.Length <1)
return; 
}

mUbiixSDK.clearAddedSipMessageHeaders();

字符串bundleIdentifier = NSBundle.MainBundle.BundleIdentifier; 
字符串pushHeaderInSIPRegisterMessage; 
if(enablePush)
pushHeaderInSIPRegisterMessage =“device-os = ios; device-uid =”+ token +“; allow-call-push = true; allow-message-push = true; app-id =”+ bundleIdentifier; 
else 
pushHeaderInSIPRegisterMessage =“device-os = ios; device-uid =”+ token +“; allow-call-push = false; allow-message-push = false; app-id =”+ bundleIdentifier; 
mUbiixSDK.addSipMessageHeader(-1,“REGISTER”,1,“ubiix-push”,pushHeaderInSIPRegisterMessage); 

addPushSupportWithUbiix(真);

如果您想禁用推送,则需要使用取消注册消息来指示Ubiix

addPushSupportWithUbiix(假);

当应用程序收到推送APP正在运行时,它应该自动注册到服务器:

public void doAutoRegister()
if(textUsername.Text.Length> 1 && 
textPassword.Text.Length> 1 && 
textSIPserver.Text.Length> 1 && 
textSIPUbiix.Text.Length> 1)
onOnlineButtonClick(null); 
}

 

9.准备证书文件

我们下载并添加到KeyChain的VoIP证书文件必须转换为不同的文件格式,以便我们能够将其与上面列出的工具和服务一起使用。
首先,您需要在Mac上打开KeyChain应用程序并导出(右键单击并选择导出)证书:

您将获得YOUR_CERT.p12 (例如ubiixgo_voip_push.p12)文件。现在导出证书密钥文件。

您将获得一个YOUR_CERT_key.p12(例如ubiixgo_voip_push_key.p12)文件。
现在,导航到您已将该文件导出到的文件夹并执行以下命令:
openssl pkcs12 -clcerts -nokeys -out ubiixgo_voip_push.pem -in ubiixgo_voip_push.p12 
openssl pkcs12 -nocerts -out ubiixgo_voip_push_key.pem -in ubiixgo_voip_push_key.p12 
openssl rsa -in ubiixgo_voip_push_key.pem -out ubiixgo_voip_push_key_nopws.pem

这将生成我们将在PBX服务器中使用的ubiixgo_voip_push.pem和ubiixgo_voip_push_key_nopws.pem文件。

 

10.休斯顿

休斯敦将允许我们从终端窗口发送推送通知以供测试。

我们下载并添加到KeyChain的VoIP证书文件必须转换为不同的文件格式,以便我们能够将其与上面列出的工具和服务一起使用。
尽管文档说可以使用gem install houston安装它,但使用此命令安装它很可能最终(在某些StackOverflow搜索之后):

sudo gem install -n / usr / local / bin houston

这样你就可以将它安装到你有充分权利的本地bin目录中。
休斯顿安装了另一个工具,可以帮助我们发送如下通知:
使用终端导航到您拥有证书的文件夹:

cat ubiixgo_voip_push.pem ubiixgo_voip_push_key-nopwd.pem> ubiixgo2in1.pem

VoIP Push APP复制设备令牌并按如下所示执行命令:

apn push“”-c ubiixgo2in1.pem -m“测试VoIP通知!”

,请注意,要将ubiixgo_voip_push.pem ubiixgo_voip_push_key-nopwd.pem更改为您在上述步骤中命名该文件的任何内容,您应该在终端中获得以下输出:

1个推送通知已成功发送

而且,如果手机处于前台,您应该在手机上看到推送消息。

 

11. Ubiix PBX

现在登录Ubiix PBX管理控制台,选择菜单“ 设置 ”>“ 移动推送 ”。

点击“ 添加新应用程序 ”按钮,你会看到下面的屏幕:

请设置以下项目:

启用 - 选中它启用推送并取消选中禁用推送

Apple和Google都提供生产推送服务器和用于发送推送通知的开发推送服务器。开发生产服务器通常在开发阶段使用。一旦您的应用程序发布,您可以将此设置更改为生产服务器。

应用程序ID - 您在步骤3中创建的ID。请注意,此ID区分大小写。

Apple证书文件和私钥文件。您在步骤9中生成的证书文件。请记住,私钥文件必须没有密码。

点击“ 应用 ”按钮并在PBX中启用推送服务。