[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/youngcloud/Coding-iOS/master/Coding_iOS/AppDelegate.m [Back]  [Original]

//
//  AppDelegate.m
//  Coding_iOS
//
//  Created by   on 14-7-29.
//  Copyright (c) 2014 Coding. All rights reserved.
//


#define UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define _IPHONE80_ 80000

#if DEBUG
#import 
#import "RRFPSBar.h"
#endif

#import "AppDelegate.h"
#import "RootTabViewController.h"
#import "LoginViewController.h"
#import "AFNetworking.h"
#import "AFNetworkActivityIndicatorManager.h"
#import "Login.h"
#import "UnReadManager.h"
#import "XGPush.h"
#import "EaseStartView.h"
#import "BaseNavigationController.h"
#import "PasswordViewController.h"
#import "IntroductionViewController.h"
#import "TweetSendViewController.h"

#import "FunctionIntroManager.h"
#import 
#import 
#import 
#import 
#import "UMSocialSinaSSOHandler.h"
#import 

#import "Tweet.h"
#import "sys/utsname.h"

@implementation AppDelegate

@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;

#pragma mark XGPush
- (void)registerPush{
    float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];
    if(sysVer < 8){
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
    }else{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
        UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
        UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert
                                                                                     categories:[NSSet setWithObject:categorys]];
        [[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
#endif
    }
}

#pragma mark UserAgent
- (void)registerUserAgent{
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    NSString *userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleIdentifierKey], (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(__bridge NSString *)kCFBundleVersionKey], deviceString, [[UIDevice currentDevice] systemVersion], ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [[UIScreen mainScreen] scale] : 1.0f)];
    NSDictionary *dictionary = @{@"UserAgent" : userAgent};//User-Agent
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
}


#pragma lifeCycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    //
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    
    //sd
    [[[SDWebImageManager sharedManager] imageDownloader] setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
    
    //
    [self customizeInterface];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
    
    //UIWebView  User-Agent
    [self registerUserAgent];

    if ([Login isLogin]) {
        [self setupTabViewController];
    }else{
        [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
        [self setupIntroductionViewController];
    }
    [self.window makeKeyAndVisible];
    [FunctionIntroManager showIntroPage];

    EaseStartView *startView = [EaseStartView startView];
    @weakify(self);
    [startView startAnimationWithCompletionBlock:^(EaseStartView *easeStartView) {
        @strongify(self);
        [self completionStartAnimationWithOptions:launchOptions];
    }];
    
#if DEBUG
//    [[RRFPSBar sharedInstance] setShowsAverage:YES];
//    [[RRFPSBar sharedInstance] setHidden:NO];
#endif
    
    return YES;
}

- (void)completionStartAnimationWithOptions:(NSDictionary *)launchOptions{
    if ([Login isLogin]) {
        NSDictionary *remoteNotification = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (remoteNotification) {
            [BaseViewController handleNotificationInfo:remoteNotification applicationState:UIApplicationStateInactive];
        }
    }
    
    //    UMENG 
    [MobClick startWithAppkey:kUmeng_AppKey reportPolicy:BATCH channelId:nil];
    //    Google Analytics
    [self registerGA];
    
    //    UMENG Social Account
    [UMSocialData setAppKey:kUmeng_AppKey];
    [UMSocialWechatHandler setWXAppId:kSocial_WX_ID appSecret:kSocial_WX_Secret url:[NSObject baseURLStr]];
    [UMSocialQQHandler setQQWithAppId:kSocial_QQ_ID appKey:kSocial_QQ_Secret url:[NSObject baseURLStr]];
    [ENSession setSharedSessionConsumerKey:kSocial_EN_Key consumerSecret:kSocial_EN_Secret optionalHost:nil];
    [UMSocialSinaSSOHandler openNewSinaSSOWithRedirectURL:kSocial_Sina_RedirectURL];

    //    UMENG Social Config
    [UMSocialConfig setFollowWeiboUids:@{UMShareToSina : kSocial_Sina_OfficailAccount}];//
    [UMSocialConfig setFinishToastIsHidden:YES position:UMSocialiToastPositionCenter];
    [UMSocialConfig setNavigationBarConfig:^(UINavigationBar *bar, UIButton *closeButton, UIButton *backButton, UIButton *postButton, UIButton *refreshButton, UINavigationItem *navigationItem) {
        if (bar) {
            [bar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:[NSObject baseURLStrIsTest]? @"0x3bbd79" : @"0x28303b"]] forBarMetrics:UIBarMetricsDefault];
        }
        if (navigationItem) {
            if ([[navigationItem titleView] isKindOfClass:[UILabel class]]) {
                UILabel *titleL = (UILabel *)[navigationItem titleView];
                titleL.font = [UIFont boldSystemFontOfSize:kNavTitleFontSize];
                titleL.textColor = [UIColor whiteColor];
            }
        }
    }];
    
    //    
    [XGPush startApp:kXGPush_Id appKey:kXGPush_Key];
    [Login setXGAccountWithCurUser];
    //
    @weakify(self);
    void (^successCallback)(void) = ^(void){
        //
        if(![XGPush isUnRegisterStatus] && [Login isLogin]){
            @strongify(self);
            [self registerPush];
        }
    };
    [XGPush initForReregister:successCallback];
    
    //[XGPush registerPush];  //Push
    
    //(app)
    [XGPush handleLaunching:launchOptions];
}

- (void)registerGA{
    // Configure tracker from GoogleService-Info.plist.
    NSError *configureError;
    [[GGLContext sharedInstance] configureWithError:&configureError];
    NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
    
    // Optional: configure GAI options.
    GAI *gai = [GAI sharedInstance];
    gai.trackUncaughtExceptions = YES;  // report uncaught exceptions
    gai.logger.logLevel = kGAILogLevelError;  // remove before app release
}

- (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.
    [[ImageSizeManager shareManager] save];
    [[Tweet tweetForSend] saveSendData];
}

- (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.
}

- (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.
    if ([Login isLogin]) {
        [[UnReadManager shareManager] updateUnRead];
        UIViewController *presentingVC = [BaseViewController presentingVC];
        SEL selector = NSSelectorFromString(@"refresh");
        if ([presentingVC isKindOfClass:NSClassFromString(@"Message_RootViewController")]
            && [presentingVC respondsToSelector:selector]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [presentingVC performSelector:selector];
#pragma clang diagnostic pop
        }
    }
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Saves changes in the application's managed object context before the application terminates.
    [self saveContext];
}
#pragma mark - XGPush Message
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSString * deviceTokenStr = [XGPush registerDevice:deviceToken];
    DebugLog(@"deviceTokenStr : %@", deviceTokenStr);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    DebugLog(@"didReceiveRemoteNotification-userInfo:-----\n%@", userInfo);
    [XGPush handleReceiveNotification:userInfo];
    [BaseViewController handleNotificationInfo:userInfo applicationState:[application applicationState]];
}

#pragma mark - Methods Private
- (void)setupLoginViewController{
    LoginViewController *loginVC = [[LoginViewController alloc] init];
    [self.window setRootViewController:[[BaseNavigationController alloc] initWithRootViewController:loginVC]];
}

- (void)setupIntroductionViewController{
    IntroductionViewController *introductionVC = [[IntroductionViewController alloc] init];
//    [self.window setRootViewController:[[BaseNavigationController alloc] initWithRootViewController:introductionVC]];
    [self.window setRootViewController:introductionVC];
}

- (void)setupTabViewController{
    RootTabViewController *rootVC = [[RootTabViewController alloc] init];
    rootVC.tabBar.translucent = YES;
    
    [self.window setRootViewController:rootVC];
}

- (void)customizeInterface {
    //Navtitle
    
    UINavigationBar *navigationBarAppearance = [UINavigationBar appearance];
    [navigationBarAppearance setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithHexString:[NSObject baseURLStrIsTest]? @"0x3bbd79" : @"0x28303b"]] forBarMetrics:UIBarMetricsDefault];
    [navigationBarAppearance setTintColor:[UIColor whiteColor]];//
    NSDictionary *textAttributes = @{
                                     NSFontAttributeName: [UIFont boldSystemFontOfSize:kNavTitleFontSize],
                                     NSForegroundColorAttributeName: [UIColor whiteColor],
                                     };
    [navigationBarAppearance setTitleTextAttributes:textAttributes];
    
    [[UITextField appearance] setTintColor:[UIColor colorWithHexString:@"0x3bbc79"]];//UITextField
    [[UITextView appearance] setTintColor:[UIColor colorWithHexString:@"0x3bbc79"]];//UITextView
    [[UISearchBar appearance] setBackgroundImage:[UIImage imageWithColor:kColorTableSectionBg] forBarPosition:0 barMetrics:UIBarMetricsDefault];
}

#pragma mark URL Schemes
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    DebugLog(@"path: %@, params: %@", [url path], [url queryParams]);
    if ([url.absoluteString hasPrefix:kCodingAppScheme]) {
        NSDictionary *queryParams = [url queryParams];
        if (queryParams[@"email"] && queryParams[@"key"]) {//
            [self showPasswordWithURL:url];
        }else if ([queryParams[@"type"] isEqualToString:@"tweet"]){//
            if ([Login isLogin]) {
                [TweetSendViewController presentWithParams:queryParams];
            }else{
                [NSObject showHudTipStr:@""];
            }
        }else{//
            [BaseViewController presentLinkStr:url.absoluteString];
        }
        return YES;
    }else if ([url.absoluteString hasPrefix:@"en-:"]){
        return [[ENSession sharedSession] handleOpenURL:url];
    }else{
        return  [UMSocialSnsService handleOpenURL:url];
    }
}

- (BOOL)showPasswordWithURL:(NSURL *)url{
    PasswordType type;
    NSString *email, *key;
    
    if ([[url lastPathComponent] isEqualToString:@"resetPassword"]) {
        type = PasswordReset;
    }else if ([[url lastPathComponent] isEqualToString:@"activate"]){
        type = PasswordActivate;
    }else{
        return NO;
    }
    email = [[url queryParams] objectForKey:@"email"];
    key = [[url queryParams] objectForKey:@"key"];
    if (email.length 

Web Proxy Viewer  |  New URL  |  Original Page