美文网首页第三方集成
iOS友盟推送跳转指定页面详细篇

iOS友盟推送跳转指定页面详细篇

作者: dyg_zql_2006 | 来源:发表于2017-05-13 22:50 被阅读773次

    这篇友盟的想写了很久了,实属友盟文档写的有点难懂。最近看群里好多人用了友盟,有不同的问题存在。今天,我将我集成UPush的过程,以及遇到的一些小问题写一下。

    首先,(集成之前, 请在push.umeng.com/申请开通【友盟+】消息推送服务)下载SDK,我是手动添加的,传送门:SDK下载(如果需要插屏等功能需要下载U-Push iOS v1.5.0a,注意无IDFA版本)

    1.导入SDK,引入库文件增加UserNotifications.framework到项目中。具体操作如下:点击项目---->TARGET---->Build Phases---->Link Binary with Libraries---->左侧+号---->搜索UserNotifications---->选中UserNotifications.framework---->点击Add。 

    点击项目---->TARGET---->Capabilities,将这里的Push Notification的开关打开(有些可能遇到Code=3000 "未找到应用程序的“aps-environment”的授权字符串,这时候要检查App ID是否开启了推送服务,并保证推送证书有效,检查PP(配置)文件)

    2.开始集成,会有部分代码

    打开AppDelegate.m  引入头文件 引入UMessage.h,UserNotifications.h 设置代理

    设置UNUserNotificationCenterDelegate  如果需要适配HTTPs加上一句代码 [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions httpsenable:YES ];

    didFinishLaunchingWithOptions 中初始化

    [UMessage startWithAppkey:@"your appkey"launchOptions:launchOptions];

    [UMessage registerForRemoteNotifications];

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

    center.delegate=self;、UNAuthorizationOptions types10=UNAuthorizationOptionBadge|  UNAuthorizationOptionAlert|UNAuthorizationOptionSound;

    [center requestAuthorizationWithOptions:types10    completionHandler:^(BOOLgranted,NSError* _Nullable error) {if(granted)

     {//点击允许//这里可以添加一些自己的逻辑

    }else{//点击不允许//这里可以添加一些自己的逻辑}

    }];

    //打开日志,方便调试。[UMessage setLogEnabled:YES];

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

    {

    //注册deviceToken,现在不用手动注册,但测试模式下要将deviceToken添加到Umeng后台的测试设备中 [UMessage registerDeviceToken:deviceToken];

    }

    接受通知。 //关闭U-Push自带的弹出框[UMessage setAutoAlert:NO];

    [UMessage didReceiveRemoteNotification:userInfo]; //统计点击次数

    //iOS10以下使用这个方法接收通知- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

    {[UMessage didReceiveRemoteNotification:userInfo];}

    //iOS10新增:处理后台点击通知的代理方法-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{

    NSDictionary* userInfo = response.notification.request.content.userInfo;

    if([response.notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]]) {

    //应用处于后台时的远程推送接受//必须加这句代码

    [UMessage didReceiveRemoteNotification:userInfo];

    }else{

    //应用处于后台时的本地推送接受}

    }

    //iOS10新增:处理前台收到通知的代理方法-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void(^)(UNNotificationPresentationOptions))completionHandler{

    NSDictionary* userInfo = notification.request.content.userInfo;

    if([notification.request.triggerisKindOfClass:[UNPushNotificationTrigger class]]) 

    {//应用处于前台时的远程推送接受//关闭U-Push自带的弹出框[UMessage setAutoAlert:NO];//必须加这句代码[UMessage didReceiveRemoteNotification:userInfo];

    }else{//应用处于前台时的本地推送接受}//当应用处于前台时提示设置,需要哪个可以设置哪一个completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);//声音角标提示}

    如果需要调转指定页面 往下看

    写到这里可以进行测试了。如果测试没有问题,来继续写一下,如果App处于被杀死状态,点击通知,跳转到指定页面,因为我们做的是跳转到webview所以我根据是否含有url来判断,如果是要跳到不同的指定页面,需要对参数进行判断

    didFinishLaunchingWithOptions  这个方法,Apple的官方文档//Tells the delegate when the application has launched and may have additional launch options to handle. 可能有额外的启动选项来处理。

    在这里我们来看一下推送的userinfo

    // 如果 launchOptions 不为空,我采用的是将推送中需要跳转的url存入沙盒内。

    if (launchOptions) {

    // 获取推送通知定义的userinfo

    NSDictionary *userInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];

    NSUserDefaults *DYG = [NSUserDefaults standardUserDefaults];

    [DYG setObject:userInfo[@"url"] forKey:@"dygPushUrl1"];

    [DYG synchronize];

    }

    在程序进入后如果沙盒内存在这个url,那么跳转到加载web页面。也可以将这个web页面设置成rootviewcontroller,应该好多种方法吧。

    当程序处于运行状态,接受到通知,这里运行包括前后台

    - (void)handlerTuisong:(NSDictionary *)userInfo{

    UINavigationController *contoller = nil;

    if (![[userInfo allKeys] containsObject:@"url"]) {

    NSLog(@"没有推送要求");

    }else{

    if (self.tabBarViewController) {

    contoller = (UINavigationController *)self.tabBarViewController.selectedViewController;

    } else {

    UIViewController * DygVC = self.window.rootViewController;

    if ([DygVC isKindOfClass:[UINavigationController class]]) {

    UINavigationController * DygNav = (UINavigationController *)self.window.rootViewController;

    contoller = DygNav;

    }

    }

    DygWkWebView *DygWebView = [[DygWkWebView alloc]init];

    DygWebView.url = userInfo[@"url"];

    DygWebView.hidesBottomBarWhenPushed = YES;

    [contoller pushViewController:DygWebView animated:YES];

    }

    }

    好了,完工!

    再加入一个小小的插屏功能,有广告效果,又可以在更好的位置让用户看到,既显示出你的细心,又让产品 (汪!)乐呵呵~

    注意使用的SDK版本要是带.a的,我第一次搞,选错了版本,找不到文档上的方法,给Umeng发邮件臭骂了一顿结果是我自己的SDK版本不对(我又发了致歉邮件,错了就改改了再犯千锤百炼嘛~)。

    [UMessage addCardMessageWithLable:@"这里写标识"]; 记得要在指定页面写好标识符,可以用汉字,但是不要乱写,只有10个位置!

    暂时功能是做了这些,如果有什么疑问,可以加QQ交流。745377439 问题答案:不是。QQ群:139852091  

    相关文章

      网友评论

        本文标题:iOS友盟推送跳转指定页面详细篇

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