美文网首页
以极光为例 从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