关闭

远程推送的问题

标签: 远程推送
945人阅读 评论(0) 收藏 举报
分类:

最近在做推送的时候出现了强制执行推送函数的情况

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 函数是在应用已经启动,在后台或者前台情况下执行。因此问题来了,当用户在应用内使用时,收到远程推送就很可能出现被强制执行通知的事件。

最后测试发现,在执行这个函数之前,如果是从后台进入则会先执行

- (void)applicationWillEnterForeground:(UIApplication *)application,这时只需要在该函数内使用一个BOOL变量就能控制了。因为只要是从后台点通知进入的就需要执行通知的函数,但是直接点击应用进入的就不需要执行通知函数。

此外,在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中也需要处理通知事件,如果应用是被通知触发启动,是不会进入didReceiveRemoteNotification这个函数的,这时候需要在didFinishLaunchingWithOptions中做处理

NSDictionary* userInfo = [launchOptionsvalueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];

    if (userInfo) {

        self.notificationDcit = userInfo;

        ....

        ...

        

           ...

        

    }

userInfo是启动项launchOptions中取出来的远程通知字典,如果是由远程通知启动的应用这个字典是!nil的

强制执行的问题就解决了。


最近做推送的时候还遇上一问题,就是在应用关闭状态,收到远程通知,这时候不点击通知而是从应用的图标启动,会出现上述字典userInfo为nil的情况。也不会执行didReceiveRemoteNotification代理方法,此种情况下,应用是无法拿到手机获得的推送消息的。这时候无法在应用中进行有效的用户提示,可有大神知道怎么解决?很纠结啊!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:101900次
    • 积分:1307
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:144篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论