iOS 启动程序的4种途径,以及友盟推送在前台不进行推送,以及当前程序的状态

怎样判断iOS App是通过哪种途径启动的?

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

说明:当应用程序启动时执行,应用程序启动入口。只在应用程序启动时执行一次。application参数用来获取应用程序的状态、变量等,值得注意的是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动的原因。

1.若用户直接启动,lauchOptions内无数据;2.若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString);

3.若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);

4.若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);

其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,UIApplicationLaunchOptionsNewsstandDownloadsKey。 如果要在启动时,做出一些区分,那就需要在下面的代码做处理。 比如:应用可以被某个其它应用调起(作为该应用的子应用),要实现单点登录,那就需要在启动代码的地方做出合理的验证,并跳过登录。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSURL *url = [options objectForKey:UIApplicationLaunchOptionsURLKey]; if(url) { } NSString *bundleId = [options objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];if(bundleId) { } UILocalNotification * localNotify = [options objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];if(localNotify) { } NSDictionary * userInfo = [options objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];if(userInfo) { } }

根据当前程序的状态,判断当前程序是否进行推送(前台不推送,后台推送)

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

[UMessage didReceiveRemoteNotification:userInfo];

//定制自定的的弹出框

if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)    {//程序处于激活状态,不允许推送

[UMessage setAutoAlert:NO];//关闭提示框

}else{ //允许推送

[UMessage didReceiveRemoteNotification:userInfo];

//发送通知

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

//发送远程通知

[center postNotificationName:@"CYREMOTENOTICATION" object:nil userInfo:userInfo];

}

}

				
时间: 2024-08-02 16:24:30

iOS 启动程序的4种途径,以及友盟推送在前台不进行推送,以及当前程序的状态的相关文章

怎样判断iOS App是通过哪种途径启动的?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions说明:当应用程序启动时执行,应用程序启动入口.只在应用程序启动时执行一次.application参数用来获取应用程序的状态.变量等,值得注意的是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动的原因.1.若用户直接启动,lauchOptions

IOS百度地图使用基础指南+原生分享&友盟分享

1.地图 1.获取用户的经纬度(CLLocationManager) 创建属性:CLLocationManager *mgr; 遵守协议:<CLLocationManagerDelegate> a>创建定位管理器 self.mgr = [[CLLocationManager alloc] init]; b>设置代理 self.mgr.delegate = self; c>开始定位 [self.mgr startUpdatingLocation]; 代理方法: -(void)l

iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示

用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode 为NO file:///Users/libtop/Desktop/屏幕快照%202016-04-14%2011.17.15.png ld: ‘/Users/**/Framework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)’does

iOS开发——iOS10升级极光推送SDK、友盟分享SDK

前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分享SDK和升级过程中的遇到的报错 一. 升级极光推送SDK,有一篇不错的博客,代码变更也写的挺详细就不在多写, 遇到的编译报错见第三部分 http://blog.csdn.net/cloud_pro/article/details/52574637 二. 升级友盟分享SDK到目前最新版5.2.1(升

iOS开发——程序员必备&amp;iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明

iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs/80466716.html  多谢作者分享!其中 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统,成为了当前在 Linux 下非常流行的一种安装包.进入 2.x 时代之后有 Cydia 作者 Jay Freeman(sauri

QTP启动应用程序的几种方法

1.用SystemUtil.Run 1 SystemUtil.Run "C:\Program Files (x86)\HP\QuickTest Professional\samples\flight\app\flight3a.exe" 2.用InvokeApplication 1 InvokeApplication "C:\Program Files (x86)\HP\QuickTest Professional\samples\flight\app\flight3a.exe

独辟蹊径之android程序完全退出的一种途径

最近做一个项目时,意外发现了一种可以让android程序完全退出的一种途径,遥想当年为了找到一种有效地途径让android程序完全退出时的窘迫,不由得有些感慨.这里不敢独享,和大家分享一下,也是抛砖引玉,希望有大牛出来继续探讨一下这个问题. 方法很简单,其实就是一层窗户纸,知道了,就明白了.用jni调用linux系统调用exit即可.下面给出具体实现: package com.example.bitmaptest; import android.util.Log; public final cl

嵌入式启动之三:应用程序的三种存储和加载方式

通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三种加载方式是比较容易的.一般意义上,启动是为了引导OS到内存,而应用程序则是操作系统run起来后的用户选择,两者是比较相似的.先根据启动的两种方式来介绍应用程序的加载. 1. 对于资源有限型的嵌入式系统,应用程序在编译.链接之后,会通过二进制工具分析可执行文件的格式,抽出code和data段数据,生成.HEX格式或者.BIN格式,下载到SOC内置的flash中.在上电之后就直接执行了.这种加载方式称为离线加载. 2. 对于资源宽裕型的嵌入式

ios应运程序的五种状态

ios应运程序的五种状态即转化  从apple的官方文档扣下来的 5状态: Not running The app has not been launched or was running but was terminated by the system. Inactive The app is running in the foreground but is currently not receiving events. (It may be executing other code thou