MANUAL & FAQ
文章详情
4.生成VoIP推送证书
8.添加代码
打开AppDelegate.m并在其顶部添加导入PushKit语句。
接下来,在应用程序函数的didFinishLaunchingWithOptions部分中,确保您注册了以下通知:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
...
}
我们需要实现它的委托回调函数didRegisterUserNotificationSettings:
- (void)应用程序:(UIApplication *)应用程序didRegisterUserNotificationSettings :( UIUserNotificationSettings *)notificationSettings
{
PKPushRegistry * pushRegistry = [[PKPushRegistry alloc] initWithQueue:nil];
pushRegistry.delegate = self;
pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
}
在此回调中,我们注册了VoIP通知,因为我们知道用户已同意接收通知(因为此函数已被调用)。我们通过声明voipRegistry 对象来启用VoIP通知 。
此时,您将在pushRegistry.delegate = self上得到一个错误; 行说“不能分配类型' AppDelegate ' 的值键入' PKPushRegistryDelegate!'”。
pushRegistry的委托类型是 PKPushRegistryDelegate ,它有三种方法,其中两种是必需的。(didUpdatePushCredentials 和 didReceiveIncomingPushWithPayload)。我们必须定义一个所谓的AppDelegate类的扩展。我们通过在AppDelegate.m文件中的所有当前代码之后添加以下代码来完成此操作:
@interface AppDelegate:UIResponder
- (void)pushRegistry:(PKPushRegistry *)注册表didUpdatePushCredentials:(PKPushCredentials *)凭证forType:(PKPushType)类型
{
NSString * token = [NSString stringWithFormat:@“%@”,credentials.token];
[[NSNotificationCenter defaultCenter] postNotificationName:@“TOKEN”object:token];
NSLog(@“%@”,令牌);
_enablePUSH = YES;
}
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type
{
NSLog(@“Payload:%@”,payload.dictionaryPayload);
[[NSNotificationCenter defaultCenter] postNotificationName:@“PAYLOAD”object:payload.dictionaryPayload];
UIUserNotificationType theType = [UIApplication sharedApplication] .currentUserNotificationSettings.types;
if(theType == UIUserNotificationTypeNone){
UIUserNotificationSettings * userNotifySetting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert
类别:无];
[[UIApplication sharedApplication] registerUserNotificationSettings:userNotifySetting];
}
如果(!_ callManager.enableCallKit)
{
//如果未启用Call Kit,请显示本地通知
UILocalNotification * backgroudMsg = [[UILocalNotification alloc] init];
backgroudMsg.alertBody = @“你接到一个新的电话”;
backgroudMsg.soundName = @“ringtone.mp3”;
backgroudMsg.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
[[UIApplication sharedApplication] presentLocalNotificationNow:backgroudMsg];
}
_enablePUSH = YES;
[loginViewController receivedPushIncomingCall];
};
添加这个扩展后,你会注意到前面提到的错误消失了。
在第一个函数中,我们只输出设备令牌。当我们通过发送VoIP推送通知来测试我们的应用程序时,我们将在下一部分中需要此令牌。
在第二个中,我们对收到的VoIP推送通知“采取行动”。在这个具体的例子中,如果应用程序在后台显示本地通知,或者如果我们在应用程序中显示警报。当令牌失效时使用第三个函数(didInvalidatePushTokenForType)。
我们需要通过向REGISTER消息添加SIP头“ ubiix-push ”来通知Ubiix PBX此客户端已启用推送 。
NSString * bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSString * pushMessage = [[NSString alloc] initWithFormat:@“device-os = ios; device-uid =%@; allow-call-push = true; allow-message-push = true; app-id =%@”, _textToken.text,bundleIdentifier];
[ubiixSDK addSipMessageHeader:-1 methodName:@“REGISTER”msgType:1 headerName:@“ubiix-push”headerValue:pushMessage];
ret = [buiixSDK registerServer:90 retryTimes:0];
如果您想禁用推送,则需要使用取消注册消息来通知Ubiix PBX。
// unRegisterServer并禁用推送消息
NSString * bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSString * pushMessage = [[NSString alloc] initWithFormat:@“device-os = ios; device-uid =%@; allow-call-push = false; allow-message-push = false; app-id =%@”, _textToken.text,bundleIdentifier];
[ubiixSDK clearAddedSipMessageHeaders]; [ubiixSDK addSipMessageHeader:-1 methodName:@“REGISTER”msgType:1 headerName:@“ubiix-push”headerValue:pushMessage]; [ubiixSDK unRegisterServer];
当应用程序收到推送或APP正在运行时,它应该自动注册到服务器:
- (void)doAutoRegister
{
if([_textUsername.text length]> 1 &&
[_textPassword.text length]> 1 && [_textSIPtotal.text length]> 1 && [_textSIPubiix.text length]> 1 && [_textToken.text length]> 1){ [self onLine];
}
9.准备证书文件
您将获得YOUR_CERT.p12 (例如ubiixgo_voip_push.p12)文件。现在导出证书密钥文件
10.休斯顿
休斯敦将允许我们从终端窗口发送推送通知以供测试。
sudo gem install -n / usr / local / bin houston
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中启用推送服务。
沪ICP备18008779号 全球云通信服务商 | 云pbx | 云总机 | 云电话 | ippbx网络电话号码 | 人工智能客服 | 云呼叫中心