zoukankan      html  css  js  c++  java
  • hubilder打包+C#服务端个推服务实现

    关于推送鼓捣了好长时间,这里不再写helloworld了,只讲里面遇到的问题。

    1.关于苹果开发者平台上的注册

    网上很多的教程,只要按照步骤来设置就行了,在 iOS证书(.p12)和描述文件(.mobileprovision)申请 这篇文章里面讲的很清楚,文章中也说明了,如果要使用推送功能,那么在申请AppID的时候要选择“Push Notifications”这个选项。这篇文章说的很详细,总结下来有下面几点内容

    1.申请苹果AppID,一个App里的证书都基于这个AppID
    2.生成证书请求文件,这个文件必须在苹果电脑上生成,文件的后缀是.certSigningRequest,后面要用它来生成证书文件,就是用CertificateSigningRequest.certSigningRequest文件生成ios_development.cer文件
    3.生成开发证书,这里就是要生成ios_development.cer文件,然后再那这个文件在苹果电脑上Kenchain Access中导出.p12证书文件
    4.添加调试设备,这个主要是把测试收集到UUID添加到开发者平台的Devices列表里面,后面生成证书描述文件的时候用到这些设备
    5.申请开发(Development)描述文件,这里要选择前面的AppID,选择添加的设备,最后生成了一个development.mobileprovision文件
    6.生成发布证书,这个主要是为了上架,和步骤3唯一区别是选择的类型不一样,前者是Development下面的IOS App Development,后者是Production下的App Store and Ad Hot,同样要选择步骤1生成的AppID,但是这里不用选择设备,都上架了,还选择设备就不对了。

    需要说明的是这篇文章写的不严谨,在创建appid的时候“在“Explicit App ID”栏下的“Bundle ID”项中输入App ID(使用反向域名格式字符串,如“io.dcloud.HBuilderApp”):”在“申请开发(Development)证书和描述文件”和“申请发布(Distribution)证书和描述文”的时候楼主写到:“点击“Continue”按钮,打开“App ID”选择页面,选择要使用的“App ID”(如之前创建的“io.dcloud.HBuildApp”),点击“Continue”:” io.dcloud.HBuilderApp 和 io.dcloud.HBuildApp明显不一样,他们是一回事,不要受它蛊惑。

    需要说明的是这篇文章只字不提如何生成推送证书,虽然在步骤1生成AppID的时候提示你选择推送功能,但是还需要生成一个推送证书上传到个推平台上,通篇文章都没有提到。

    2.生成推送证书

    上面的问题可以在个推开发者平台上找到答案,苹果 APNs 配置, 这里也讲到了创建苹果App ID,这个和上面第一布生成的那个App ID是一回事,不要重复生成,也说了要选中Push Notifications,在第二个环节里面讲到了要创建APNs Push证书,这个很关键,他和上面生成发布证书类似,它也要用到CertificateSigningRequest.certSigningRequest文件生成ios_push_development.cer这个文件,再用这个文件导出ios_push_development.p12证书文件,最后把这个证书上传到个推应用平台上。如下图:

    注意这篇文章第三个步骤“Provisioning Profile文件的创建”很有蛊惑性,上来就来一句“创建一个 com.igexin.getui.demo AppID,并为此AppID配置 Push Notifications”,不要被它迷惑就是上面的步骤1,剩下的步骤和上面的步骤5:“申请开发(Development)描述文件”没啥区别。总之对一个app来说只要用到AppID,都是同一个。

    3.关于平台配置

    这里没啥说的,在个推平台上配置一个应用之后把个推的appid,appkey,appsecret填到hbuilder的manifest.json文件中即可。

    4.关于clientid

    剩下的时候就是去个推平台下载了一个服务端的Demo,我用的是C#版本的,当你实验第一个例子的时候有pushMessageToApp()这么一个方法,这个是发送给某个app,ClientID,注意一定要打包之后获取这个ClientID,不能在调试状态下获取,也就是不能在hbuilder里面这样,然后用console.log打印出来在hbuilder里面复制。

    一定要打包出来用alert弹出来,然后一个一个的敲出来放在C#demo程序里。如下:

    5.关于发送给特定用户组

    在demo的第一个例子中,手贱把pushMessageToApp()方法体中的

    这一句注释给打开了,结果死活收不到,注意这个是需要首先用push.setClientTag这个方法设置之后才能按照用户tags来发送,如果用户没有这个tags是不会收到推送的。把这一句注释掉就好了。

    6.关于透传消息+apns

    ios系统好像只能使用transmissiontemplate模板+apns推送,所以在构建透传消息模板的时候要加上如下一段:

                //APN高级推送 开始
                APNPayload apnpayload = new APNPayload();
                DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
                alertMsg.Body = "Body";
                alertMsg.ActionLocKey = "ActionLocKey";
                alertMsg.LocKey = "LocKey";
                alertMsg.addLocArg("LocArg");
                alertMsg.LaunchImage = "LaunchImage";
                //iOS8.2支持字段
                alertMsg.Title = "Title";
                alertMsg.TitleLocKey = "TitleLocKey";
                alertMsg.addTitleLocArg("TitleLocArg");
    
                apnpayload.AlertMsg = alertMsg;
                apnpayload.Badge = 10;
                apnpayload.ContentAvailable = 1;
                //apnpayload.Category = "";
                apnpayload.Sound = "test1.wav";
                apnpayload.addCustomMsg("payload", "payload");
                template.setAPNInfo(apnpayload);
                //APN高级推送 结束

    加好之后整个方法长这样子:

            //透传模板动作内容
            public static TransmissionTemplate TransmissionTemplateDemo()
            {
                TransmissionTemplate template = new TransmissionTemplate();
                template.AppId = APPID;
                template.AppKey = APPKEY;
                //应用启动类型,1:强制应用启动 2:等待应用启动
                template.TransmissionType = "1";
                //透传内容  
                template.TransmissionContent = "透传内容";
                //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
                //String begin = "2017-03-13 00:36:10";
                //String end = "2017-03-13 23:46:20";
                //template.setDuration(begin, end);
    
                //APN高级推送 开始
                APNPayload apnpayload = new APNPayload();
                DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
                alertMsg.Body = "Body";
                alertMsg.ActionLocKey = "ActionLocKey";
                alertMsg.LocKey = "LocKey";
                alertMsg.addLocArg("LocArg");
                alertMsg.LaunchImage = "LaunchImage";
                //iOS8.2支持字段
                alertMsg.Title = "Title";
                alertMsg.TitleLocKey = "TitleLocKey";
                alertMsg.addTitleLocArg("TitleLocArg");
    
                apnpayload.AlertMsg = alertMsg;
                apnpayload.Badge = 10;
                apnpayload.ContentAvailable = 1;
                //apnpayload.Category = "";
                apnpayload.Sound = "test1.wav";
                apnpayload.addCustomMsg("payload", "payload");
                template.setAPNInfo(apnpayload);
                //APN高级推送 结束
    
                return template;
            }

    这一点在个推平台上有介绍,但是有点隐秘 C# 推送模板,截图如下:

    好了就这么多,各位大神如果看到那里有不对的地方希望指出来。谢谢!

  • 相关阅读:
    光电缆线路安防综合监控网管运维方案
    5G时代 微波通信网络运维管理系统实施方案
    IT运维管理之NETCONF工具
    新基建 破局大规模数据中心智能化监控运维管理
    智慧工厂工业交换机网络运维管理系统
    智慧轨道交通云联网安防运维集成化管理系统应用方案
    智和网管平台SugarNMS万能命令工具 赋能IT智能运维
    智慧城市综合运维安防监控管理系统方案
    SugarNMS可视化智能运维 赋能数据中心安全管控
    下载时,经常看见ASC、MD5、SHA1等,是干什么的呢?
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/6545331.html
Copyright © 2011-2022 走看看