php 个推 ios样式问题,[iOS]个推集成中的注意点

先弄清几个概念

两个通道:

1、 APNS通道

2、透传通道(iOS只能用透传通道)

两种状态

1、离线状态

应用在杀死的情况为离线状态

2、在线状态

(1)、应用在后台

(2)、应用运行状态

离线状态APNS通道,在线状态走透传通道

f988bf8d1ebc

个推流程图.png

如何处理推送消息

同一在下面方法处理

/** SDK收到透传消息回调 */

- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {

// [ GTSdk ]:汇报个推自定义事件(反馈透传消息)

[GeTuiSdk sendFeedbackMessage:90001 andTaskId:taskId andMsgId:msgId];

//离线状态payloadData数据是通过APNS通道传过来

if(offLine){

[self SdkDidReceivepushData:payloadData];

return;

}

//否则在线状态payloadData数据是通过透传通道传过来,要通过自定义alertview作为提示框

_payloadData = payloadData;

//初始化AlertView

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"你有一条消息"

message:@"你要阅读消息?"

delegate:self

cancelButtonTitle:@"取消"

otherButtonTitles:@"确定",nil];

alert.delegate = self;

//显示AlertView

[alert show];

[self SdkDidReceivepushData:payloadData];

}

如何计算消息的未读数

原理:个推和极光一样有提供一个接口,应用的未读数量通过接口返回服务端,当再次接受推送消息时,服务端会返回之前提交的未读消息数,我们只需要在此基础上进行累加1,阅读完一条消息后我们需在此基础上减1并返回服务端

//有消息推送进来+1

[UIApplication sharedApplication].applicationIconBadgeNumber += 1;

//及时提交给服务端未读消息数

[self setBadgeGeTuiSdk:[UIApplication sharedApplication].applicationIconBadgeNumber]

//同理阅读完一条消息后-1,同时把未读消息数上传到个推服务端

[UIApplication sharedApplication].applicationIconBadgeNumber -= 1;

[GeTuiSdk setBadge:[UIApplication sharedApplication].applicationIconBadgeNumber];

//接口方法

// 同步本地角标值到服务器

-(void)setBadgeGeTuiSdk:(NSInteger)badge{

[GeTuiSdk setBadge:badge];

}

注意:如果是走APNS通道,点击通知栏要想未读消息数减1在以下方法处理

#pragma mark-点击通知栏触发的方法

- (void)applicationDidBecomeActive:(UIApplication *)application {

//逻辑处理

}

如何在应用内实现消息通知的关闭和开启

f988bf8d1ebc

模式选择.png

个推也提供了一个接口:

//YES为关闭 NO为开启,默认为NO

[GeTuiSdk setPushModeForOff:YES];

我用通知方法来进行对模式的切换

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

YTKNetworkConfig *config = [YTKNetworkConfig sharedConfig];

config.baseUrl = @"xxxxx";

//创建窗口

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

//设置跟控制器

ARCHIELoginViewController *logTabVC = [[ARCHIELoginViewController alloc]init];

self.window.rootViewController = logTabVC;

//创建跟控制器

[self.window makeKeyAndVisible];

//加载info.plist文件

[self checkLastVersions];

// [ GTSdk ]:是否允许APP后台运行

[GeTuiSdk runBackgroundEnable:YES];

// [ GTSdk ]:是否运行电子围栏Lbs功能和是否SDK主动请求用户定位

[GeTuiSdk lbsLocationEnable:YES andUserVerify:YES];

// [ GTSdk ]:自定义渠道

[GeTuiSdk setChannelId:@"GT-Channel"];

// [ GTSdk ]:使用APPID/APPKEY/APPSECRENT启动个推

[GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];

// 注册APNs - custom method - 开发者自定义的方法

[self registerRemoteNotification];

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserver:self selector:@selector(GestureSettingStuasClick:) name:@"GestureSettingStuasNotificationToSend" object:nil];

return YES;

}

- (void)dealloc

{

// 移除通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

-(void)GestureSettingStuasClick:(NSNotification *)notification{

NSString *selectStatus = notification.userInfo[@"GestureSettingStuas"];

if ([selectStatus isEqual:@"close"]) {

[GeTuiSdk setPushModeForOff:YES];

}else{

[GeTuiSdk setPushModeForOff:NO];

}

}

还有服务端的APNS通道的代码和透传通道的参数是分开赋值的,若APNS无反应可能后台没弄

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值