Tuesday 12 July 2016

Opening Android App When Particular link/Host with Scheme is opened in Browser.

Opening Android Application when particular "Host" is opened in Android mobile browser or particular Link is opened Also named as Mobile DeepLinking.

We need to define host & scheme in the intent filters of the activity, which we need to open when link or host is opened.


Below is the code for opening app when particular Host is opened.

 <activity


            android:name=".ActivityName">
<intent-filter>

                <action android:name="android.intent.action.GALLERY" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
<data
                    android:host="http"
                    android:scheme="abc.com" /> 
</intent-filter>

</activity>

Below is the code for opening app when we are trying particular Link  in browser.


 <activity

        android:name=".ActivityName">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http"
                  android:host="abc.com"
                  android:pathPrefix="/images/" />
            <data android:scheme="https"
                  android:host="abc.com"
                  android:pathPrefix="/images/" />
        </intent-filter>
   </activity>
 
   
Cheers!!   

Thursday 7 July 2016

Firebase (via Assistant) Crash Reporting In Android Studio 2.2 Preview

Hi Guys, Today i'll be discussing how to use Firebase which is present as a Assistant in Android Studio 2.2.1 Preview.

As we know Firebase is a Cloud Services Provider which was acquired by Google back in 2014 in order to help developer build better real-time apps.

Now Firebase will be available as Assistant in Android Studio upcoming version which will help us easliy integrate following :

1. Analytics
2. Cloud Messaging
3. Authenication
4. Real time Database
5. Storage
6. Crash Reporting etc..

Now using Assistant present in Android Studio to use/integrate one the above services is quite easy and fast.

Here i'll be going through the steps to integrate Crash Reporting via Firebase in one of my demo app.

By Crash Reporting you can track all the crashes that occurs in your app and rectify once to get the report via Firebase.

So here are the steps :

1. Go to Tools and select Firebase.





2. You will see the Assistant opened in the right side in a tab named Assistant.

3. Now Scroll down and click on Crash Reporting






4. Click on Setup Firebase Crash reporting







5. Now  This will ask to to connect to Firebase.

6. Once you click on Connect it will take you to Browser and ask you to login via Google Account and will ask for permission.





7. After that Successful login you will be re-directed to Firebase Console and you can come back to Android Studio where it shows connected.





Note : This will automatically create your project inside google web console. Where make sure your Firebase Api is Enable for the project in case if you face
crash reporting problems.

8. Now you need to create a new Firebase project or select the existing Firebase Google project in which we wish to integrate Firebase.






Here you can create a new Firebase project.

After you select/create Firebase project and connect then it shows progress in Assistant like this :





Now once you are connected Assistance show you as connected as well.




After this we are all done setting up Firebase project and connection. Now Lets come to Coding part which is also a small part to do.

9. Now you need to add following Classpath into your buildscript dependencies

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

10. After that you need to add following dependencies in your app level build.gradle

android {

    // ...

}

dependencies {

    // ..

    compile 'com.google.firebase:firebase-ads:9.2.0'

}

// ADD THIS AT THE BOTTOM

apply plugin: 'com.google.gms.google-services'

Note : Make sure you are using the latest version of Firebase and Google play services here 11. Add following dependencies to app level build.gradle as well
    compile 'com.google.android.gms:play-services:9.2.0'
12. Now all is done. You can following code lines to track crashes
FirebaseCrash.logcat(Log.ERROR, TAG, "NPE caught");
FirebaseCrash.report(ex);
This Lines will send crash reports to cloud. And you can login to console and check the crash reports easliy there.

Note : Every crash is visible on console only after 20-25 minutes after it is reported.


In one of my demos i've created arithmetic exception to check the Firebase something like this :


try { int i = 10 / 0; }catch (Exception e){ FirebaseCrash.logcat(Log.ERROR, "Crash", "NPE caught"); FirebaseCrash.report(e); }


Which reported the Crash to console which was available to check after 20-25 minutes.
Once Crash occurs Firebase service starts and sends the crash details up to cloud.

You can find the below log in you logcat when Firebase service runs successfully.


Logcat Details which ensures Firebase Sent the Report successfully :

D/FirebaseCrashApiImpl: throwable java.lang.ArithmeticException: divide by zero
I/FirebaseCrashReceiverServiceImpl: FirebaseCrashReceiverServiceImpl created by
ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader
[DexPathList[[zip file "/data/user/0/com.google.android.gms/app_chimera/m/00000005/
DynamiteModulesC_GmsCore_prodmnc_xxhdpi_release.apk"],nativeLibraryDirectories=
[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/armeabi-v7a,
/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/armeabi,
/vendor/lib, /system/lib]]]  com.youpackage:background_crash D/FirebaseCrashReceiverServiceImpl: onCreate
com.youpackage:background_crash I/DynamiteModule: Considering local module com.google.android.gms.flags:0 and remote module com.google.android.gms.flags:1
com.youpackage:background_crash I/DynamiteModule: Selected remote version of com.google.android.gms.flags, version >= 1
com.youpackage:background_crash D/FirebaseCrashReceiverServiceImpl: Saving crash
com.youpackage:background_crash I/FirebaseCrashSenderServiceImpl: FirebaseCrashSenderServiceImpl created by ClassLoader com.google.android.chimera.container.internal.DelegateLastPathClassLoader[DexPathList[[zip file "/data/user/0/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesC_GmsCore_prodmnc_xxhdpi_release.apk"],nativeLibraryDirectories=[/data/user/0/com.google.android.gms/app_chimera/m/00000005/n/armeabi-v7a, /data/user/0/com.google.android.gms/app_chimera/m/00000005/n/armeabi, /vendor/lib, /system/lib]]]


D/FirebaseCrashSenderServiceImpl: Response code: 200
D/FirebaseCrashSenderServiceImpl: Report sent


You can check the Crash reports on Console by logging into https://console.firebase.google.com in crash reports will look like this








Cheers!!

References :
https://firebase.google.com/docs/android