All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushJsonConfiguration Maven / Gradle / Ivy

There is a newer version: 5.1.0
Show newest version
/**
 * JBoss, Home of Professional Open Source
 * Copyright Red Hat, Inc., and individual contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * 	http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jboss.aerogear.android.unifiedpush.fcm;

import android.content.Context;
import android.util.Log;
import org.jboss.aerogear.android.unifiedpush.PushConfiguration;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;

/**
 * A Push Configuration which builds {@link org.jboss.aerogear.android.unifiedpush.fcm.AeroGearFCMPushRegistrar} instances.
 */
public class AeroGearFCMPushJsonConfiguration
        extends PushConfiguration {

    private static final String TAG = AeroGearFCMPushJsonConfiguration.class.getName();
    private static final String JSON_OBJECT = "android";
    private static final String JSON_URL = "pushServerURL";
    private static final String JSON_SENDER_ID = "senderID";
    private static final String JSON_VARIANT_ID = "variantID";
    private static final String JSON_VARIANT_SECRET = "variantSecret";

    private final UnifiedPushConfig pushConfig = new UnifiedPushConfig();
    private String fileName = "push-config.json";

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * RegistryURL is the URL of the 3rd party application server
     * 
     * @return the current pushServerURI
     */
    public URI getPushServerURI() {
        return this.pushConfig.getPushServerURI();
    }

    /**
     * SenderId is a  GCM sender Id (usually a project number) registered for 
     * this application.
     * 
     * @return a copy of the current set of senderIds.
     * 
     */
    public String getSenderId() {
        return pushConfig.getSenderId();
    }

    /**
     * SenderId is a  GCM sender Id (usually a project number) registered for 
     * this application.
     * 
     * @param senderId a new sender Id to add to the current set of senderIds.
     * @return the current configuration.
     */
    public AeroGearFCMPushJsonConfiguration setSenderId(String senderId) {
        this.pushConfig.setSenderId(senderId);
        return this;
    }

    /**
     * ID of the Variant from the AeroGear UnifiedPush Server.
     * 
     * @return the current variant id
     */
    public String getVariantID() {
        return pushConfig.getVariantID();
    }

    /**
     * Secret of the Variant from the AeroGear UnifiedPush Server.
     * 
     * @return the current Secret
     * 
     */
    public String getSecret() {
        return pushConfig.getSecret();
    }

    /**
     * The device token Identifies the device within its Push Network. It is the
     * value = FirebaseInstanceId.getInstance().getToken();
     * 
     * @return the current device token
     * 
     */
    public String getDeviceToken() {
        return pushConfig.getDeviceToken();
    }

    /**
     * Device type determines which cloud messaging system will be used by the
     * AeroGear Unified Push Server
     * 
     * Defaults to ANDROID
     * 
     * @return the device type
     */
    public String getDeviceType() {
        return pushConfig.getDeviceType();
    }

    /**
     * Device type determines which cloud messaging system will be used by the
     * AeroGear Unified Push Server.
     * 
     * Defaults to ANDROID
     * 
     * @param deviceType a new device type
     * @return the current configuration
     * 
     */
    public AeroGearFCMPushJsonConfiguration setDeviceType(String deviceType) {
        this.pushConfig.setDeviceType(deviceType);
        return this;
    }

    /**
     * The name of the operating system. Defaults to Android
     * 
     * @return the operating system
     */
    public String getOperatingSystem() {
        return pushConfig.getOperatingSystem();
    }

    /**
     * The name of the operating system. Defaults to Android
     * 
     * @param operatingSystem the new operating system
     * @return the current configuration
     */
    public AeroGearFCMPushJsonConfiguration setOperatingSystem(String operatingSystem) {
        this.pushConfig.setOperatingSystem(operatingSystem);
        return this;
    }

    /**
     * The version of the operating system running.
     * 
     * Defaults to the value provided by android.os.Build.VERSION.RELEASE
     * 
     * @return the current OSversion
     * 
     */
    public String getOsVersion() {
        return pushConfig.getOsVersion();
    }

    /**
     * The Alias is an identifier of the user of the system.
     * 
     * Examples are an email address or a username
     * 
     * @return alias
     * 
     */
    public String getAlias() {
        return pushConfig.getAlias();
    }

    /**
     * The Alias is an identifier of the user of the system.
     * 
     * Examples are an email address or a username
     * 
     * @param alias the new alias
     * @return the current configuration
     * 
     */
    public AeroGearFCMPushJsonConfiguration setAlias(String alias) {
        this.pushConfig.setAlias(alias);
        return this;
    }

    /**
     * The categories specifies a channel which may be used to send messages
     * 
     * @return the current categories
     * 
     */
    public List getCategories() {
        return pushConfig.getCategories();
    }

    /**
     * The categories specifies a channel which may be used to send messages
     * 
     * @param categories the new categories
     * @return the current configuration
     * 
     */
    public AeroGearFCMPushJsonConfiguration setCategories(List categories) {
        this.pushConfig.setCategories(categories);
        return this;
    }

    /**
     * The categories specifies a channel which may be used to send messages
     *
     * @param categories add categories
     * @return the current configuration
     *
     */
    public AeroGearFCMPushJsonConfiguration addCategories(List categories) {
        this.pushConfig.addCategories(categories);
        return this;
    }

    /**
     * The categories specifies a channel which may be used to send messages
     * 
     * @param categories the new categories
     * @return the current configuration
     * 
     */
    public AeroGearFCMPushJsonConfiguration setCategories(String... categories) {
        this.pushConfig.setCategories(categories);
        return this;
    }

    /**
     * The categories specifies a channel which may be used to send messages
     * 
     * @param category a new category to be added to the current list.
     * @return the current configuration
     * 
     */
    public AeroGearFCMPushJsonConfiguration addCategory(String category) {
        this.pushConfig.addCategory(category);
        return this;
    }

    /**
     *
     * Load push unified push informations from assets/push-config.json
     *
     * 
     * {
     *   "pushServerURL": "pushServerURL (e.g http(s)//host:port/context)",
     *   "android": {
     *     "senderID": "senderID (e.g Google Project ID only for android)",
     *     "variantID": "variantID (e.g. 1234456-234320)",
     *     "variantSecret": "variantSecret (e.g. 1234456-234320)"
     * }
     * 
* * @param context your application's context * * @return the current configuration */ public AeroGearFCMPushJsonConfiguration loadConfigJson(Context context) { InputStream fileStream = null; try { fileStream = context.getResources().getAssets().open(getFileName()); int size = fileStream.available(); byte[] buffer = new byte[size]; fileStream.read(buffer); fileStream.close(); String json = new String(buffer); JSONObject pushConfig = new JSONObject(json); JSONObject pushAndroidConfig = pushConfig.getJSONObject(JSON_OBJECT); this.pushConfig.setPushServerURI(new URI(pushConfig.getString(JSON_URL))); this.pushConfig.setSenderId(pushAndroidConfig.getString(JSON_SENDER_ID)); this.pushConfig.setVariantID(pushAndroidConfig.getString(JSON_VARIANT_ID)); this.pushConfig.setSecret(pushAndroidConfig.getString(JSON_VARIANT_SECRET)); } catch (URISyntaxException e) { // It will never happen Log.e(TAG, e.getMessage(), e); } catch (JSONException e) { Log.e(TAG, e.getMessage(), e); throw new RuntimeException("An error occurred while parsing the " + getFileName() + ". Please check the file format"); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); throw new RuntimeException("An error occurred while parsing the " + getFileName() + ". Please check if the file exists"); } finally { if (fileStream != null) { try { fileStream.close(); } catch (IOException e) { // Ignore IOException } } } return this; } /** * * Protected builder method. * * @return A configured AeroGearGCMPushRegistrar * * @throws IllegalStateException if pushServerURI, SenderID, Variant or VariantSecret is null or empty. */ @Override protected final AeroGearFCMPushRegistrar buildRegistrar() { pushConfig.checkRequiredFields(); return new AeroGearFCMPushRegistrar(pushConfig); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy