Giter Site home page Giter Site logo

onefeed-android-sdk's Introduction

Vatsana Technologies Pvt. Ltd. OneFeed SDK (WittyfeedAndroidApi)

Note

WittyFeed SDK API is now OneFeed Android SDK, New v2.3.21 made live on 10-Jan-2019

Platform Source License

Table Of Contents

  1. Getting Started
  2. License

Basic concepts

OneFeed brings you new revolutionary way to monetize your App Business. OneFeed provides engaging content from top publishers in your app, and through the OneFeed Dashboard you can track your earning with the content consumption.

OneFeed is World's Top Paying Network

OneFeed SDK has its core competency at its personalised feed recommendation algorithms and lightweight architecture.

Features

  • OneFeed ready-to-deploy feed layout
  • Notification service

Browse through the example app in this repository to see how the OneFeed SDK can be implemented in different types of apps.

1. Getting Started

1.1 Minimum requirements

  • Android version 4.1 (android:minSdkVersion="16")

1.2. Incorporating the SDK

  1. Integrate OneFeed with JitPack

  2. SignUp at OneFeed and create a new application to integrate with

  3. Gather the API_KEY and APP_ID from the OneFeed Dashboard

  4. Import OneFeed SDK in your project

  • add JitPack repo in project level build.gradle
    allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  • add OneFeed-Android-SDK:2.3.22 in your app level build.gradle
    dependencies {
	        implementation 'com.github.vatsanatech:OneFeed-Android-SDK:2.3.22'
	}

Notice

We encourage developers to always check for latest SDK version and refer to its updated documentation to use it.

1.3 Initializing the SDK

  • Add this code in your String.xml
    <string name="onefeed_app_id">YOUR APP ID</string>
    <string name="onefeed_api_key">YOUR API KEY</string>
    
  • Add this code in your Manifests.xml
        <meta-data android:name="com.onefeed.sdk.ApiKey"
            android:value="@string/onefeed_api_key"/>

        <meta-data android:name="com.onefeed.sdk.AppId"
            android:value="@string/onefeed_app_id"/>

       
  • Add this code in your Application class
    public class Root extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            //Initialize OneFeedSdk
            OneFeedSdk.getInstance().init(getApplicationContext());
            
        }
    }
    
  • Add this code in your MainActivity class if you are using FCM
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get FCM token
        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                        if (!task.isSuccessful()) {
                            Log.w("Token", "getInstanceId failed", task.getException());
                            return;
                        }
                        try {
                            // Get new Instance ID token
                            String token = task.getResult().getToken();
                            //set Token
                            OneFeedSdk.getInstance().setToken(token);
                        }catch (NullPointerException e){
                            Log.e("Exception", e.getMessage());
                        }
                    }
                });

        topicSubscription();
    }
    
    //FCM Topic Subscription and Unsubscription
    private void topicSubscription() {
       //Topic Subscribe
       FirebaseMessaging.getInstance().subscribeToTopic(OneFeedSdk.getInstance().getSubscribeTopic());
    
       if (TextUtils.isEmpty(OneFeedSdk.getInstance().getOldTopicSubscribe())) {
           OneFeedSdk.getInstance().setTopicSubscription();
       } else if (!OneFeedSdk.getInstance().getSubscribeTopic().equalsIgnoreCase(OneFeedSdk.getInstance().getOldTopicSubscribe())) {
           FirebaseMessaging.getInstance().unsubscribeFromTopic(OneFeedSdk.getInstance().getOldTopicSubscribe());
           OneFeedSdk.getInstance().setTopicSubscription();
       }
   }
  • Add this code in your MainActivity class if you are using OneSignal
      @Override
         protected void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             
         OneSignal.getTags(new OneSignal.GetTagsHandler() {
            @Override
            public void tagsAvailable(JSONObject tags) {
                if (tags != null) {
                try {
                    String tag = tags.getString("onefeed");
                    if (!tag.equalsIgnoreCase("Your App ID" + "_" + OneFeedSdk.VERSION)) {
                    OneSignal.sendTag("onefeed", "Your App ID" + "_" + OneFeedSdk.VERSION);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                }else{
                OneSignal.sendTag("onefeed", "Your App ID" + "_" + OneFeedSdk.VERSION);
                }
            }
         });
        
        OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
            @Override
            public void idsAvailable(String userId, String registrationId) {
                Log.e("debug", "User:" + userId);
                
                //set User id
                OneFeedSdk.getInstance().setToken(userId);
            }
        });
    }

1.4 For OneFeed ready-to-deploy feed layout

        
    Fragment oneFeedFragment = new OneFeedFragment();
    
    //Replaced your id name to "XXXXX" 
    getSupportFragmentManager().beginTransaction().replace(R.id."XXXXX", oneFeedFragment, "OneFeed").commit();

1.5. Fetch a Modular Native Card

Step 1: In dashboard(https://onefeed.ai), Go to your added app section and Make a card according to your requirements and note the card id.

Step 2: Set this tag in your View (Tag is mandatory):

    <ImageView
        android:id="@+id/image_story"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:tag="native_card_image"/>
  
    <TextView
        android:id="@+id/view_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:tag="native_card_title"
        android:layout_gravity="bottom"
        android:textSize="18sp"
        android:textColor="@color/white"/>

Step 3: Add this code in your Activity/Fragment class (First time initialize your card):

OneFeedSdk.getInstance().initNativeCard(YOUR CARD_ID, new CallBackListener() {
            @Override
            public void success() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                       //Add your adapter here
                    }
                });
            }

            @Override
            public void error() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                       //Add your adapter here
                    }
                });
            }
        });
    }

Step 4: Add this code in your adapter class:

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
        
        //Repeating card view
        if(holder instanceof YourViewHolder){
    
            YourViewHolder holder1 = (YourViewHolder) holder;
            
          String categoryType = OneFeedNativeCard.showCard(RepeatingCardActivity.this, YOUR CARD_ID, holder1.linearLayout,
        (Add reference Which type of layout manager you are using) OneFeedSdk.V_List, true);
                
        }else{
            //Handle by user
        }
    }

1.6.1 For FCM Notifications Service of OneFeed

  • Add this code in your class which extends FirebaseMessagingService:
    public class YourFirebaseMessagingService extends FirebaseMessagingService {
    
             @Override
             public void onMessageReceived(RemoteMessage remoteMessage) {
             super.onMessageReceived(remoteMessage);
            
            //OneFeed notification
             if(remoteMessage.getData().get("notiff_agent").equalsIgnoreCase("wittyfeed_sdk")) {
                 NotificationHelper.sendNotification(getApplicationContext(), FeedActivity.class, remoteMessage.getData(), android.R.drawable.ic_menu_share);
             } else {
                 //Handle by user
                 }
             }
    
             @Override
             public void onNewToken(String s) {
             super.onNewToken(s);
    
             //Update Token
             OneFeedSdk.getInstance().setToken(s);
             Log.e("Token", s);
             }
        }

1.6.2 For OneSignal Notifications Service of OneFeed

In your class which extends Application, update with the code below

    @Override
    public void onCreate() {
	super.onCreate();	
	OneSignal.startInit(this)
		    .setNotificationReceivedHandler(new ExampleNotificationReceivedHandler())
		    .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
		    .unsubscribeWhenNotificationsAreDisabled(true)
		    .init();
     }

     private class ExampleNotificationReceivedHandler implements OneSignal.NotificationReceivedHandler {
        @Override
        public void notificationReceived(OSNotification notification) {
            String notificationID = notification.payload.notificationID;

            String agent = notification.payload.additionalData.optString("notiff_agent", null);

     	   // NOTE: optionally you can check that notification has arrived from WittyFeed by below line -
            if(!TextUtils.isEmpty(agent) && agent.equalsIgnoreCase("wittyfeed_sdk")) {
                
                 NotificationHelper.sendNotification(getApplicationContext(), FeedActivity.class, 
                        notification.payload.additionalData, android.R.drawable.ic_menu_share);
                
            }else {
                // Handle by user
            }
        }
    }

1.7 OneFeed is built for Portrait

OneFeed works best in the world's default mode i.e Potrait, So don't forget to add the below line in Manifest.

    android:screenOrientation="portrait"

Note

Notification service with WittyFeedNativeAndroidSDK is optional to use but is highly recommended. You will get to handle this notifications on OneFeed Dashbaord

2. License

This program is licensed under the Vatsana Technologies Pvt. Ltd. SDK License Agreement (the “License Agreement”). By copying, using or redistributing this program, you agree to the terms of the License Agreement. The full text of the license agreement can be found at https://github.com/vatsanatech/OneFeed-Android-SDK/blob/master/LICENSE. Copyright 2017 Vatsana Technologies Pvt. Ltd. All rights reserved.

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.