美文网首页
以极光为例 从ios角度谈自己写服务器需要做什

以极光为例 从ios角度谈自己写服务器需要做什

作者: adalillian | 来源:发表于2020-06-02 11:20 被阅读0次

    以极光为例 从ios角度谈自己写服务器需要做什么:

    开发维护部分:

    1. 需要写服务器,iOS,android,完成服务器和APNs的对接。

    2.如果更换了手机,  需要维护device token

    3.推送部分,jpush是通过web portal网页直接推送,也可以调用jpush的http协议api来完成,可以给开发减少很多的工作量。 

    运营部分:

      4.一次推送,同时向Android, iOS, WinPhone(微软的手机操作系统), 统一APi, 统一推送界面

      5.提供了标签,别名绑定机制,以及提供用户分群方式,简单,直观。  (如果没有这些,就只能给deviceToken发送,如果给用户绑定了别名,就可以给用户按 指定别名做到唯一发送;如果绑定了标签,根据标签,批量下发消息;reg id ,设备的唯一标识,给设备发送消息。)

    应用内推送部分:

    6.除了使用APNs推送, 也提供应用内推送(服务器和 客户端,建立的连接)。应用内推送和 APNs推送的对比:


    极光推送做了一个很好的长连接,来更方便的处理推送,具体如下:

    概念:JPush SDK内部和手机的APP之间有个长连接, 可以做到应用内推送。

    具体使用场景: 在app打开时,与JPush建立连接,直接由JPush下发到手机;否则,其他的情况仍然使用APNs服务器发送,由JPush服务器发送到APNs服务器,再发到手机。

    具体使用: 这个消息直接由JPush下发,如果用户在线立即收到,否则就保存为离线,默认保留一天,保留5条消息。

    JPush提供的接口:networkDidReceiveMessage


    第三方服务的网址: mdsa.51cto.com

    包含一些接口,一些服务器 ,提供api, 通过api获取数据。 免费和收费的。 

    百度搜索极光推送,

    1. 新建立一个xcode项目, 改bundleid和申请的证书的appid一致(或者打开原有项目,保证bundleid和证书一致0),加入http设置在plist,加入支持这个功能的xcode官方的框架,导入极光包;

    2. 双击新建立的证书,导出p12;

    3. 在极光推送官网, 登陆 , 创建应用,填入项目名字,图标,导入生成的证书的p12.


    4.xcode项目里面, 首先在appdelegate里面,在不同的ios版本要求下, 写不同的注册推送功能功能方法;

    5.xcode项目里面, 配置appkey.(这个appkey就是在极光推送网址创建程序生成的appkey)。  channel的意思就是应用程序包是 从什么渠道下载的,一般就填写app store, apsForProduction,这里就是是不是生产发布环境,一般写yes,如果是开发调试环境,就要写false.

    6.xcode项目里面, 把获取的devicetoken上传给极光服务器。

    7.xcode项目里面, 实现接收到远程通知方法的两个方法。做到监听。写这个方法,必须要勾选后台模式。 

    - (void)application:(UIApplication*)application

        didReceiveRemoteNotification:(NSDictionary*)userInfo

              fetchCompletionHandler:

                  (void(^)(UIBackgroundFetchResult))completionHandler;

    8.xcode项目里面,实现一个如果监听通知失败的方法, 方便调试。 


    8.现在到极光推送里面, 要我们自己的服务器给苹果服务器发送通知,我们集成了极光, 在极光的应用配置之后, 到极光的推送里面,

    运行xcode程序。 点击同意接收通知。 

    在极光推送平台,填写推送内容,然后,选择ios开发环境,所有人。 点击立即发送按钮。 


    7.0以上不需要关闭bitCode.

    新版本,不能在plist配置appkey, 需要使用代码配置,代码setupWithOption

    http://mdsa.51cto.com/services/4


    极光推送实际在项目里面的代码:

    1. 注册2. 授权.3.上传devicetoken 4.监听推送 5.勾选后台模式,勾选推送 6. 保证bundleid 一致


    1. 注册2. 授权.

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

    {

        //注册

        // 3.0.0及以后版本注册

        JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

        if(@available(iOS 12.0, *)) {

            entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;

        }else{

            entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;

        }

        [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

    //    [JPUSHService registerLbsGeofenceDelegate:self withLaunchOptions:launchOptions];

        //授权

        //如不需要使用IDFA,advertisingIdentifier 可为nil

        [JPUSHService setupWithOption:launchOptions appKey:@"f32360cefed071cef410196b"

                              channel:@"app store"

                     apsForProduction:false

                advertisingIdentifier:nil];


    3.上传devicetoken

    - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

    {    [JPUSHService registerDeviceToken:deviceToken];

    }


    4.监听推送

    - (void)application:(UIApplication*)application

    didReceiveRemoteNotification:(NSDictionary*)userInfo

    fetchCompletionHandler:(void(^)(UIBackgroundFetchResultresult))completionHandler {

        NSLog(@"接收到远程通知");

        [JPUSHService handleRemoteNotification:userInfo];

        completionHandler(UIBackgroundFetchResultNewData);

    }


    5. 勾选后台模式,勾选推送

    6. 保证bundleid 一致


    过程中出现的问题:

    1. 集成极光推送出现:Undefined symbols for architecture arm64:   "_dns_parse_resource_record", referenced from:?解决办法:

    添加libresolv.tbd库,即可解决问题

    2.还有一个是改到ios10.0就可以了。


    相关文章

      网友评论

          本文标题:以极光为例 从ios角度谈自己写服务器需要做什

          本文链接:https://www.haomeiwen.com/subject/dgyuyqtx.html