AppDelegate.m 8.46 KB
Newer Older
曹云霄's avatar
曹云霄 committed
1 2 3 4 5 6 7 8 9 10
//
//  AppDelegate.m
//  Lighting
//
//  Created by 曹云霄 on 16/4/27.
//  Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//

#import "AppDelegate.h"
#import "LoginViewController.h"
11
#import "DeviceDirectionManager.h"
曹云霄's avatar
曹云霄 committed
12
#import "ToolHelper.h"
13 14

@interface AppDelegate ()<JPUSHRegisterDelegate>
曹云霄's avatar
曹云霄 committed
15 16 17 18 19 20 21 22

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
23

24
    [ToolHelper startLoad];
25
    [self detectionNetwork];
曹云霄's avatar
曹云霄 committed
26
    [self rootViewcontroller];
27
    [self setUpJPush:launchOptions];
曹云霄's avatar
曹云霄 committed
28 29
    return YES;
}
30

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#pragma mark -设置JPush
- (void)setUpJPush:(NSDictionary *)launchOptions
{
    //Required
    //notice: 3.0.0及以后版本注册可以这样写,也可以继续用之前的注册方式
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
    
    // Required
    // init Push
    // notice: 2.1.5版本的SDK新增的注册方法,改成可上报IDFA,如果没有使用IDFA直接传nil
    // 如需继续使用pushConfig.plist文件声明appKey等配置内容,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化。
    [JPUSHService setupWithOption:launchOptions appKey:@"a0f87c1c349d496ff85c3974"
                          channel:@"蒲公英"
46
                 apsForProduction:YES
47 48 49
            advertisingIdentifier:nil];
}

曹云霄's avatar
曹云霄 committed
50
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window
51 52 53 54
{
    //判断是否是横屏
    if ( [[DeviceDirectionManager instance] isHorizontal]) {
        return UIInterfaceOrientationMaskAll ;
曹云霄's avatar
曹云霄 committed
55
    } else{
56 57 58
       return UIInterfaceOrientationMaskLandscape;
    }
}
59

60
#pragma mark -分享回调
61 62
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
63 64 65 66
    //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
    if (!result) {
        // 其他如支付等SDK的回调
67 68 69
    }
    return result;
}
曹云霄's avatar
曹云霄 committed
70
#pragma mark -设置根视图
曹云霄's avatar
曹云霄 committed
71
- (void)rootViewcontroller
曹云霄's avatar
曹云霄 committed
72
{
曹云霄's avatar
曹云霄 committed
73
    LoginViewController *login = [[BaseViewController getMainStoryboardClass] instantiateViewControllerWithIdentifier:@"Login"];
曹云霄's avatar
曹云霄 committed
74 75 76
    self.window.rootViewController = login;
}

77

78 79 80 81
#pragma mark -接收到内存警告
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    [[SDImageCache sharedImageCache] clearDisk];
82
    [[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];
83 84
}

曹云霄's avatar
曹云霄 committed
85

曹云霄's avatar
曹云霄 committed
86

曹云霄's avatar
曹云霄 committed
87 88 89 90

#pragma mark -检测网络的可连接性
- (void)detectionNetwork
{
曹云霄's avatar
曹云霄 committed
91
    self.Networkstatus = true;
曹云霄's avatar
曹云霄 committed
92 93
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
曹云霄's avatar
曹云霄 committed
94
        
曹云霄's avatar
曹云霄 committed
95
        switch (status) {
曹云霄's avatar
曹云霄 committed
96
                
曹云霄's avatar
曹云霄 committed
97 98 99 100
            case AFNetworkReachabilityStatusUnknown:
            case AFNetworkReachabilityStatusNotReachable:{
                
                NSLog(@"无网络");
曹云霄's avatar
曹云霄 committed
101
                self.Networkstatus = false;
曹云霄's avatar
曹云霄 committed
102 103 104 105 106
                break;
            }
            case AFNetworkReachabilityStatusReachableViaWiFi:{
                
                NSLog(@"WiFi网络");
曹云霄's avatar
曹云霄 committed
107
                self.Networkstatus = true;
曹云霄's avatar
曹云霄 committed
108 109 110 111 112 113
                break;
                
            }
            case AFNetworkReachabilityStatusReachableViaWWAN:{
                
                NSLog(@"流量网络");
曹云霄's avatar
曹云霄 committed
114
                self.Networkstatus = true;
曹云霄's avatar
曹云霄 committed
115 116 117 118 119 120 121 122
                break;
            }
            default:
                break;
        }
    }];
}

曹云霄's avatar
曹云霄 committed
123

124 125 126 127 128


#pragma mark -更新通知
- (void)updateVersion
{
129
    [Notification postNotificationName:UPLOADVERSION object:nil];
130 131
}

132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
#pragma mark- JPUSHRegisterDelegate
#pragma mark -接收到通知回调
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
    // Required
    NSDictionary * userInfo = notification.request.content.userInfo;
    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
    completionHandler(UNNotificationPresentationOptionAlert);
}

#pragma mark -点击通知回调
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    NSDictionary * userInfo = response.notification.request.content.userInfo;
    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
149 150
    [UserDefault setObject:userInfo forKey:NSNOTIFICATION_MESSAGE];
    [Notification postNotificationName:NSNOTIFICATION_MESSAGE object:userInfo];
151 152 153 154 155 156 157 158 159 160 161 162 163
    completionHandler();
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
}

#pragma mark -注册 DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    
    [JPUSHService registerDeviceToken:deviceToken];
164
    [Notification addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidLoginNotification object:nil];
165 166 167 168 169 170
}

#pragma mark -注册 DeviceToken失败
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    //Optional
    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
171
    [XBLoadingView showHUDViewWithText:@"注册JPush失败"];
172 173
}

174 175 176 177 178 179 180 181 182 183
#pragma mark -登陆成功回调
- (void)networkDidReceiveMessage:(NSNotification *)notification {
    [Notification removeObserver:self name:kJPFNetworkDidLoginNotification object:nil];
    [self setUpJPushAlias];
}

#pragma mark -设置极光推送别名
- (void)setUpJPushAlias
{
    //极光推送别名
184
    [JPUSHService setTags:nil alias:[Shoppersmanager manager].shoppers.employee.fid fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
185 186 187
        NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, iTags , iAlias);
    }];
}
188

189

曹云霄's avatar
曹云霄 committed
190 191 192 193 194 195 196 197 198 199 200 201
- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
曹云霄's avatar
曹云霄 committed
202
    [self updateVersion];
曹云霄's avatar
曹云霄 committed
203 204 205 206 207 208 209 210 211 212 213 214 215 216
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.
}



@end