Giter Club home page Giter Club logo

anachat-ios's Introduction

ANAChat iOS

The Powerful ANAChat allows you to integrate ANA chat bot to your app. Customise the UI according to your App Theme and you are all set. It is that simple!

Getting started

ANAChat can be installed directly into your application via CocoaPods or by directly importing the source code files. Please note that ANAChat has a direct dependency on FCM that must be satisfied in order to build the components.

If you don't have an Xcode project yet, create one now.

CocoaPods Installation

We recommend using CocoaPods to install the libraries. You can install Cocoapods by following the installation Instructions.

  1. Now create a Podfile in the root of your project directory and add the following:

        $ cd your-project directory
        $ pod init
    
  2. Add the pods that you want to install. You can include a Pod in your Podfile like this:

        use_frameworks!
        pod 'ANAChat'
        pod 'Firebase/Messaging'
    
  3. Previous step downloads FCM files to the app and those should be configured with FCM. Please follow all the steps mentioned in below help document except "Add the SDK" section. FCM Documentation

  4. After FCM configuration modify below methods in AppDelegate:

Swift : Import ANAChat modile in your AppDelegate:

        import ANAChat

modify the method implementation of below methods:

        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            ......
            Messaging.messaging().delegate = self
            Messaging.messaging().shouldEstablishDirectChannel = true
            return true
        }
        
        func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
            AppLauncherManager.didReceiveFcmToken(withToken: fcmToken, baseAPIUrl: "#baseUrl", businessId: "businessID")
        }

        func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
            Messaging.messaging().apnsToken = deviceToken as Data
        }

        func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void){
            Messaging.messaging().appDidReceiveMessage(userInfo)
            AppLauncherManager.didReceiveRemoteNotification(userInfo)
            completionHandler(.newData)
        }

        public func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage){
            AppLauncherManager.didReceiveRemoteNotification(remoteMessage.appData)
        }

Objective C:

Import ANAChat modile in your AppDelegate:

        @import ANAChat;

modify the method implementation of below methods:

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
            ......
            [FIRMessaging messaging].delegate = self;
            [FIRMessaging messaging].shouldEstablishDirectChannel = YES;
        }
        
        - (void)messaging:(nonnull FIRMessaging *)messaging didRefreshRegistrationToken:(nonnull NSString *)fcmToken {
            if (fcmToken.length > 0){
                [AppLauncherManager didReceiveFcmTokenWithToken:fcmToken baseAPIUrl:@"#baseUrl" businessId:@"#businessID"];
            }
        }
        
        - (void)messaging:(nonnull FIRMessaging *)messaging didReceiveMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage{
            [AppLauncherManager didReceiveRemoteNotification:remoteMessage.appData];
        }
        
        - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{
            [AppLauncherManager didReceiveRemoteNotification:userInfo];
            [[FIRMessaging messaging] appDidReceiveMessage:userInfo];
        }
        
        - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
            [FIRMessaging messaging].APNSToken = deviceToken;
        }
  1. Add the below permissions to Target info.plist file by opening it as Source Code

         <key>NSMicrophoneUsageDescription</key>
         <string>This app would like to use microphone</string>
         <key>NSAppleMusicUsageDescription</key>
         <string>This app would like to use music</string>
         <key>NSCameraUsageDescription</key>
         <string>This app would like to use camera</string>
         <key>NSLocationAlwaysUsageDescription</key>
         <string>Will you allow this app to always know your location?</string>
         <key>NSLocationWhenInUseUsageDescription</key>
         <string>Do you allow this app to know your current location?</string>
         <key>NSPhotoLibraryUsageDescription</key>
         <string>This app would like to use photo</string>
    

If you haven't added NSAppTransportSecurity till now, add the below permissions

        <key>NSAppTransportSecurity</key>
        <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
        <key>example.com</key>
        <dict>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <key>NSIncludesSubdomains</key>
        <true/>
        </dict>
        </dict>
        </dict>
  1. You should import ANAChat and can use ANA Chat SDK from anywhere using the below code

Swift:

        let storyboard = UIStoryboard(name: "SDKMain", bundle: CommonUtility.getFrameworkBundle())
        let controller = storyboard.instantiateViewController(withIdentifier: "ChatViewController") as! ChatViewController
        controller.businessId = "#businessID"
        controller.flowId = "#flowID";
        controller.baseAPIUrl = "#baseUrl"
        controller.headerTitle = "Chatty"
        controller.baseThemeColor = UIColor.init(red: 0.549, green: 0.784, blue: 0.235, alpha: 1.0)
        controller.headerLogoImageName = "chatty"
        self.navigationController?.pushViewController(controller, animated: true)

Objective C :

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SDKMain" bundle:[CommonUtility getFrameworkBundle]];
        ChatViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"ChatViewController"];
        controller.businessId = @"#businessID";
        controller.flowId = @"landingpage";
        controller.baseAPIUrl = @"#baseUrl";
        controller.headerTitle = @"Chatty";
        controller.baseThemeColor = [UIColor colorWithRed:0.549 green:0.784 blue:0.235 alpha:1.0];
        controller.headerLogoImageName = @"chatty";
        [self.navigationController pushViewController:controller animated:YES];
  1. If you want to support location input type. You can include a GooglePlacePicker in your project with the Google Places Documentation(Follow the link upto Step 4). After Integrating the places to the application, Follow below steps to complete the Installation.

Swift : Import GooglePlacePicker in your module where you are initializing the SDK code

         import GooglePlacePicker

Connect to ChatViewControllerDelegate and the implement the below method:

        controller.delegate = self

copy the below code to your module:

        func presentLocationPopupOnViewController(_ vc: UIViewController){
            let config = GMSPlacePickerConfig(viewport: nil)
            let placePicker = GMSPlacePicker(config: config)
            
            placePicker.pickPlace(callback: {(place, error) -> Void in
            if let error = error {
            print("Pick Place error: \(error.localizedDescription)")
            return
            }
            if let latitude = place?.coordinate.latitude, let longitude = place?.coordinate.longitude{
                    let alertController: UIAlertController = UIAlertController(title: "Alert", message: "Do you want to share the selected location?", preferredStyle: .alert)
                    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel) { action -> Void in
                    }
                    alertController.addAction(cancelAction)
                    
                    let okAction: UIAlertAction = UIAlertAction(title: "Ok", style: .default) { action -> Void in
                    
                    let locationInfo:[String: String] = ["latitude": String(latitude), "longitude" : String(longitude)]
                    // post a notification
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "kLocationReceivedNotification"), object: nil, userInfo: locationInfo)
                    
                    }
                    alertController.addAction(okAction)
                    
                    vc.present(alertController, animated: true, completion: nil)
                }
            })
        }

Objective C : Import GooglePlacePicker in your module where you are initializing the SDK code

        @import GooglePlacePicker;

Connect to ChatViewControllerDelegate and implement the below method:

        controller.delegate = self

copy the below code to your module:

        - (void)presentLocationPopupOnViewController:(UIViewController * _Nonnull)vc {
            GMSPlacePickerConfig *config = [[GMSPlacePickerConfig alloc] initWithViewport:nil];
            GMSPlacePicker *placePicker = [[GMSPlacePicker alloc] initWithConfig:config];

            [placePicker pickPlaceWithCallback:^(GMSPlace *place, NSError *error) {
                if (error != nil) {
                NSLog(@"Pick Place error %@", [error localizedDescription]);
                return;
                }
                UIAlertController * alert = [UIAlertController
                alertControllerWithTitle:@"Alert"
                message:@"Do you want to share the selected location?"
                preferredStyle:UIAlertControllerStyleAlert];


                UIAlertAction   *cancelAction = [UIAlertAction
                actionWithTitle:@"Cancel"
                style:UIAlertActionStyleCancel
                handler:^(UIAlertAction * action) {

                }];

                UIAlertAction   *okAction = [UIAlertAction
                actionWithTitle:@"Ok"
                style:UIAlertActionStyleDefault
                handler:^(UIAlertAction * action) {
                if(place.coordinate.latitude && place.coordinate.longitude){
                    [[NSNotificationCenter defaultCenter] postNotificationName:
                    @"kLocationReceivedNotification" object:nil userInfo:
                    @{@"latitude" : [NSString stringWithFormat:@"%f",place.coordinate.latitude],
                    @"longitude" : [NSString stringWithFormat:@"%f",place.coordinate.longitude]}];
                    }
                }];


                [alert addAction:cancelAction];
                [alert addAction:okAction];

                [vc presentViewController:alert animated:YES completion:nil];
            }];
        }

Source Code Installation

If you wish to install ANAChat directly into your application from source, then clone the repository and add code and resources to your application:

  1. Clone the respository and navigate to ANAChat-iOS-master/ANAChat/ and Drag and drop Classes folder into your project, instructing Xcode to copy items into your destination group's folder. If you are importing files into Objective C project, run the project after adding the files.

  2. FCM configuration is required to use this SDK please check the documentation here to install and configure.

  3. Follow the above steps from 4 to 8 to complete the installation.

    If you are importing into Objective C project, Replace import statement to "Your-Project-Name-Swift.h". If you are importing into Swift project, No import statement is required.

Note:

  1. Use the above codes with valid businessID and baseAPIUrl.
  2. Above code is for pushing the ChatViewController, you can use ChatViewController as per your requirement
  3. Configure the FCM server key on fcm-plugin to send the push notifications to the App. Use below steps to get FCM server key.
    1. On FCM console
    2. Click the settings icon/cog wheel next to your project name at the top of the new Firebase Console
    3. Click Project settings
    4. Click on the Cloud Messaging tab
    5. The key is right under Server Key
  4. Follow step 7 only if you want to support Input type location

License

ANAChat is available under the GNU GPLv3 license.

anachat-ios's People

Contributors

rakeshtatekonda avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.