MANUAL & FAQ

文章详情

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

本指南将逐步指导您如何创建基于Ubiix VoIP SDKAndroid应用程序, 以接收Ubiix PBX发送的VoIP推送通知。

 

1. VoIP通知

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

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

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

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

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

 

2.先决条件设置

由于Ubiix PBX使用Google Firebase发送推送通知,因此我们需要配置一些设置才能使其工作。

 

3.在Firebase中创建一个新的应用程序项目

将新项目添加到Firebase控制台
您需要设置项目名称和国家。

选择 Firebase添加到您的Android应用程序 ”。
为您的应用程序设置一个包名称。我只设置了我的软件包名称并省略了SHA-1,因为我没有将Firebase用于我的应用程序的身份验证。

点击此处的“ 注册应用程序按钮以下载google-services.json。这是一个重要的文件,你需要把它放到你的应用程序中。

重要提示:请注意,Android软件包名称也被称为“ 应用程序ID ”。我们将在未来的设置中使用它。

 

4.添加Xamarin Google Play服务基础包

由于Firebase云消息传递取决于Google Play服务,因此必须将Xamarin Google Play服务 - 基本软件包添加到Xamarin.Android项目中。您将需要29.0.0.2或更高版本。

Visual Studio中,右键单击References>管理NuGet程序包... 

单击浏览选项卡并搜索Xamarin.GooglePlayServices.Base。 

将此软件包安装到ubiix.Android.Test项目中 

如果在安装NuGet期间出现错误,请关闭ubiix.Android.Test项目,再次打开它,然后重试NuGet安装。

注意:如果问题仍然存在,并显示错误消息“ 无法安装软件包:”Xamarin.GooglePlayServices.Base xx.xxxx.x “。您正尝试将此软件包安装到目标项目“MonoAndroid,Version = vx.0”中,而软件包不包含任何与此框架兼容的程序集引用或内容文件。有关更多详细信息,请联系软件包作者。“,请启动Visual Studio安装程序以升级最新版本。升级后,右键单击该项目,单击属性>目标框架以选择最新的平台。之后,重复步骤3。

当您安装Xamarin.GooglePlayServices.Base时,还会安装所有必需的依赖项。编辑MainActivity.cs并添加以下using语句:

使用Android.Gms.Common;

这个语句使GoogleApiAvailability类Xamarin.GooglePlayServices.Base可供ubiix.Android.Test代码。GoogleApiAvailability用于检查是否存在Google Play服务。

 

5.添加Xamarin Firebase消息传递包

要接收来自FCM的消息,必须将Xamarin Firebase - Messaging包添加到应用程序项目中。如果没有这个包,Android应用程序将无法接收来自FCM服务器的消息。

1.在Visual Studio中,右键单击References>管理NuGet程序包...

2.选中Include prerelease并搜索Xamarin.Firebase.Messaging。 

3.将此软件包安装到ubiix.Android.Test项目中: 

当你安装Xamarin.Firebase.Messaging时,所有必需的依赖关系也被安装。
接下来,编辑MainActivity.cs并添加以下using语句:

使用Firebase.Messaging; 
使用Firebase.Iid; 
使用Android.Util;

前两个语句使Xamarin.Firebase.Messaging NuGet包中的类型可用于ubiix.Android.Test代码。Android.Util添加了记录功能,用于观察与FMS的交易。

 

6.添加Google服务JSON文件

下一步是将google-services.json文件添加到项目的根目录中: 

google-services.json复制到项目文件夹。

google-services.json添加到应用程序项目中(在解决方案资源管理器中单击显示所有文件,右键单击google-services.json,然后选择包含在项目中)。 

Solution Explorer窗口中选择google-services.json

Properties窗格中,将Build Action设置为GoogleServicesJson(如果未显示GoogleServicesJson构建操作,请保存并关闭解决方案,然后重新打开它):

当将google-services.json添加到项目中(并设置了GoogleServicesJson构建操作)时,构建过程将提取客户端ID和API密钥,然后将这些凭据添加到驻留在obj / Debug中的合并/生成的AndroidManifest.xml/android/AndroidManifest.xml。此合并过程会自动添加连接到FCM服务器所需的任何权限和其他FCM元素。

 

7.检查Google Play服务

Google建议Android应用在使用Google Play服务功能前检查是否存在Google Play服务APK(有关更多信息,请参阅检查Google Play服务)。在以下示例中,OnCreate方法将在应用程序尝试使用FCM服务之前验证Google Play服务是否可用。将以下方法添加到MainActivity类中:

public bool IsPlayServicesAvailable()
int resultCode = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this);

if(resultCode!= ConnectionResult.Success)
if(GoogleApiAvailability.Instance.IsUserResolvableError 
resultCode)){ 
Console.WriteLine(GoogleApiAvailability.Instance.GetErrorString(resultCode)); 
其他
Console.WriteLine(“这个设备不支持”); 
完()
返回false; 
其他
Console.WriteLine(“Google Play服务可用”); 
返回true; 
}

此代码会检查设备以查看Google Play Services APK是否已安装。如果未安装,则会在文本框中显示一条消息,指示用户从Google Play商店下载APK(或者在设备的系统设置中启用它)。

我们还需要使用  IsPlayServicesAvailable()来检测FCM在OnCreate 方法中是否可用  。

 

8.添加实例ID接收器

下一步是添加一个扩展FirebaseInstanceIdService的服务来处理Firebase注册令牌的创建,轮换和更新。(有关注册令牌的更多信息,请参阅使用FCM注册。)FCM需要FirebaseInstanceIdService服务才能将消息发送到设备。当FirebaseInstanceIdService服务添加到客户端应用程序时,应用程序会自动接收FCM消息,并在应用程序停止后显示为通知。

Android清单中声明Receiver

编辑AndroidManifest.xml并将以下元素插入部分:

XML执行以下操作:

声明一个为每个应用程序实例提供唯一标识符FirebaseInstanceIdReceiver实现。该接收器还可以对动作进行认证和授权。

声明用于安全启动服务的内部FirebaseInstanceIdInternalReceiver实现。

FirebaseInstanceIdReceiverWakefulBroadcastReceiver接收FirebaseInstanceIdFirebaseMessaging事件,并将其传送到您从派生类FirebaseInstanceIdService

 

9.将服务添加到应用程序

应添加两项服务以使用Firebase云消息传递服务:测试推送通知是否有效的基本代码,以及根据您的设计处理在应用中接收消息或发送消息的其他代码。

1)添加一个扩展FirebaseMessageService的服务

为了能够收到您的应用程序的任何通知,你应该增加延伸服务FirebaseMessag é 服务如下:

使用Android.App;

使用Android.Content;

使用Android.Util;

使用Firebase.Messaging;

名称空间ubiix.AndroidSample.Test

{
[服务]

[IntentFilter(new [] {“com.google.firebase.MESSAGING_EVENT”})]

公共类MyFirebaseMessageService:FirebaseMessagingService

{

const string TAG =“MyFirebaseMsgService”;

public override void OnMessageReceived(RemoteMessage message)

{

Log.Debug(TAG,“From:”+ message.From);

sendNotification时(message.GetNotification()身上。);

}

void SendNotification(string messageBody)

{

var intent = new Intent(this,typeof(MainActivity));

intent.AddFlags(ActivityFlags.ClearTop);

var pendingIntent = PendingIntent.GetActivity(this,0,intent,PendingIntentFlags.OneShot);

var notificationBuilder = new Notification.Builder(this)

.SetSmallIcon(Resource.Drawable.Icon)

.SetContentTitle(“FCM消息”)

.SetContentText(消息体)

.SetAutoCancel(真)

.SetContentIntent(的PendingIntent);

var notificationManager = NotificationManager.FromContext(this);

notificationManager.Notify(0,notificationBuilder.Build());

}

}

}
2)添加一个扩展FirebaseInstanceIdService的服务

使用Android.App;

使用Firebase.Iid;

使用Android.Util;

使用Android.Content;

名称空间ubiix.AndroidSample.Test

{

[服务]

[IntentFilter(new [] {“com.google.firebase.INSTANCE_ID_EVENT”})]

公共类MyFirebaseIIDService:FirebaseInstanceIdService

{

const string TAG =“MyFirebaseIIDService”;

public override void OnTokenRefresh()

{

var refreshedToken = FirebaseInstanceId.Instance.Token;

Log.Debug(TAG,“刷新标记:”+ refreshedToken);

SendRegistrationToServer(refreshedToken);

}

void SendRegistrationToServer(string token)

{

 //根据需要添加自定义实现。

}

}

}


10.测试并发送您的第一个推送通知

要查看设置是否有效,请通过向您自己的移动设备发送测试消息来运行测试。

Firebase控制台中,记下您的消息并选择一个应用。点击“ 发送消息 ”。

现在,您应该在Android手机上收到推送通知。如果您的应用程序在后台运行,您将在移动设备的通知中心获得该应用程序; 否则你可以在你的Android监视器日志中看到它(我们必须输入一个代码来记录传入的消息)。

如果设置成功,您应该在手机上收到通知。有时,邮件发送和到达可能需要几分钟的时间,所以请耐心等待一会儿。

 

11.在应用程序中启用推送

SIP头“ ubiix-push ”添加到REGISTER消息。我们用它来告诉Ubiix PBX这个客户端是否启用了推送

if(FirebaseInstanceId.Instance.Token!= null){

String pushMessage =“device-os = android; device-uid =”+ FirebaseInstanceId.Instance.Token +“; allow-call-push = true; allow-message-push = true; app-id = ubiix.Android.Test” ;

engine.addSipMessageHeader(-1,“REGISTER”,1,“ubiix-push”,pushMessage);

}

var deviceid = DeviceIdUtil.getDeviceId(this);

engine.setInstanceId(设备ID);

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

//通过UNREGISTER消息禁用推送

String pushMessage =“device-os = android; device-uid =”+ FirebaseInstanceId.Instance.Token +“; allow-call-push = true; allow-message-push = true; app-id = ubiix.Android.Test” ;

engine.addSipMessageHeader(-1,“REGISTER”,1,“ubiix-push”,pushMessage);

 

12.可能的问题

编译问题可能与build.gradle文件中的错误版本号有关。

如果您看到诸如“com.google.firebase.crash.FirebaseCrash未链接的消息。跳过初始化“。在您的Android监视器日志中,这没关系,因为我们不使用此Firebase Crash Analytics服务。

Firebase初始化未启动

 

13.获取服务器密钥和发件人ID

1)。在Firebase控制台中,点击“ 设置 ”按钮并选择“ 项目设置 ”菜单。

2)。“设置”标签中,点击“ 云消息传递 ”标签,你会看到“ 服务器密钥 ”和“ 发件人ID ”,请注意。

14. Ubiix PBX

现在登录Ubiix PBX 9.0管理控制台,选择菜单“设置”>“移动推送”。
点击“添加新应用程序”按钮,你会看到下面的屏幕:

请设置以下项目:

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

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

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

Google服务器密钥和Google发件人ID - 密钥和ID在步骤9.2中记录。

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