remove firebase

Signed-off-by: yenda <eric@status.im>
This commit is contained in:
yenda 2019-10-28 15:52:25 +01:00
parent 0856ae12e0
commit 7bb45fdd8f
No known key found for this signature in database
GPG Key ID: 0095623C0069DCE6
85 changed files with 278 additions and 5716 deletions

View File

@ -314,10 +314,6 @@ dependencies {
implementation project(':react-native-status')
implementation project(':react-native-webview-bridge')
implementation project(':react-native-status-keycard')
implementation "com.google.android.gms:play-services-base:${rootProject.ext.googlePlayServicesVersion}"
implementation 'com.google.firebase:firebase-core:16.0.9' //this decides your firebase SDK version
implementation 'com.google.firebase:firebase-messaging:18.0.0'
implementation 'com.github.status-im:function:0.0.1'
implementation 'com.facebook.fresco:animated-gif:1.10.0'
}
@ -342,8 +338,4 @@ task hemroidBuild(type: Exec) {
preBuild.dependsOn hemroidBuild
// Must be at bottom to avoid dependency collision
apply plugin: 'com.google.gms.google-services'
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

View File

@ -1,42 +0,0 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

View File

@ -61,7 +61,3 @@
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
# Firebase
-keep class io.invertase.firebase.** { *; }
-dontwarn io.invertase.firebase.**

View File

@ -1,42 +0,0 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum.debug"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

View File

@ -33,16 +33,6 @@
android:name=".MainApplication"
android:largeHeap="true"
android:usesCleartextTraffic="true">
<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_status_notification" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/notification_channel_id" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
@ -78,12 +68,6 @@
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
<service android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"

View File

@ -17,8 +17,6 @@ import java.util.List;
import im.status.ethereum.keycard.RNStatusKeycardPackage;
import im.status.ethereum.module.StatusPackage;
import io.invertase.firebase.messaging.RNFirebaseMessagingPackage;
import io.invertase.firebase.notifications.RNFirebaseNotificationsPackage;
public class MainApplication extends MultiDexApplication implements ReactApplication {
@ -33,8 +31,6 @@ public class MainApplication extends MultiDexApplication implements ReactApplica
StatusPackage statusPackage = new StatusPackage(RootUtil.isDeviceRooted());
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(statusPackage);
packages.add(new RNFirebaseMessagingPackage());
packages.add(new RNFirebaseNotificationsPackage());
packages.add(new ReactNativeDialogsPackage());
packages.add(new RNStatusKeycardPackage());
packages.add(new WebViewBridgePackage(BuildConfig.DEBUG_WEBVIEW == "1"));

View File

@ -1,42 +0,0 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum.pr"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

View File

@ -1,42 +0,0 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 2
}
}
}
],
"configuration_version": "1"
}

View File

@ -10,8 +10,6 @@ ext {
targetSdkVersion = Integer.valueOf(project.targetSdkVersion)
supportLibVersion = project.supportLibVersion
gradlePluginVersion = project.gradlePluginVersion
googlePlayServicesVersion = project.googlePlayServicesVersion
googlePlayServicesVisionVersion = project.googlePlayServicesVisionVersion
}
buildscript {
@ -22,7 +20,6 @@ buildscript {
}
dependencies {
classpath "com.android.tools.build:gradle:${project.ext.gradlePluginVersion}"
classpath 'com.google.gms:google-services:4.2.0'
classpath 'de.undercouch:gradle-download-task:3.1.2'
// NOTE: Do not place your application dependencies here; they belong

View File

@ -27,8 +27,6 @@ targetSdkVersion=28
buildToolsVersion=28.0.3
supportLibVersion=28.0.0
gradlePluginVersion=3.4.1
googlePlayServicesVersion=16.0.1
googlePlayServicesVisionVersion=17.0.2
android.useAndroidX=true
android.enableJetifier=true

View File

@ -20,7 +20,6 @@
"react-native-image-crop-picker"
"react-native-svg"
"react-native-webview-bridge"
"react-native-firebase"
"react-native-touch-id"
"web3-utils"
"chance"

View File

@ -141,7 +141,6 @@ var TopLevel = {
"generateAlias": function() {},
"fallbacks" : function () {},
"fetch" : function () {},
"firebase" : function () {},
"floor" : function () {},
"focus" : function () {},
"format" : function () {},
@ -428,7 +427,6 @@ var TopLevel = {
"scrollToIndex" : function () {},
"section" : function () {},
"selection" : function () {},
"sendDataNotification" : function () {},
"sendDirectMessage" : function () {},
"sendLogs" : function () {},
"sendPairingMessage" : function () {},

View File

@ -5,13 +5,12 @@
[status-im.ui.screens.wallet.add-new.views :as add-new]
[fiddle.frame :as frame]))
;:generate-key
;:choose-key
;:select-key-storage
;:create-code
;:confirm-code
;:enable-fingerprint
;:enable-notifications
;;:generate-key
;;:choose-key
;;:select-key-storage
;;:create-code
;;:confirm-code
;;:enable-fingerprint
(re-frame/reg-sub :intro-wizard (fn [_] {:step :generate-key :generating-keys? false}))
(defn screens []
@ -21,4 +20,4 @@
[frame/frame
[intro/wizard]]
[frame/frame
[add-new/add-account]]])
[add-new/add-account]]])

View File

@ -26,9 +26,6 @@
(def svg (fn [] #js {:default #js {}}))
(def status-keycard (fn [] #js {:default #js {}}))
(defrecord Notification [])
(def react-native-firebase (fn [] #js {:default #js {:notifications #js {:Notification Notification}}}))
(def desktop-linking #js {:addEventListener (fn [])})
(def desktop-shortcuts #js {:addEventListener (fn [])})

View File

@ -1,54 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import <Foundation/Foundation.h>
#import "FIRCoreSwiftNameSupport.h"
NS_ASSUME_NONNULL_BEGIN
/**
* This class provides configuration fields for Firebase Analytics.
*/
FIR_SWIFT_NAME(AnalyticsConfiguration)
@interface FIRAnalyticsConfiguration : NSObject
/**
* Returns the shared instance of FIRAnalyticsConfiguration.
*/
+ (FIRAnalyticsConfiguration *)sharedInstance FIR_SWIFT_NAME(shared());
/**
* Sets the minimum engagement time in seconds required to start a new session. The default value
* is 10 seconds.
*/
- (void)setMinimumSessionInterval:(NSTimeInterval)minimumSessionInterval;
/**
* Sets the interval of inactivity in seconds that terminates the current session. The default
* value is 1800 seconds (30 minutes).
*/
- (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval;
/**
* Sets whether analytics collection is enabled for this app on this device. This setting is
* persisted across app sessions. By default it is enabled.
*/
- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,132 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import <Foundation/Foundation.h>
#if TARGET_OS_IOS
// TODO: Remove UIKit import on next breaking change release
#import <UIKit/UIKit.h>
#endif
#import "FIRCoreSwiftNameSupport.h"
@class FIROptions;
NS_ASSUME_NONNULL_BEGIN
/** A block that takes a BOOL and has no return value. */
typedef void (^FIRAppVoidBoolCallback)(BOOL success) FIR_SWIFT_NAME(FirebaseAppVoidBoolCallback);
/**
* The entry point of Firebase SDKs.
*
* Initialize and configure FIRApp using +[FIRApp configure]
* or other customized ways as shown below.
*
* The logging system has two modes: default mode and debug mode. In default mode, only logs with
* log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent
* to device. The log levels that Firebase uses are consistent with the ASL log levels.
*
* Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this
* argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled,
* further executions of the application will also be in debug mode. In order to return to default
* mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled.
*
* It is also possible to change the default logging level in code by calling setLoggerLevel: on
* the FIRConfiguration interface.
*/
FIR_SWIFT_NAME(FirebaseApp)
@interface FIRApp : NSObject
/**
* Configures a default Firebase app. Raises an exception if any configuration step fails. The
* default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched
* and before using Firebase services. This method is thread safe.
*/
+ (void)configure;
/**
* Configures the default Firebase app with the provided options. The default app is named
* "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method is thread
* safe.
*
* @param options The Firebase application options used to configure the service.
*/
+ (void)configureWithOptions:(FIROptions *)options FIR_SWIFT_NAME(configure(options:));
/**
* Configures a Firebase app with the given name and options. Raises an exception if any
* configuration step fails. This method is thread safe.
*
* @param name The application's name given by the developer. The name should should only contain
Letters, Numbers and Underscore.
* @param options The Firebase application options used to configure the services.
*/
// clang-format off
+ (void)configureWithName:(NSString *)name
options:(FIROptions *)options FIR_SWIFT_NAME(configure(name:options:));
// clang-format on
/**
* Returns the default app, or nil if the default app does not exist.
*/
+ (nullable FIRApp *)defaultApp FIR_SWIFT_NAME(app());
/**
* Returns a previously created FIRApp instance with the given name, or nil if no such app exists.
* This method is thread safe.
*/
+ (nullable FIRApp *)appNamed:(NSString *)name FIR_SWIFT_NAME(app(name:));
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This
* method is thread safe.
*/
@property(class, readonly, nullable) NSDictionary<NSString *, FIRApp *> *allApps;
#else
/**
* Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This
* method is thread safe.
*/
+ (nullable NSDictionary<NSString *, FIRApp *> *)allApps FIR_SWIFT_NAME(allApps());
#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* Cleans up the current FIRApp, freeing associated data and returning its name to the pool for
* future use. This method is thread safe.
*/
- (void)deleteApp:(FIRAppVoidBoolCallback)completion;
/**
* FIRApp instances should not be initialized directly. Call +[FIRApp configure],
* +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly.
*/
- (instancetype)init NS_UNAVAILABLE;
/**
* Gets the name of this app.
*/
@property(nonatomic, copy, readonly) NSString *name;
/**
* Gets a copy of the options for this app. These are non-modifiable.
*/
@property(nonatomic, copy, readonly) FIROptions *options;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,79 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import <Foundation/Foundation.h>
#import "FIRAnalyticsConfiguration.h"
#import "FIRCoreSwiftNameSupport.h"
#import "FIRLoggerLevel.h"
/**
* The log levels used by FIRConfiguration.
*/
typedef NS_ENUM(NSInteger, FIRLogLevel) {
/** Error */
kFIRLogLevelError __deprecated = 0,
/** Warning */
kFIRLogLevelWarning __deprecated,
/** Info */
kFIRLogLevelInfo __deprecated,
/** Debug */
kFIRLogLevelDebug __deprecated,
/** Assert */
kFIRLogLevelAssert __deprecated,
/** Max */
kFIRLogLevelMax __deprecated = kFIRLogLevelAssert
} DEPRECATED_MSG_ATTRIBUTE(
"Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. See FIRApp.h for more details.");
NS_ASSUME_NONNULL_BEGIN
/**
* This interface provides global level properties that the developer can tweak, and the singleton
* of the Firebase Analytics configuration class.
*/
FIR_SWIFT_NAME(FirebaseConfiguration)
@interface FIRConfiguration : NSObject
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/** Returns the shared configuration object. */
@property(class, nonatomic, readonly) FIRConfiguration *sharedInstance FIR_SWIFT_NAME(shared);
#else
/** Returns the shared configuration object. */
+ (FIRConfiguration *)sharedInstance FIR_SWIFT_NAME(shared());
#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/** The configuration class for Firebase Analytics. */
@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration;
/** Global log level. Defaults to kFIRLogLevelError. */
@property(nonatomic, readwrite, assign) FIRLogLevel logLevel DEPRECATED_MSG_ATTRIBUTE(
"Use -FIRDebugEnabled and -FIRDebugDisabled or setLoggerLevel. See FIRApp.h for more details.");
/**
* Sets the logging level for internal Firebase logging. Firebase will only log messages
* that are logged at or below loggerLevel. The messages are logged both to the Xcode
* console and to the device's log. Note that if an app is running from AppStore, it will
* never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose)
* setting.
*
* @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice.
*/
- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,29 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#ifndef FIR_SWIFT_NAME
#import <Foundation/Foundation.h>
// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK.
// Wrap it in our own macro if it's a non-compatible SDK.
#ifdef __IPHONE_9_3
#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X)
#else
#define FIR_SWIFT_NAME(X) // Intentionally blank.
#endif // #ifdef __IPHONE_9_3
#endif // FIR_SWIFT_NAME

View File

@ -1,37 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import "FIRCoreSwiftNameSupport.h"
/**
* The log levels used by internal logging.
*/
typedef NS_ENUM(NSInteger, FIRLoggerLevel) {
/** Error level, matches ASL_LEVEL_ERR. */
FIRLoggerLevelError = 3,
/** Warning level, matches ASL_LEVEL_WARNING. */
FIRLoggerLevelWarning = 4,
/** Notice level, matches ASL_LEVEL_NOTICE. */
FIRLoggerLevelNotice = 5,
/** Info level, matches ASL_LEVEL_NOTICE. */
FIRLoggerLevelInfo = 6,
/** Debug level, matches ASL_LEVEL_DEBUG. */
FIRLoggerLevelDebug = 7,
/** Minimum log level. */
FIRLoggerLevelMin = FIRLoggerLevelError,
/** Maximum log level. */
FIRLoggerLevelMax = FIRLoggerLevelDebug
} FIR_SWIFT_NAME(FirebaseLoggerLevel);

View File

@ -1,135 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import <Foundation/Foundation.h>
#import "FIRCoreSwiftNameSupport.h"
NS_ASSUME_NONNULL_BEGIN
/**
* This class provides constant fields of Google APIs.
*/
FIR_SWIFT_NAME(FirebaseOptions)
@interface FIROptions : NSObject <NSCopying>
/**
* Returns the default options.
*/
+ (nullable FIROptions *)defaultOptions FIR_SWIFT_NAME(defaultOptions());
/**
* An iOS API key used for authenticating requests from your app, e.g.
* @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers.
*/
@property(nonatomic, copy, nullable) NSString *APIKey FIR_SWIFT_NAME(apiKey);
/**
* The bundle ID for the application. Defaults to `[[NSBundle mainBundle] bundleID]` when not set
* manually or in a plist.
*/
@property(nonatomic, copy) NSString *bundleID;
/**
* The OAuth2 client ID for iOS application used to authenticate Google users, for example
* @"12345.apps.googleusercontent.com", used for signing in with Google.
*/
@property(nonatomic, copy, nullable) NSString *clientID;
/**
* The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics.
*/
@property(nonatomic, copy, nullable) NSString *trackingID;
/**
* The Project Number from the Google Developer's console, for example @"012345678901", used to
* configure Google Cloud Messaging.
*/
@property(nonatomic, copy) NSString *GCMSenderID FIR_SWIFT_NAME(gcmSenderID);
/**
* The Project ID from the Firebase console, for example @"abc-xyz-123".
*/
@property(nonatomic, copy, nullable) NSString *projectID;
/**
* The Android client ID used in Google AppInvite when an iOS app has its Android version, for
* example @"12345.apps.googleusercontent.com".
*/
@property(nonatomic, copy, nullable) NSString *androidClientID;
/**
* The Google App ID that is used to uniquely identify an instance of an app.
*/
@property(nonatomic, copy) NSString *googleAppID;
/**
* The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com".
*/
@property(nonatomic, copy, nullable) NSString *databaseURL;
/**
* The URL scheme used to set up Durable Deep Link service.
*/
@property(nonatomic, copy, nullable) NSString *deepLinkURLScheme;
/**
* The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com".
*/
@property(nonatomic, copy, nullable) NSString *storageBucket;
/**
* Initializes a customized instance of FIROptions with keys. googleAppID, bundleID and GCMSenderID
* are required. Other keys may required for configuring specific services.
*/
- (instancetype)initWithGoogleAppID:(NSString *)googleAppID
bundleID:(NSString *)bundleID
GCMSenderID:(NSString *)GCMSenderID
APIKey:(NSString *)APIKey
clientID:(NSString *)clientID
trackingID:(NSString *)trackingID
androidClientID:(NSString *)androidClientID
databaseURL:(NSString *)databaseURL
storageBucket:(NSString *)storageBucket
deepLinkURLScheme:(NSString *)deepLinkURLScheme
DEPRECATED_MSG_ATTRIBUTE(
"Use `-[[FIROptions alloc] initWithGoogleAppID:GCMSenderID:]` "
"(`FirebaseOptions(googleAppID:gcmSenderID:)` in Swift)` and property "
"setters instead.");
/**
* Initializes a customized instance of FIROptions from the file at the given plist file path.
* For example,
* NSString *filePath =
* [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
* FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
* Returns nil if the plist file does not exist or is invalid.
*/
- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath;
/**
* Initializes a customized instance of FIROptions with required fields. Use the mutable properties
* to modify fields for configuring specific services.
*/
// clang-format off
- (instancetype)initWithGoogleAppID:(NSString *)googleAppID
GCMSenderID:(NSString *)GCMSenderID
FIR_SWIFT_NAME(init(googleAppID:gcmSenderID:));
// clang-format on
@end
NS_ASSUME_NONNULL_END

View File

@ -1,6 +0,0 @@
#import "FIRAnalyticsConfiguration.h"
#import "FIRApp.h"
#import "FIRConfiguration.h"
#import "FIRCoreSwiftNameSupport.h"
#import "FIRLoggerLevel.h"
#import "FIROptions.h"

View File

@ -1,5 +0,0 @@
framework module FirebaseCore {
umbrella header "FirebaseCore.h"
export *
module * { export *}
link "z"}

View File

@ -1,4 +0,0 @@
framework module FirebaseCoreDiagnostics {
export *
module * { export *}
link "z"}

View File

@ -1,281 +0,0 @@
#import <Foundation/Foundation.h>
// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK.
// Wrap it in our own macro if it's a non-compatible SDK.
#ifndef FIR_SWIFT_NAME
#ifdef __IPHONE_9_3
#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X)
#else
#define FIR_SWIFT_NAME(X) // Intentionally blank.
#endif // #ifdef __IPHONE_9_3
#endif // #ifndef FIR_SWIFT_NAME
/**
* @memberof FIRInstanceID
*
* The scope to be used when fetching/deleting a token for Firebase Messaging.
*/
FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDScopeFirebaseMessaging
FIR_SWIFT_NAME(InstanceIDScopeFirebaseMessaging);
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* Called when the system determines that tokens need to be refreshed.
* This method is also called if Instance ID has been reset in which
* case, tokens and FCM topic subscriptions also need to be refreshed.
*
* Instance ID service will throttle the refresh event across all devices
* to control the rate of token updates on application servers.
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull kFIRInstanceIDTokenRefreshNotification
FIR_SWIFT_NAME(InstanceIDTokenRefresh);
#else
/**
* Called when the system determines that tokens need to be refreshed.
* This method is also called if Instance ID has been reset in which
* case, tokens and FCM topic subscriptions also need to be refreshed.
*
* Instance ID service will throttle the refresh event across all devices
* to control the rate of token updates on application servers.
*/
FOUNDATION_EXPORT NSString * __nonnull const kFIRInstanceIDTokenRefreshNotification
FIR_SWIFT_NAME(InstanceIDTokenRefreshNotification);
#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* @related FIRInstanceID
*
* The completion handler invoked when the InstanceID token returns. If
* the call fails we return the appropriate `error code` as described below.
*
* @param token The valid token as returned by InstanceID backend.
*
* @param error The error describing why generating a new token
* failed. See the error codes below for a more detailed
* description.
*/
typedef void(^FIRInstanceIDTokenHandler)( NSString * __nullable token, NSError * __nullable error)
FIR_SWIFT_NAME(InstanceIDTokenHandler);
/**
* @related FIRInstanceID
*
* The completion handler invoked when the InstanceID `deleteToken` returns. If
* the call fails we return the appropriate `error code` as described below
*
* @param error The error describing why deleting the token failed.
* See the error codes below for a more detailed description.
*/
typedef void(^FIRInstanceIDDeleteTokenHandler)(NSError * __nullable error)
FIR_SWIFT_NAME(InstanceIDDeleteTokenHandler);
/**
* @related FIRInstanceID
*
* The completion handler invoked when the app identity is created. If the
* identity wasn't created for some reason we return the appropriate error code.
*
* @param identity A valid identity for the app instance, nil if there was an error
* while creating an identity.
* @param error The error if fetching the identity fails else nil.
*/
typedef void(^FIRInstanceIDHandler)(NSString * __nullable identity, NSError * __nullable error)
FIR_SWIFT_NAME(InstanceIDHandler);
/**
* @related FIRInstanceID
*
* The completion handler invoked when the app identity and all the tokens associated
* with it are deleted. Returns a valid error object in case of failure else nil.
*
* @param error The error if deleting the identity and all the tokens associated with
* it fails else nil.
*/
typedef void(^FIRInstanceIDDeleteHandler)(NSError * __nullable error)
FIR_SWIFT_NAME(InstanceIDDeleteHandler);
/**
* @enum FIRInstanceIDError
*/
typedef NS_ENUM(NSUInteger, FIRInstanceIDError) {
// Http related errors.
/// Unknown error.
FIRInstanceIDErrorUnknown = 0,
/// Auth Error -- GCM couldn't validate request from this client.
FIRInstanceIDErrorAuthentication = 1,
/// NoAccess -- InstanceID service cannot be accessed.
FIRInstanceIDErrorNoAccess = 2,
/// Timeout -- Request to InstanceID backend timed out.
FIRInstanceIDErrorTimeout = 3,
/// Network -- No network available to reach the servers.
FIRInstanceIDErrorNetwork = 4,
/// OperationInProgress -- Another similar operation in progress,
/// bailing this one.
FIRInstanceIDErrorOperationInProgress = 5,
/// InvalidRequest -- Some parameters of the request were invalid.
FIRInstanceIDErrorInvalidRequest = 7,
} FIR_SWIFT_NAME(InstanceIDError);
/**
* The APNS token type for the app. If the token type is set to `UNKNOWN`
* InstanceID will implicitly try to figure out what the actual token type
* is from the provisioning profile.
*/
typedef NS_ENUM(NSInteger, FIRInstanceIDAPNSTokenType) {
/// Unknown token type.
FIRInstanceIDAPNSTokenTypeUnknown,
/// Sandbox token type.
FIRInstanceIDAPNSTokenTypeSandbox,
/// Production token type.
FIRInstanceIDAPNSTokenTypeProd,
} FIR_SWIFT_NAME(InstanceIDAPNSTokenType)
__deprecated_enum_msg("Use FIRMessaging's APNSToken property instead.");
/**
* Instance ID provides a unique identifier for each app instance and a mechanism
* to authenticate and authorize actions (for example, sending an FCM message).
*
* Instance ID is long lived but, may be reset if the device is not used for
* a long time or the Instance ID service detects a problem.
* If Instance ID is reset, the app will be notified via
* `kFIRInstanceIDTokenRefreshNotification`.
*
* If the Instance ID has become invalid, the app can request a new one and
* send it to the app server.
* To prove ownership of Instance ID and to allow servers to access data or
* services associated with the app, call
* `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`.
*/
FIR_SWIFT_NAME(InstanceID)
@interface FIRInstanceID : NSObject
/**
* FIRInstanceID.
*
* @return A shared instance of FIRInstanceID.
*/
+ (nonnull instancetype)instanceID FIR_SWIFT_NAME(instanceID());
/**
* Unavailable. Use +instanceID instead.
*/
- (nonnull instancetype)init __attribute__((unavailable("Use +instanceID instead.")));
/**
* Set APNS token for the application. This APNS token will be used to register
* with Firebase Messaging using `token` or
* `tokenWithAuthorizedEntity:scope:options:handler`. If the token type is set to
* `FIRInstanceIDAPNSTokenTypeUnknown` InstanceID will read the provisioning profile
* to find out the token type.
*
* @param token The APNS token for the application.
* @param type The APNS token type for the above token.
*/
- (void)setAPNSToken:(nonnull NSData *)token
type:(FIRInstanceIDAPNSTokenType)type
__deprecated_msg("Use FIRMessaging's APNSToken property instead.");
#pragma mark - Tokens
/**
* Returns a Firebase Messaging scoped token for the firebase app.
*
* @return Null Returns null if the device has not yet been registerd with
* Firebase Message else returns a valid token.
*/
- (nullable NSString *)token;
/**
* Returns a token that authorizes an Entity (example: cloud service) to perform
* an action on behalf of the application identified by Instance ID.
*
* This is similar to an OAuth2 token except, it applies to the
* application instance instead of a user.
*
* This is an asynchronous call. If the token fetching fails for some reason
* we invoke the completion callback with nil `token` and the appropriate
* error.
*
* Note, you can only have one `token` or `deleteToken` call for a given
* authorizedEntity and scope at any point of time. Making another such call with the
* same authorizedEntity and scope before the last one finishes will result in an
* error with code `OperationInProgress`.
*
* @see FIRInstanceID deleteTokenWithAuthorizedEntity:scope:handler:
*
* @param authorizedEntity Entity authorized by the token.
* @param scope Action authorized for authorizedEntity.
* @param options The extra options to be sent with your token request. The
* value for the `apns_token` should be the NSData object
* passed to the UIApplicationDelegate's
* `didRegisterForRemoteNotificationsWithDeviceToken` method.
* The value for `apns_sandbox` should be a boolean (or an
* NSNumber representing a BOOL in Objective C) set to true if
* your app is a debug build, which means that the APNs
* device token is for the sandbox environment. It should be
* set to false otherwise.
* @param handler The callback handler which is invoked when the token is
* successfully fetched. In case of success a valid `token` and
* `nil` error are returned. In case of any error the `token`
* is nil and a valid `error` is returned. The valid error
* codes have been documented above.
*/
- (void)tokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity
scope:(nonnull NSString *)scope
options:(nullable NSDictionary *)options
handler:(nonnull FIRInstanceIDTokenHandler)handler;
/**
* Revokes access to a scope (action) for an entity previously
* authorized by `[FIRInstanceID tokenWithAuthorizedEntity:scope:options:handler]`.
*
* This is an asynchronous call. Call this on the main thread since InstanceID lib
* is not thread safe. In case token deletion fails for some reason we invoke the
* `handler` callback passed in with the appropriate error code.
*
* Note, you can only have one `token` or `deleteToken` call for a given
* authorizedEntity and scope at a point of time. Making another such call with the
* same authorizedEntity and scope before the last one finishes will result in an error
* with code `OperationInProgress`.
*
* @param authorizedEntity Entity that must no longer have access.
* @param scope Action that entity is no longer authorized to perform.
* @param handler The handler that is invoked once the unsubscribe call ends.
* In case of error an appropriate error object is returned
* else error is nil.
*/
- (void)deleteTokenWithAuthorizedEntity:(nonnull NSString *)authorizedEntity
scope:(nonnull NSString *)scope
handler:(nonnull FIRInstanceIDDeleteTokenHandler)handler;
#pragma mark - Identity
/**
* Asynchronously fetch a stable identifier that uniquely identifies the app
* instance. If the identifier has been revoked or has expired, this method will
* return a new identifier.
*
*
* @param handler The handler to invoke once the identifier has been fetched.
* In case of error an appropriate error object is returned else
* a valid identifier is returned and a valid identifier for the
* application instance.
*/
- (void)getIDWithHandler:(nonnull FIRInstanceIDHandler)handler
FIR_SWIFT_NAME(getID(handler:));
/**
* Resets Instance ID and revokes all tokens.
*/
- (void)deleteIDWithHandler:(nonnull FIRInstanceIDDeleteHandler)handler
FIR_SWIFT_NAME(deleteID(handler:));
@end

View File

@ -1 +0,0 @@
#import "FIRInstanceID.h"

View File

@ -1,5 +0,0 @@
framework module FirebaseInstanceID {
umbrella header "FirebaseInstanceID.h"
export *
module * { export *}
link "z"}

View File

@ -1,492 +0,0 @@
/*
* Copyright 2017 Google
*
* 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.
*/
#import <Foundation/Foundation.h>
// NS_SWIFT_NAME can only translate factory methods before the iOS 9.3 SDK.
// Wrap it in our own macro if it's a non-compatible SDK.
#ifndef FIR_SWIFT_NAME
#ifdef __IPHONE_9_3
#define FIR_SWIFT_NAME(X) NS_SWIFT_NAME(X)
#else
#define FIR_SWIFT_NAME(X) // Intentionally blank.
#endif // #ifdef __IPHONE_9_3
#endif // #ifndef FIR_SWIFT_NAME
/**
* @related FIRMessaging
*
* The completion handler invoked when the registration token returns.
* If the call fails we return the appropriate `error code`, described by
* `FIRMessagingError`.
*
* @param FCMToken The valid registration token returned by FCM.
* @param error The error describing why a token request failed. The error code
* will match a value from the FIRMessagingError enumeration.
*/
typedef void(^FIRMessagingFCMTokenFetchCompletion)(NSString * _Nullable FCMToken,
NSError * _Nullable error)
FIR_SWIFT_NAME(MessagingFCMTokenFetchCompletion);
/**
* @related FIRMessaging
*
* The completion handler invoked when the registration token deletion request is
* completed. If the call fails we return the appropriate `error code`, described
* by `FIRMessagingError`.
*
* @param error The error describing why a token deletion failed. The error code
* will match a value from the FIRMessagingError enumeration.
*/
typedef void(^FIRMessagingDeleteFCMTokenCompletion)(NSError * _Nullable error)
FIR_SWIFT_NAME(MessagingDeleteFCMTokenCompletion);
/**
* The completion handler invoked once the data connection with FIRMessaging is
* established. The data connection is used to send a continous stream of
* data and all the FIRMessaging data notifications arrive through this connection.
* Once the connection is established we invoke the callback with `nil` error.
* Correspondingly if we get an error while trying to establish a connection
* we invoke the handler with an appropriate error object and do an
* exponential backoff to try and connect again unless successful.
*
* @param error The error object if any describing why the data connection
* to FIRMessaging failed.
*/
typedef void(^FIRMessagingConnectCompletion)(NSError * __nullable error)
FIR_SWIFT_NAME(MessagingConnectCompletion)
__deprecated_msg("Please listen for the FIRMessagingConnectionStateChangedNotification "
"NSNotification instead.");
#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* Notification sent when the upstream message has been delivered
* successfully to the server. The notification object will be the messageID
* of the successfully delivered message.
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingSendSuccessNotification
FIR_SWIFT_NAME(MessagingSendSuccess);
/**
* Notification sent when the upstream message was failed to be sent to the
* server. The notification object will be the messageID of the failed
* message. The userInfo dictionary will contain the relevant error
* information for the failure.
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingSendErrorNotification
FIR_SWIFT_NAME(MessagingSendError);
/**
* Notification sent when the Firebase messaging server deletes pending
* messages due to exceeded storage limits. This may occur, for example, when
* the device cannot be reached for an extended period of time.
*
* It is recommended to retrieve any missing messages directly from the
* server.
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingMessagesDeletedNotification
FIR_SWIFT_NAME(MessagingMessagesDeleted);
/**
* Notification sent when Firebase Messaging establishes or disconnects from
* an FCM socket connection. You can query the connection state in this
* notification by checking the `isDirectChannelEstablished` property of FIRMessaging.
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull FIRMessagingConnectionStateChangedNotification
FIR_SWIFT_NAME(MessagingConnectionStateChanged);
/**
* Notification sent when the FCM registration token has been refreshed. You can also
* receive the FCM token via the FIRMessagingDelegate method
* `-messaging:didRefreshRegistrationToken:`
*/
FOUNDATION_EXPORT const NSNotificationName __nonnull
FIRMessagingRegistrationTokenRefreshedNotification
FIR_SWIFT_NAME(MessagingRegistrationTokenRefreshed);
#else
/**
* Notification sent when the upstream message has been delivered
* successfully to the server. The notification object will be the messageID
* of the successfully delivered message.
*/
FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendSuccessNotification
FIR_SWIFT_NAME(MessagingSendSuccessNotification);
/**
* Notification sent when the upstream message was failed to be sent to the
* server. The notification object will be the messageID of the failed
* message. The userInfo dictionary will contain the relevant error
* information for the failure.
*/
FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingSendErrorNotification
FIR_SWIFT_NAME(MessagingSendErrorNotification);
/**
* Notification sent when the Firebase messaging server deletes pending
* messages due to exceeded storage limits. This may occur, for example, when
* the device cannot be reached for an extended period of time.
*
* It is recommended to retrieve any missing messages directly from the
* server.
*/
FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingMessagesDeletedNotification
FIR_SWIFT_NAME(MessagingMessagesDeletedNotification);
/**
* Notification sent when Firebase Messaging establishes or disconnects from
* an FCM socket connection. You can query the connection state in this
* notification by checking the `isDirectChannelEstablished` property of FIRMessaging.
*/
FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingConnectionStateChangedNotification
FIR_SWIFT_NAME(MessagingConnectionStateChangedNotification);
/**
* Notification sent when the FCM registration token has been refreshed. You can also
* receive the FCM token via the FIRMessagingDelegate method
* `-messaging:didRefreshRegistrationToken:`
*/
FOUNDATION_EXPORT NSString * __nonnull const FIRMessagingRegistrationTokenRefreshedNotification
FIR_SWIFT_NAME(MessagingRegistrationTokenRefreshedNotification);
#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
/**
* @enum FIRMessagingError
*/
typedef NS_ENUM(NSUInteger, FIRMessagingError) {
/// Unknown error.
FIRMessagingErrorUnknown = 0,
/// FIRMessaging couldn't validate request from this client.
FIRMessagingErrorAuthentication = 1,
/// InstanceID service cannot be accessed.
FIRMessagingErrorNoAccess = 2,
/// Request to InstanceID backend timed out.
FIRMessagingErrorTimeout = 3,
/// No network available to reach the servers.
FIRMessagingErrorNetwork = 4,
/// Another similar operation in progress, bailing this one.
FIRMessagingErrorOperationInProgress = 5,
/// Some parameters of the request were invalid.
FIRMessagingErrorInvalidRequest = 7,
} FIR_SWIFT_NAME(MessagingError);
/// Status for the downstream message received by the app.
typedef NS_ENUM(NSInteger, FIRMessagingMessageStatus) {
/// Unknown status.
FIRMessagingMessageStatusUnknown,
/// New downstream message received by the app.
FIRMessagingMessageStatusNew,
} FIR_SWIFT_NAME(MessagingMessageStatus);
/**
* The APNS token type for the app. If the token type is set to `UNKNOWN`
* Firebase Messaging will implicitly try to figure out what the actual token type
* is from the provisioning profile.
* Unless you really need to specify the type, you should use the `APNSToken`
* property instead.
*/
typedef NS_ENUM(NSInteger, FIRMessagingAPNSTokenType) {
/// Unknown token type.
FIRMessagingAPNSTokenTypeUnknown,
/// Sandbox token type.
FIRMessagingAPNSTokenTypeSandbox,
/// Production token type.
FIRMessagingAPNSTokenTypeProd,
} FIR_SWIFT_NAME(MessagingAPNSTokenType);
/// Information about a downstream message received by the app.
FIR_SWIFT_NAME(MessagingMessageInfo)
@interface FIRMessagingMessageInfo : NSObject
/// The status of the downstream message
@property(nonatomic, readonly, assign) FIRMessagingMessageStatus status;
@end
/**
* A remote data message received by the app via FCM (not just the APNs interface).
*
* This is only for devices running iOS 10 or above. To support devices running iOS 9 or below, use
* the local and remote notifications handlers defined in UIApplicationDelegate protocol.
*/
FIR_SWIFT_NAME(MessagingRemoteMessage)
@interface FIRMessagingRemoteMessage : NSObject
/// The downstream message received by the application.
@property(nonatomic, readonly, strong, nonnull) NSDictionary *appData;
@end
@class FIRMessaging;
/**
* A protocol to handle events from FCM for devices running iOS 10 or above.
*
* To support devices running iOS 9 or below, use the local and remote notifications handlers
* defined in UIApplicationDelegate protocol.
*/
FIR_SWIFT_NAME(MessagingDelegate)
@protocol FIRMessagingDelegate <NSObject>
/// This method will be called whenever FCM receives a new, default FCM token for your
/// Firebase project's Sender ID.
/// You can send this token to your application server to send notifications to this device.
- (void)messaging:(nonnull FIRMessaging *)messaging
didRefreshRegistrationToken:(nonnull NSString *)fcmToken
FIR_SWIFT_NAME(messaging(_:didRefreshRegistrationToken:));
@optional
/// This method is called on iOS 10 devices to handle data messages received via FCM through its
/// direct channel (not via APNS). For iOS 9 and below, the FCM data message is delivered via the
/// UIApplicationDelegate's -application:didReceiveRemoteNotification: method.
- (void)messaging:(nonnull FIRMessaging *)messaging
didReceiveMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage
FIR_SWIFT_NAME(messaging(_:didReceive:))
__IOS_AVAILABLE(10.0);
/// The callback to handle data message received via FCM for devices running iOS 10 or above.
- (void)applicationReceivedRemoteMessage:(nonnull FIRMessagingRemoteMessage *)remoteMessage
FIR_SWIFT_NAME(application(received:))
__deprecated_msg("Use FIRMessagingDelegates -messaging:didReceiveMessage:");
@end
/**
* Firebase Messaging lets you reliably deliver messages at no cost.
*
* To send or receive messages, the app must get a
* registration token from FIRInstanceID. This token authorizes an
* app server to send messages to an app instance.
*
* In order to receive FIRMessaging messages, declare `application:didReceiveRemoteNotification:`.
*/
FIR_SWIFT_NAME(Messaging)
@interface FIRMessaging : NSObject
/**
* Delegate to handle FCM token refreshes, and remote data messages received via FCM for devices
* running iOS 10 or above.
*/
@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> delegate;
/**
* Delegate to handle remote data messages received via FCM for devices running iOS 10 or above.
*/
@property(nonatomic, weak, nullable) id<FIRMessagingDelegate> remoteMessageDelegate
__deprecated_msg("Use 'delegate' property");
/**
* When set to `YES`, Firebase Messaging will automatically establish a socket-based, direct
* channel to the FCM server. Enable this only if you are sending upstream messages or
* receiving non-APNS, data-only messages in foregrounded apps.
* Default is `NO`.
*/
@property(nonatomic) BOOL shouldEstablishDirectChannel;
/**
* Returns `YES` if the direct channel to the FCM server is active, and `NO` otherwise.
*/
@property(nonatomic, readonly) BOOL isDirectChannelEstablished;
/**
* FIRMessaging
*
* @return An instance of FIRMessaging.
*/
+ (nonnull instancetype)messaging FIR_SWIFT_NAME(messaging());
/**
* Unavailable. Use +messaging instead.
*/
- (nonnull instancetype)init __attribute__((unavailable("Use +messaging instead.")));
#pragma mark - APNS
/**
* This property is used to set the APNS Token received by the application delegate.
*
* FIRMessaging uses method swizzling to ensure that the APNS token is set
* automatically. However, if you have disabled swizzling by setting
* `FirebaseAppDelegateProxyEnabled` to `NO` in your app's
* Info.plist, you should manually set the APNS token in your application
* delegate's `-application:didRegisterForRemoteNotificationsWithDeviceToken:`
* method.
*
* If you would like to set the type of the APNS token, rather than relying on
* automatic detection, see: `-setAPNSToken:type:`.
*/
@property(nonatomic, copy, nullable) NSData *APNSToken FIR_SWIFT_NAME(apnsToken);
/**
* Set APNS token for the application. This APNS token will be used to register
* with Firebase Messaging using `FCMToken` or
* `tokenWithAuthorizedEntity:scope:options:handler`.
*
* @param apnsToken The APNS token for the application.
* @param type The type of APNS token. Debug builds should use
* FIRMessagingAPNSTokenTypeSandbox. Alternatively, you can supply
* FIRMessagingAPNSTokenTypeUnknown to have the type automatically
* detected based on your provisioning profile.
*/
- (void)setAPNSToken:(nonnull NSData *)apnsToken type:(FIRMessagingAPNSTokenType)type;
#pragma mark - FCM Tokens
/**
* The FCM token is used to identify this device so that FCM can send notifications to it.
* It is associated with your APNS token when the APNS token is supplied, so that sending
* messages to the FCM token will be delivered over APNS.
*
* The FCM token is sometimes refreshed automatically. You can be notified of these changes
* via the FIRMessagingDelegate method `-message:didRefreshRegistrationToken:`, or by
* listening for the `FIRMessagingRegistrationTokenRefreshedNotification` notification.
*
* Once you have an FCM token, you should send it to your application server, so it can use
* the FCM token to send notifications to your device.
*/
@property(nonatomic, readonly, nullable) NSString *FCMToken FIR_SWIFT_NAME(fcmToken);
/**
* Retrieves an FCM registration token for a particular Sender ID. This can be used to allow
* multiple senders to send notifications to the same device. By providing a different Sender
* ID than your default when fetching a token, you can create a new FCM token which you can
* give to a different sender. Both tokens will deliver notifications to your device, and you
* can revoke a token when you need to.
*
* This registration token is not cached by FIRMessaging. FIRMessaging should have an APNS
* token set before calling this to ensure that notifications can be delivered via APNS using
* this FCM token. You may re-retrieve the FCM token once you have the APNS token set, to
* associate it with the FCM token. The default FCM token is automatically associated with
* the APNS token, if the APNS token data is available.
*
* @param senderID The Sender ID for a particular Firebase project.
* @param completion The completion handler to handle the token request.
*/
- (void)retrieveFCMTokenForSenderID:(nonnull NSString *)senderID
completion:(nonnull FIRMessagingFCMTokenFetchCompletion)completion
FIR_SWIFT_NAME(retrieveFCMToken(forSenderID:completion:));
/**
* Invalidates an FCM token for a particular Sender ID. That Sender ID cannot no longer send
* notifications to that FCM token.
*
* @param senderID The senderID for a particular Firebase project.
* @param completion The completion handler to handle the token deletion.
*/
- (void)deleteFCMTokenForSenderID:(nonnull NSString *)senderID
completion:(nonnull FIRMessagingDeleteFCMTokenCompletion)completion
FIR_SWIFT_NAME(deleteFCMToken(forSenderID:completion:));
#pragma mark - Connect
/**
* Create a FIRMessaging data connection which will be used to send the data notifications
* sent by your server. It will also be used to send ACKS and other messages based
* on the FIRMessaging ACKS and other messages based on the FIRMessaging protocol.
*
*
* @param handler The handler to be invoked once the connection is established.
* If the connection fails we invoke the handler with an
* appropriate error code letting you know why it failed. At
* the same time, FIRMessaging performs exponential backoff to retry
* establishing a connection and invoke the handler when successful.
*/
- (void)connectWithCompletion:(nonnull FIRMessagingConnectCompletion)handler
FIR_SWIFT_NAME(connect(handler:))
__deprecated_msg("Please use the shouldEstablishDirectChannel property instead.");
/**
* Disconnect the current FIRMessaging data connection. This stops any attempts to
* connect to FIRMessaging. Calling this on an already disconnected client is a no-op.
*
* Call this before `teardown` when your app is going to the background.
* Since the FIRMessaging connection won't be allowed to live when in the background, it is
* prudent to close the connection.
*/
- (void)disconnect
__deprecated_msg("Please use the shouldEstablishDirectChannel property instead.");
#pragma mark - Topics
/**
* Asynchronously subscribes to a topic.
*
* @param topic The name of the topic, for example, @"sports".
*/
- (void)subscribeToTopic:(nonnull NSString *)topic FIR_SWIFT_NAME(subscribe(toTopic:));
/**
* Asynchronously unsubscribe from a topic.
*
* @param topic The name of the topic, for example @"sports".
*/
- (void)unsubscribeFromTopic:(nonnull NSString *)topic FIR_SWIFT_NAME(unsubscribe(fromTopic:));
#pragma mark - Upstream
/**
* Sends an upstream ("device to cloud") message.
*
* The message is queued if we don't have an active connection.
* You can only use the upstream feature if your FCM implementation
* uses the XMPP server protocol.
*
* @param message Key/Value pairs to be sent. Values must be String, any
* other type will be ignored.
* @param receiver A string identifying the receiver of the message. For FCM
* project IDs the value is `SENDER_ID@gcm.googleapis.com`.
* @param messageID The ID of the message. This is generated by the application. It
* must be unique for each message generated by this application.
* It allows error callbacks and debugging, to uniquely identify
* each message.
* @param ttl The time to live for the message. In case we aren't able to
* send the message before the TTL expires we will send you a
* callback. If 0, we'll attempt to send immediately and return
* an error if we're not connected. Otherwise, the message will
* be queued. As for server-side messages, we don't return an error
* if the message has been dropped because of TTL; this can happen
* on the server side, and it would require extra communication.
*/
- (void)sendMessage:(nonnull NSDictionary *)message
to:(nonnull NSString *)receiver
withMessageID:(nonnull NSString *)messageID
timeToLive:(int64_t)ttl;
#pragma mark - Analytics
/**
* Use this to track message delivery and analytics for messages, typically
* when you receive a notification in `application:didReceiveRemoteNotification:`.
* However, you only need to call this if you set the `FirebaseAppDelegateProxyEnabled`
* flag to `NO` in your Info.plist. If `FirebaseAppDelegateProxyEnabled` is either missing
* or set to `YES` in your Info.plist, the library will call this automatically.
*
* @param message The downstream message received by the application.
*
* @return Information about the downstream message.
*/
- (nonnull FIRMessagingMessageInfo *)appDidReceiveMessage:(nonnull NSDictionary *)message;
@end

View File

@ -1 +0,0 @@
#import "FIRMessaging.h"

View File

@ -1,6 +0,0 @@
framework module FirebaseMessaging {
umbrella header "FirebaseMessaging.h"
export *
module * { export *}
link "sqlite3"
link "z"}

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AD_UNIT_ID_FOR_BANNER_TEST</key>
<string>ca-app-pub-3940256099942544/2934735716</string>
<key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key>
<string>ca-app-pub-3940256099942544/4411468910</string>
<key>CLIENT_ID</key>
<string>854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o</string>
<key>API_KEY</key>
<string>AIzaSyCwlaE5cnsT4rmGyOFxE39FlPVyKQ_2Mdo</string>
<key>GCM_SENDER_ID</key>
<string>854811651919</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)$(BUNDLE_ID_SUFFIX)</string>
<key>PROJECT_ID</key>
<string>status-react-app</string>
<key>STORAGE_BUCKET</key>
<string>status-react-app.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<true/>
<key>IS_ANALYTICS_ENABLED</key>
<false/>
<key>IS_APPINVITE_ENABLED</key>
<false/>
<key>IS_GCM_ENABLED</key>
<true/>
<key>FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED</key>
<true/>
<key>IS_SIGNIN_ENABLED</key>
<true/>
<key>GOOGLE_APP_ID</key>
<string>1:854811651919:ios:11ee7444ded8a00a</string>
<key>DATABASE_URL</key>
<string>https://status-react-app.firebaseio.com</string>
</dict>
</plist>

View File

@ -9,9 +9,6 @@ target 'StatusIm' do
# use_frameworks!
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
# Pods for StatusIm
pod 'Firebase/Core', '~> 5.5'
pod 'Firebase/Messaging', '~> 5.5'
pod 'React', :path => '../node_modules/react-native/'
pod 'React-Core', :path => '../node_modules/react-native/React'
pod 'React-DevSupport', :path => '../node_modules/react-native/React'

View File

@ -1,42 +1,6 @@
PODS:
- boost-for-react-native (1.63.0)
- Crashlytics (3.14.0):
- Fabric (~> 1.10.2)
- DoubleConversion (1.1.6)
- Fabric (1.10.2)
- Firebase/Core (5.20.2):
- Firebase/CoreOnly
- FirebaseAnalytics (= 5.8.1)
- Firebase/CoreOnly (5.20.2):
- FirebaseCore (= 5.4.1)
- Firebase/Messaging (5.20.2):
- Firebase/CoreOnly
- FirebaseMessaging (= 3.5.0)
- FirebaseAnalytics (5.8.1):
- FirebaseCore (~> 5.4)
- FirebaseInstanceID (~> 3.8)
- GoogleAppMeasurement (= 5.8.1)
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
- GoogleUtilities/MethodSwizzler (~> 5.2)
- GoogleUtilities/Network (~> 5.2)
- "GoogleUtilities/NSData+zlib (~> 5.2)"
- nanopb (~> 0.3)
- FirebaseAnalyticsInterop (1.4.0)
- FirebaseCore (5.4.1):
- GoogleUtilities/Environment (~> 5.2)
- GoogleUtilities/Logger (~> 5.2)
- FirebaseInstanceID (3.8.1):
- FirebaseCore (~> 5.2)
- GoogleUtilities/Environment (~> 5.2)
- GoogleUtilities/UserDefaults (~> 5.2)
- FirebaseMessaging (3.5.0):
- FirebaseAnalyticsInterop (~> 1.1)
- FirebaseCore (~> 5.2)
- FirebaseInstanceID (~> 3.6)
- GoogleUtilities/Environment (~> 5.3)
- GoogleUtilities/Reachability (~> 5.3)
- GoogleUtilities/UserDefaults (~> 5.3)
- Protobuf (~> 3.1)
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
@ -47,96 +11,67 @@ PODS:
- DoubleConversion
- glog
- glog (0.3.5)
- GoogleAppMeasurement (5.8.1):
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
- GoogleUtilities/MethodSwizzler (~> 5.2)
- GoogleUtilities/Network (~> 5.2)
- "GoogleUtilities/NSData+zlib (~> 5.2)"
- nanopb (~> 0.3)
- GoogleUtilities/AppDelegateSwizzler (5.8.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (5.8.0)
- GoogleUtilities/Logger (5.8.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (5.8.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (5.8.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (5.8.0)"
- GoogleUtilities/Reachability (5.8.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (5.8.0):
- GoogleUtilities/Logger
- nanopb (0.3.901):
- nanopb/decode (= 0.3.901)
- nanopb/encode (= 0.3.901)
- nanopb/decode (0.3.901)
- nanopb/encode (0.3.901)
- QBImagePickerController (3.4.0)
- React (0.60.6):
- React-Core (= 0.60.6)
- React-DevSupport (= 0.60.6)
- React-RCTActionSheet (= 0.60.6)
- React-RCTAnimation (= 0.60.6)
- React-RCTBlob (= 0.60.6)
- React-RCTImage (= 0.60.6)
- React-RCTLinking (= 0.60.6)
- React-RCTNetwork (= 0.60.6)
- React-RCTSettings (= 0.60.6)
- React-RCTText (= 0.60.6)
- React-RCTVibration (= 0.60.6)
- React-RCTWebSocket (= 0.60.6)
- React-Core (0.60.6):
- React (0.60.5):
- React-Core (= 0.60.5)
- React-DevSupport (= 0.60.5)
- React-RCTActionSheet (= 0.60.5)
- React-RCTAnimation (= 0.60.5)
- React-RCTBlob (= 0.60.5)
- React-RCTImage (= 0.60.5)
- React-RCTLinking (= 0.60.5)
- React-RCTNetwork (= 0.60.5)
- React-RCTSettings (= 0.60.5)
- React-RCTText (= 0.60.5)
- React-RCTVibration (= 0.60.5)
- React-RCTWebSocket (= 0.60.5)
- React-Core (0.60.5):
- Folly (= 2018.10.22.00)
- React-cxxreact (= 0.60.6)
- React-jsiexecutor (= 0.60.6)
- yoga (= 0.60.6.React)
- React-cxxreact (0.60.6):
- React-cxxreact (= 0.60.5)
- React-jsiexecutor (= 0.60.5)
- yoga (= 0.60.5.React)
- React-cxxreact (0.60.5):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsinspector (= 0.60.6)
- React-DevSupport (0.60.6):
- React-Core (= 0.60.6)
- React-RCTWebSocket (= 0.60.6)
- React-jsi (0.60.6):
- React-jsinspector (= 0.60.5)
- React-DevSupport (0.60.5):
- React-Core (= 0.60.5)
- React-RCTWebSocket (= 0.60.5)
- React-jsi (0.60.5):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsi/Default (= 0.60.6)
- React-jsi/Default (0.60.6):
- React-jsi/Default (= 0.60.5)
- React-jsi/Default (0.60.5):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-jsiexecutor (0.60.6):
- React-jsiexecutor (0.60.5):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-cxxreact (= 0.60.6)
- React-jsi (= 0.60.6)
- React-jsinspector (0.60.6)
- React-cxxreact (= 0.60.5)
- React-jsi (= 0.60.5)
- React-jsinspector (0.60.5)
- react-native-background-timer (2.1.1):
- React
- react-native-camera (3.6.0):
- react-native-camera (3.3.3):
- React
- react-native-camera/RCT (= 3.6.0)
- react-native-camera/RN (= 3.6.0)
- react-native-camera/RCT (3.6.0):
- react-native-camera/RCT (= 3.3.3)
- react-native-camera/RN (= 3.3.3)
- react-native-camera/RCT (3.3.3):
- React
- react-native-camera/RN (3.6.0):
- react-native-camera/RN (3.3.3):
- React
- react-native-image-resizer (1.0.0):
- React
- react-native-mail (4.0.0):
- React
- react-native-netinfo (4.4.0):
- react-native-netinfo (4.2.2):
- React
- react-native-shake (3.4.0):
- React
@ -146,43 +81,34 @@ PODS:
- React
- react-native-webview-bridge (0.33.17):
- React
- React-RCTActionSheet (0.60.6):
- React-Core (= 0.60.6)
- React-RCTAnimation (0.60.6):
- React-Core (= 0.60.6)
- React-RCTBlob (0.60.6):
- React-Core (= 0.60.6)
- React-RCTNetwork (= 0.60.6)
- React-RCTWebSocket (= 0.60.6)
- React-RCTImage (0.60.6):
- React-Core (= 0.60.6)
- React-RCTNetwork (= 0.60.6)
- React-RCTLinking (0.60.6):
- React-Core (= 0.60.6)
- React-RCTNetwork (0.60.6):
- React-Core (= 0.60.6)
- React-RCTSettings (0.60.6):
- React-Core (= 0.60.6)
- React-RCTText (0.60.6):
- React-Core (= 0.60.6)
- React-RCTVibration (0.60.6):
- React-Core (= 0.60.6)
- React-RCTWebSocket (0.60.6):
- React-Core (= 0.60.6)
- RNFirebase (5.5.6):
- Firebase/Core
- React
- RNFirebase/Crashlytics (= 5.5.6)
- RNFirebase/Crashlytics (5.5.6):
- Crashlytics
- Fabric
- Firebase/Core
- React
- React-RCTActionSheet (0.60.5):
- React-Core (= 0.60.5)
- React-RCTAnimation (0.60.5):
- React-Core (= 0.60.5)
- React-RCTBlob (0.60.5):
- React-Core (= 0.60.5)
- React-RCTNetwork (= 0.60.5)
- React-RCTWebSocket (= 0.60.5)
- React-RCTImage (0.60.5):
- React-Core (= 0.60.5)
- React-RCTNetwork (= 0.60.5)
- React-RCTLinking (0.60.5):
- React-Core (= 0.60.5)
- React-RCTNetwork (0.60.5):
- React-Core (= 0.60.5)
- React-RCTSettings (0.60.5):
- React-Core (= 0.60.5)
- React-RCTText (0.60.5):
- React-Core (= 0.60.5)
- React-RCTVibration (0.60.5):
- React-Core (= 0.60.5)
- React-RCTWebSocket (0.60.5):
- React-Core (= 0.60.5)
- RNFS (2.14.1):
- React
- RNGestureHandler (1.4.1):
- RNGestureHandler (1.3.0):
- React
- RNImageCropPicker (0.25.3):
- RNImageCropPicker (0.25.0):
- QBImagePickerController
- React-Core
- React-RCTImage
@ -191,9 +117,9 @@ PODS:
- React
- RNLanguages (3.0.2):
- React
- RNScreens (1.0.0-alpha.23):
- RNScreens (1.0.0-alpha.22):
- React
- RNSVG (9.11.1):
- RNSVG (9.8.4):
- React
- RSKImageCropper (2.2.3)
- SQLCipher (3.4.2):
@ -204,12 +130,10 @@ PODS:
- SSZipArchive (2.2.2)
- TouchID (4.4.1):
- React
- yoga (0.60.6.React)
- yoga (0.60.5.React)
DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- Firebase/Core (~> 5.5)
- Firebase/Messaging (~> 5.5)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- React (from `../node_modules/react-native/`)
@ -238,7 +162,6 @@ DEPENDENCIES:
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- React-RCTWebSocket (from `../node_modules/react-native/Libraries/WebSocket`)
- RNFirebase (from `../node_modules/react-native-firebase/ios`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
@ -252,19 +175,8 @@ DEPENDENCIES:
- yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
https://github.com/CocoaPods/Specs.git:
- boost-for-react-native
- Crashlytics
- Fabric
- Firebase
- FirebaseAnalytics
- FirebaseAnalyticsInterop
- FirebaseCore
- FirebaseInstanceID
- FirebaseMessaging
- GoogleAppMeasurement
- GoogleUtilities
- nanopb
- QBImagePickerController
- RSKImageCropper
- SQLCipher
@ -329,8 +241,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/Vibration"
React-RCTWebSocket:
:path: "../node_modules/react-native/Libraries/WebSocket"
RNFirebase:
:path: "../node_modules/react-native-firebase/ios"
RNFS:
:path: "../node_modules/react-native-fs"
RNGestureHandler:
@ -352,61 +262,49 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74
Firebase: 0c8cf33f266410c61ab3e2265cfa412200351d9c
FirebaseAnalytics: ece1aa57a4f43c64d53a648b5a5e05151aae947b
FirebaseAnalyticsInterop: d48b6ab67bcf016a05e55b71fc39c61c0cb6b7f3
FirebaseCore: f1a9a8be1aee4bf71a2fc0f4096df6788bdfda61
FirebaseInstanceID: a122b0c258720cf250551bb2bedf48c699f80d90
FirebaseMessaging: 4235f949ce1c4e827aeb19705ba5c53f9b85aa10
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 7b113d8578aa09b57aa5945dd002bc37d0ab4fb5
GoogleAppMeasurement: ffe513e90551844a739e7bcbb1d2aca1c28a4338
GoogleUtilities: 04fce34bcd5620c1ee76fb79172105c74a4df335
nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022
React: c438ccc7e14e86d4702bb92d7e262f549ffaa995
React-Core: c76495f5c14e73c0f803b89c3fa83f804da61bd6
React-cxxreact: f64bc64cf4682d6ea5a064f6017da72482858682
React-DevSupport: 30336bca00f72681eac995d21a31b963e7d5cfec
React-jsi: 40f467ff088c811c6630acccb4aea57ea7ccb1b5
React-jsiexecutor: e4b4717060a0cd8d0270323b5655a68c95432efd
React-jsinspector: 044105eea064aec81adc5e4d777a8f6589e7d094
react-native-background-timer: bb7a98c8e97fc7c290de2d423dd09ddb73dcbcbb
react-native-camera: 9c50d7def800895e7991ccda6203929553ceec9c
react-native-image-resizer: 04a3409e7d4ad646c4468671c69dec490def139c
react-native-mail: ff4aba592530d80ac96eea6c1ca03114b84d630a
react-native-netinfo: a91b5cf92ed3ada997cfe2bf067633386eb19fd8
react-native-shake: e9d1368d6f0ec7e48c8afc91e379b81006b9ba42
react-native-splash-screen: a49be22f0f6648b8416f3bd28258645eeaa5b42b
react-native-webview: ad9581723f4d401c22cb3a371811d4dc9310df56
react-native-webview-bridge: c712d20bbe7e2a2fabdd5d8ccdfec5e704455763
React-RCTActionSheet: 08864c609d9f959abf3d51fdd93f8bc6e91f21eb
React-RCTAnimation: a4547e9fac2627ded3df9d302f5558b475faf819
React-RCTBlob: 62d5c263a2adb8f7a2cafd601beba18a2d99cbbb
React-RCTImage: 963859de2b05d2037d1b7842cdbddc8d7f3a2f3b
React-RCTLinking: 5998a7db9a6156ed112b006d01f76b2d1cc83d98
React-RCTNetwork: 0b676e8194f3f893db813007d37e37e9820173a3
React-RCTSettings: fdd7606f1b6050eced69fc6046d5db6768aefd57
React-RCTText: 36c0532feb5521cb295ba80e7e44b70cf1c36fc7
React-RCTVibration: dabb8d59bb47e1d9124b3f77bfdc1b33d42b0a74
React-RCTWebSocket: 2e7f6e98fd6d2bf447d145e499c3a235cc13e350
RNFirebase: ca408d6bee0ca9383bd0cfe84f40b01370b8ad4d
RNFS: 6a2bfb5d0b14cf0ad72667f76202358abba4aacf
RNGestureHandler: 311e3b1cef021a7c9ef31e97e7dc31970cc6288d
RNImageCropPicker: c406db73f02f11bf3a887f856ff04ee50af173f4
RNKeychain: 627c6095cef215dd3d9804a9a9cf45ab96aa3997
RNLanguages: e3ae05ef105937645218272429dac0c3f7633451
RNScreens: 354046589421edc3d83d5c6212475bf1fb9a731d
RNSVG: 2e097b92aaa6d4e0f354fd7c49cbf3b17f8b3920
React: 53c53c4d99097af47cf60594b8706b4e3321e722
React-Core: ba421f6b4f4cbe2fb17c0b6fc675f87622e78a64
React-cxxreact: 8384287780c4999351ad9b6e7a149d9ed10a2395
React-DevSupport: 197fb409737cff2c4f9986e77c220d7452cb9f9f
React-jsi: 4d8c9efb6312a9725b18d6fc818ffc103f60fec2
React-jsiexecutor: 90ad2f9db09513fc763bc757fdc3c4ff8bde2a30
React-jsinspector: e08662d1bf5b129a3d556eb9ea343a3f40353ae4
react-native-background-timer: 1b6e6b4e10f1b74c367a1fdc3c72b67c619b222b
react-native-camera: 3050fa68d12e6abdc0bfdaf0e80f4acd45268454
react-native-image-resizer: 4516052af6ae0248caf4ccf356caecefe60072d7
react-native-mail: 7e37dfbe93ff0d4c7df346b738854dbed533e86f
react-native-netinfo: 2bb2e5094edcfecfb340a85053608526cb20f185
react-native-shake: de052eaa3eadc4a326b8ddd7ac80c06e8d84528c
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-webview: 0658813bcc4b6c22f3cbb035a2227aa896a8cbc0
react-native-webview-bridge: 3023f6b0e84cdf8e4a96511d2b04e73b038f95f0
React-RCTActionSheet: b0f1ea83f4bf75fb966eae9bfc47b78c8d3efd90
React-RCTAnimation: 359ba1b5690b1e87cc173558a78e82d35919333e
React-RCTBlob: 5e2b55f76e9a1c7ae52b826923502ddc3238df24
React-RCTImage: f5f1c50922164e89bdda67bcd0153952a5cfe719
React-RCTLinking: d0ecbd791e9ddddc41fa1f66b0255de90e8ee1e9
React-RCTNetwork: e26946300b0ab7bb6c4a6348090e93fa21f33a9d
React-RCTSettings: d0d37cb521b7470c998595a44f05847777cc3f42
React-RCTText: b074d89033583d4f2eb5faf7ea2db3a13c7553a2
React-RCTVibration: 2105b2e0e2b66a6408fc69a46c8a7fb5b2fdade0
React-RCTWebSocket: cd932a16b7214898b6b7f788c8bddb3637246ac4
RNFS: a8fbe7060fa49157d819466404794ad9c58e58cf
RNGestureHandler: 5329a942fce3d41c68b84c2c2276ce06a696d8b0
RNImageCropPicker: 0a731d984e64ee4c28bddaa7ce52262e4b80979f
RNKeychain: 216f37338fcb9e5c3a2530f1e3295f737a690cb1
RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e
RNScreens: 720a9e6968beb73e8196239801e887d8401f86ed
RNSVG: a78b4c581e33a1bb72968997d167afabf72b05dc
RSKImageCropper: a446db0e8444a036b34f3c43db01b2373baa4b2a
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: fa16b8cc4cdeceb698e5e5d9f67e9558532fbf23
TouchID: b0640fedb86fa2db2fe1df15b61594ad49e76288
yoga: 88c514f310aff89b94a14c5fbf44b95735af0cb7
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
yoga: 312528f5bbbba37b4dcea5ef00e8b4033fdd9411
PODFILE CHECKSUM: eada5ca1782f4a5407527b6bb8f04e5fe4ab1e49
PODFILE CHECKSUM: 7b53149061c27253efb0c63580a220c0e836aad4
COCOAPODS: 1.5.3
COCOAPODS: 1.8.4

View File

@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* StatusImTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* StatusImTests.m */; };
0C13D5C5E4EB4D518C95FCD0 /* Inter-ThinItalic-BETA.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8077F6B47C6C491A9351E836 /* Inter-ThinItalic-BETA.otf */; };
@ -23,9 +24,7 @@
81C6E6AE0AA739BE9D87C1D0 /* libPods-StatusImTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC1CBCFE6C906043D6CCEEE1 /* libPods-StatusImTests.a */; };
8391E8E0E93C41A98AAA6631 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = A4F2BBE8D4DD4140A6CCAC39 /* Inter-SemiBoldItalic.otf */; };
8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 101A4045637A2ADF57D28EF5 /* libPods-StatusIm.a */; };
925C1F4C1F7B73B20063DFA0 /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F451F7B73B20063DFA0 /* nanopb.framework */; };
92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */; };
983F077E2119C9D2004133ED /* message.wav in Resources */ = {isa = PBXBuildFile; fileRef = 983F07442119C9D2004133ED /* message.wav */; };
925C1F4C1F7B73B20063DFA0 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; };
B190FBFB6A9B43EAAF396CD7 /* Inter-BlackItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2006E199700F423E84885CD9 /* Inter-BlackItalic.otf */; };
B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FC1DE7195700D694FF /* Social.framework */; };
@ -112,8 +111,6 @@
2028DFF81D4275B600227DCD /* SF-UI-Display-Thin.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Thin.otf"; sourceTree = "<group>"; };
38A44830EC5708E89387F641 /* Pods-StatusIm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm.release.xcconfig"; sourceTree = "<group>"; };
439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTStatus.xcodeproj; path = "../modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj"; sourceTree = "<group>"; };
475D1FCD20B7415300879A77 /* libFirebaseCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libFirebaseCore.a; sourceTree = BUILT_PRODUCTS_DIR; };
475D1FCE20B7415300879A77 /* libFirebaseMessaging.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libFirebaseMessaging.a; sourceTree = BUILT_PRODUCTS_DIR; };
4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
4E586E1B0E544F64AA9F5BD1 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
6864A92FD6844B928C52F5C1 /* Inter-Light-BETA.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Light-BETA.otf"; path = "../resources/fonts/Inter-Light-BETA.otf"; sourceTree = "<group>"; };
@ -123,14 +120,6 @@
8077F6B47C6C491A9351E836 /* Inter-ThinItalic-BETA.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ThinItalic-BETA.otf"; path = "../resources/fonts/Inter-ThinItalic-BETA.otf"; sourceTree = "<group>"; };
8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
922C4CA61F4D5F8B0033C753 /* StatusIm.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = StatusIm.entitlements; path = StatusIm/StatusIm.entitlements; sourceTree = "<group>"; };
925C1F401F7B73B20063DFA0 /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCore.framework; sourceTree = "<group>"; };
925C1F411F7B73B20063DFA0 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = "<group>"; };
925C1F421F7B73B20063DFA0 /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseInstanceID.framework; sourceTree = "<group>"; };
925C1F431F7B73B20063DFA0 /* FirebaseNanoPB.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseNanoPB.framework; sourceTree = "<group>"; };
925C1F451F7B73B20063DFA0 /* nanopb.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = nanopb.framework; sourceTree = "<group>"; };
925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMessaging.framework; sourceTree = "<group>"; };
92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
983F07442119C9D2004133ED /* message.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = message.wav; path = ../android/app/src/main/res/raw/message.wav; sourceTree = "<group>"; };
9E0B01A01DDC5DA7002B0359 /* SF-UI-Text-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Light.otf"; sourceTree = "<group>"; };
9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWKWebView.xcodeproj; path = "../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView.xcodeproj"; sourceTree = "<group>"; };
9ED2F45C1D9D52C100B36508 /* SF-UI-Text-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Text-Medium.otf"; sourceTree = "<group>"; };
@ -172,7 +161,7 @@
B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */,
CE4E31B31D8695250033ED64 /* Statusgo.framework in Frameworks */,
20AB9EC61D47CC0300E7FD9C /* libRCTStatus.a in Frameworks */,
925C1F4C1F7B73B20063DFA0 /* nanopb.framework in Frameworks */,
925C1F4C1F7B73B20063DFA0 /* BuildFile in Frameworks */,
25DC9C9DC25846BD8D084888 /* libc++.tbd in Frameworks */,
BA68A2377A20496EA737000D /* libz.tbd in Frameworks */,
8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */,
@ -217,7 +206,6 @@
1E7837547A9A40E18AD63CF3 /* Resources */ = {
isa = PBXGroup;
children = (
983F07442119C9D2004133ED /* message.wav */,
2028E0111D4275BD00227DCD /* SF */,
B23B48FE1E76917B006D4535 /* RobotoMono-Medium.ttf */,
74B758FB20D7C00B003343C3 /* launch-image-universal.storyboard */,
@ -291,7 +279,6 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
92A0DF491F4DE3A0002051BC /* GoogleService-Info.plist */,
13B07FAE1A68108700A75B9A /* StatusIm */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* StatusImTests */,
@ -333,15 +320,7 @@
A97BA941B2FB44B4B66EE6D3 /* Frameworks */ = {
isa = PBXGroup;
children = (
475D1FCD20B7415300879A77 /* libFirebaseCore.a */,
475D1FCE20B7415300879A77 /* libFirebaseMessaging.a */,
4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */,
925C1F7F1F7B73C00063DFA0 /* FirebaseMessaging.framework */,
925C1F401F7B73B20063DFA0 /* FirebaseCore.framework */,
925C1F411F7B73B20063DFA0 /* FirebaseCoreDiagnostics.framework */,
925C1F421F7B73B20063DFA0 /* FirebaseInstanceID.framework */,
925C1F431F7B73B20063DFA0 /* FirebaseNanoPB.framework */,
925C1F451F7B73B20063DFA0 /* nanopb.framework */,
B24FC7FE1DE7195F00D694FF /* MessageUI.framework */,
B24FC7FC1DE7195700D694FF /* Social.framework */,
CE4E31B21D8695250033ED64 /* Statusgo.framework */,
@ -488,13 +467,6 @@
remoteRef = 9EF083601F3B538B00876A8F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
C90048231FC47AF50002B8EA /* libRNSVG-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libRNSVG-tvOS.a";
remoteRef = C90048221FC47AF50002B8EA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
@ -509,10 +481,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
983F077E2119C9D2004133ED /* message.wav in Resources */,
74B758FC20D7C00B003343C3 /* launch-image-universal.storyboard in Resources */,
B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */,
92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */,
D2356A41DAE14CB683EAEE59 /* Inter-Black.otf in Resources */,
B190FBFB6A9B43EAAF396CD7 /* Inter-BlackItalic.otf in Resources */,
D84616FB563A48EBB1678699 /* Inter-Bold.otf in Resources */,
@ -557,7 +527,7 @@
files = (
);
inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh",
"${PODS_ROOT}/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/QBImagePickerController/QBImagePicker.bundle",
"${PODS_ROOT}/RSKImageCropper/RSKImageCropper/RSKImageCropperStrings.bundle",
);
@ -568,7 +538,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh\"\n";
showEnvVarsInLog = 0;
};
2EAC54E16AB243C3EBBFE1BA /* [CP] Check Pods Manifest.lock */ = {
@ -679,9 +649,7 @@
INFOPLIST_FILE = StatusImTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.status.ethereum;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
@ -706,9 +674,7 @@
INFOPLIST_FILE = StatusImTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.status.ethereum;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
@ -750,9 +716,6 @@
"$(SRCROOT)/../node_modules/react-native-splash-screen/ios",
"$(SRCROOT)/../node_modules/react-native-config/ios/**",
"$(SRCROOT)/../node_modules/react-native/Libraries/LinkingIOS",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/messaging",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/notifications",
);
INFOPLIST_FILE = StatusIm/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@ -808,9 +771,6 @@
"$(SRCROOT)/../node_modules/react-native-splash-screen/ios",
"$(SRCROOT)/../node_modules/react-native-config/ios/**",
"$(SRCROOT)/../node_modules/react-native/Libraries/LinkingIOS",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/messaging",
"$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/notifications",
);
INFOPLIST_FILE = StatusIm/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;

View File

@ -16,9 +16,6 @@
#import "RCTRootView.h"
#import "RNSplashScreen.h"
#import "RCTLinkingManager.h"
#import <Firebase.h>
#import "RNFirebaseNotifications.h"
#import "RNFirebaseMessaging.h"
@implementation AppDelegate
{
@ -30,11 +27,6 @@
signal(SIGPIPE, SIG_IGN);
NSURL *jsCodeLocation;
[FIRApp configure];
[RNFirebaseNotifications configure];
[application registerForRemoteNotifications];
/* Set logging level from React Native */
NSString *logLevel = [ReactNativeConfig envFor:@"LOG_LEVEL"];
if([logLevel isEqualToString:@"error"]){
@ -74,19 +66,6 @@
return YES;
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[[RNFirebaseNotifications instance] didReceiveLocalNotification:notification];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
[[RNFirebaseNotifications instance] didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[[RNFirebaseMessaging instance] didRegisterUserNotificationSettings:notificationSettings];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

View File

@ -91,10 +91,6 @@ used to be able to put a timeout on fetch request
TODO: check if the fetch timeout is actually aborting the request or only ignoring the callback on the response, if it
doesn't then this is useless and we are better of using a simple seTimeout
## "react-native-firebase": "5.1.1"
used to have some stupid notifications and give free metadata to Google
## "react-native-fs": "^2.14.1"
used for some filesystem related functions, for instance to get no-backup directory in `status-im.utils.platform`

View File

@ -25,7 +25,6 @@
"react-native-config": "git+https://github.com/status-im/react-native-config.git#0.11.2-1-status",
"react-native-dialogs": "^1.0.4",
"react-native-fetch-polyfill": "^1.1.2",
"react-native-firebase": "^5.5.6",
"react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.3.0",
"react-native-image-crop-picker": "^0.25.0",

View File

@ -4342,11 +4342,6 @@ open@^6.2.0:
dependencies:
is-wsl "^1.1.0"
opencollective-postinstall@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
optimist@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@ -4802,14 +4797,6 @@ react-native-fetch-polyfill@^1.1.2:
resolved "https://registry.yarnpkg.com/react-native-fetch-polyfill/-/react-native-fetch-polyfill-1.1.3.tgz#a02d9069a2f7108ca0b70b8469085c67cc02949c"
integrity sha512-zr5yXQftuGq+ABGa3n4ZE+vkL1lBsMSePkRINm3/6vlpbwnLXYoijwazTO/W8GjsV4LAgGmzuieZxKO/NxW19A==
react-native-firebase@^5.5.6:
version "5.5.6"
resolved "https://registry.yarnpkg.com/react-native-firebase/-/react-native-firebase-5.5.6.tgz#17b34ec0d5dc39afaaf0e159fd160f6339e0f707"
integrity sha512-AdbpGwKEEiMFgaRar9WOPc8Li4sfxR//WOyNQzxYsQ1fpARC908j7feqy2gu73SLqk4wzIrnlfJWakOe0/Bclg==
dependencies:
opencollective-postinstall "^2.0.0"
prop-types "^15.7.2"
react-native-fs@^2.14.1:
version "2.14.1"
resolved "https://registry.yarnpkg.com/react-native-fs/-/react-native-fs-2.14.1.tgz#61c70a865b5b5bcb020dd4e4befd60a2c20c836f"

View File

@ -456,25 +456,6 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
}
@ReactMethod
public void sendDataNotification(final String dataPayloadJSON, final String tokensJSON, final Callback callback) {
Log.d(TAG, "sendDataNotification");
if (!checkAvailability()) {
callback.invoke(false);
return;
}
Runnable r = new Runnable() {
@Override
public void run() {
String res = Statusgo.sendDataNotification(dataPayloadJSON, tokensJSON);
callback.invoke(res);
}
};
StatusThreadPoolExecutor.getInstance().execute(r);
}
private Boolean zip(File[] _files, File zipFile, Stack<String> errorList) {
final int BUFFER = 0x8000;

View File

@ -145,22 +145,6 @@ void RCTStatus::initKeystore() {
logStatusGoResult("::initKeystore InitKeystore", result);
}
void RCTStatus::sendDataNotification(QString dataPayloadJSON,
QString tokensJSON, double callbackId) {
Q_D(RCTStatus);
qCDebug(RCTSTATUS) << "::sendDataNotification call - callbackId:"
<< callbackId;
QtConcurrent::run(
[&](QString dataPayloadJSON, QString tokensJSON, double callbackId) {
const char *result = SendDataNotification(
dataPayloadJSON.toUtf8().data(), tokensJSON.toUtf8().data());
logStatusGoResult("::sendDataNotification SendDataNotification",
result);
d->bridge->invokePromiseCallback(callbackId, QVariantList{result});
},
dataPayloadJSON, tokensJSON, callbackId);
}
#include <QApplication>
#include <QMessageBox>
#include <QProcess>

View File

@ -38,8 +38,6 @@ public:
Q_INVOKABLE void shouldMoveToInternalStorage(double callbackId);
Q_INVOKABLE void moveToInternalStorage(double callbackId);
Q_INVOKABLE void initKeystore();
Q_INVOKABLE void sendDataNotification(QString dataPayloadJSON,
QString tokensJSON, double callbackId);
Q_INVOKABLE void sendLogs(QString dbJSON, QString jsLogs, double callbackId);
Q_INVOKABLE void exportLogs(double callbackId);
Q_INVOKABLE void addPeer(QString enode, double callbackId);

View File

@ -128,19 +128,6 @@ RCT_EXPORT_METHOD(initKeystore) {
});
}
////////////////////////////////////////////////////////////////////
#pragma mark - SendDataNotification method
//////////////////////////////////////////////////////////////////// sendDataNotification
RCT_EXPORT_METHOD(sendDataNotification:(NSString *)dataPayloadJSON
tokensJSON:(NSString *)tokensJSON
callback:(RCTResponseSenderBlock)callback) {
NSString* result = StatusgoSendDataNotification(dataPayloadJSON, tokensJSON);
callback(@[result]);
#if DEBUG
NSLog(@"SendDataNotification() method called");
#endif
}
////////////////////////////////////////////////////////////////////
#pragma mark - SendLogs method
//////////////////////////////////////////////////////////////////// sendLogs

View File

@ -19,7 +19,6 @@ https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.2/appco
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.0.0/core-common-2.0.0
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.0.0/core-runtime-2.0.0
https://dl.google.com/dl/android/maven2/androidx/asynclayoutinflater/asynclayoutinflater/1.0.0/asynclayoutinflater-1.0.0
https://dl.google.com/dl/android/maven2/androidx/browser/browser/1.0.0/browser-1.0.0
https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.0.0/collection-1.0.0
https://dl.google.com/dl/android/maven2/androidx/coordinatorlayout/coordinatorlayout/1.0.0/coordinatorlayout-1.0.0
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.1/core-1.0.1
@ -47,8 +46,6 @@ https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2
https://dl.google.com/dl/android/maven2/androidx/loader/loader/1.0.0/loader-1.0.0
https://dl.google.com/dl/android/maven2/androidx/localbroadcastmanager/localbroadcastmanager/1.0.0/localbroadcastmanager-1.0.0
https://dl.google.com/dl/android/maven2/androidx/media/media/1.0.0/media-1.0.0
https://dl.google.com/dl/android/maven2/androidx/multidex/multidex-instrumentation/2.0.0/multidex-instrumentation-2.0.0
https://dl.google.com/dl/android/maven2/androidx/multidex/multidex/2.0.0/multidex-2.0.0
https://dl.google.com/dl/android/maven2/androidx/multidex/multidex/2.0.1/multidex-2.0.1
https://dl.google.com/dl/android/maven2/androidx/print/print/1.0.0/print-1.0.0
https://dl.google.com/dl/android/maven2/androidx/recyclerview/recyclerview/1.0.0/recyclerview-1.0.0
@ -59,40 +56,33 @@ https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable/1
https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.0.0/versionedparcelable-1.0.0
https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.1.4/baseLibrary-3.1.4
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.3.1/baseLibrary-3.3.1
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.4.1/baseLibrary-3.4.1
https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCommon/3.0.1/compilerCommon-3.0.1
https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCommon/3.1.4/compilerCommon-3.1.4
https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28.0.0/appcompat-v7-28.0.0
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.3.1/crash-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.4.1/crash-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.1/protos-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.1.4/protos-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.2.1/protos-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.3.1/protos-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.4.1/protos-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.1.4/shared-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.2.1/shared-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.3.1/shared-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.4.1/shared-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.1.4/tracker-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.2.1/tracker-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.3.1/tracker-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.4.1/tracker-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.1/annotations-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.1.4/annotations-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.2.1/annotations-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.3.1/annotations-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.4.1/annotations-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.1.0/aapt2-proto-0.1.0
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2-proto/0.3.1/aapt2-proto-0.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.4.1-5326820/aapt2-3.4.1-5326820
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.1/apksig-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.1.4/apksig-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.2.1/apksig-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.3.1/apksig-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.4.1/apksig-3.4.1
@ -100,33 +90,26 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.2.1/ap
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.3.1/apkzlib-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.4.1/apkzlib-3.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.1/builder-model-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.1.4/builder-model-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.2.1/builder-model-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.3.1/builder-model-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.4.1/builder-model-3.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.1/builder-test-api-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.1.4/builder-test-api-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.2.1/builder-test-api-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.3.1/builder-test-api-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.4.1/builder-test-api-3.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.1.4/builder-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.2.1/builder-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.3.1/builder-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.4.1/builder-3.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.1.0-alpha01/bundletool-0.1.0-alpha01
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.5.0/bundletool-0.5.0
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.6.0/bundletool-0.6.0
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.7.2/bundletool-0.7.2
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.1/gradle-api-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.1.4/gradle-api-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.2.1/gradle-api-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.3.1/gradle-api-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.4.1/gradle-api-3.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core/3.0.1/gradle-core-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-core/3.1.4/gradle-core-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.4/gradle-3.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.1/gradle-3.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.4.1/gradle-3.4.1
@ -137,23 +120,19 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifie
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta02/jetifier-processor-1.0.0-beta02
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04/jetifier-processor-1.0.0-beta04
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.1/manifest-merger-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.1.4/manifest-merger-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.2.1/manifest-merger-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.3.1/manifest-merger-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.4.1/manifest-merger-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/common-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.1.4/common-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.2.1/common-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.3.1/common-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.4.1/common-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.1.4/ddmlib-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.3.1/ddmlib-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.4.1/ddmlib-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvlib-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.1.4/dvlib-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.2.1/dvlib-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.3.1/dvlib-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.4.1/dvlib-26.4.1
@ -163,7 +142,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/external/com-intellij/
https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains/uast/26.0.1/uast-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains/uast/26.4.1/uast-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.1/layoutlib-api-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.1.4/layoutlib-api-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.2.1/layoutlib-api-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.3.1/layoutlib-api-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.4.1/layoutlib-api-26.4.1
@ -171,7 +149,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.0.1/l
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-api/26.4.1/lint-api-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0.1/lint-checks-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.4.1/lint-checks-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.1.4/lint-gradle-api-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.2.1/lint-gradle-api-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.3.1/lint-gradle-api-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.4.1/lint-gradle-api-26.4.1
@ -179,164 +156,96 @@ https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/26.4.
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.0.1/lint-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint/26.4.1/lint-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1/repository-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.1.4/repository-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.2.1/repository-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.3.1/repository-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.4.1/repository-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1/sdk-common-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.4/sdk-common-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.2.1/sdk-common-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.3.1/sdk-common-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.4.1/sdk-common-26.4.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdklib-26.0.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.1.4/sdklib-26.1.4
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.2.1/sdklib-26.2.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.3.1/sdklib-26.3.1
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.4.1/sdklib-26.4.1
https://dl.google.com/dl/android/maven2/com/crashlytics/sdk/android/answers/1.4.7/answers-1.4.7
https://dl.google.com/dl/android/maven2/com/crashlytics/sdk/android/beta/1.2.10/beta-1.2.10
https://dl.google.com/dl/android/maven2/com/crashlytics/sdk/android/crashlytics-core/2.7.0/crashlytics-core-2.7.0
https://dl.google.com/dl/android/maven2/com/crashlytics/sdk/android/crashlytics/2.10.1/crashlytics-2.10.1
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-ads-base/17.2.0/play-services-ads-base-17.2.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-ads-identifier/16.0.0/play-services-ads-identifier-16.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-ads-lite/17.2.0/play-services-ads-lite-17.2.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-ads/17.2.0/play-services-ads-17.2.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-appinvite/17.0.0/play-services-appinvite-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-auth-base/16.0.0/play-services-auth-base-16.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-base/16.0.1/play-services-base-16.0.1
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-base/16.1.0/play-services-base-16.1.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/16.1.0/play-services-basement-16.1.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/16.2.0/play-services-basement-16.2.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-clearcut/16.0.0/play-services-clearcut-16.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-flags/16.0.1/play-services-flags-16.0.1
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-gass/17.2.0/play-services-gass-17.2.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-gcm/17.0.0/play-services-gcm-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-iid/17.0.0/play-services-iid-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement-api/16.5.0/play-services-measurement-api-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement-base/16.5.0/play-services-measurement-base-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement-impl/16.5.0/play-services-measurement-impl-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement-sdk-api/16.5.0/play-services-measurement-sdk-api-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement-sdk/16.5.0/play-services-measurement-sdk-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-measurement/16.5.0/play-services-measurement-16.5.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-phenotype/16.0.0/play-services-phenotype-16.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-stats/16.0.1/play-services-stats-16.0.1
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tasks/16.0.1/play-services-tasks-16.0.1
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision-common/17.0.2/play-services-vision-common-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision-image-label/17.0.2/play-services-vision-image-label-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision/17.0.2/play-services-vision-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/gms/strict-version-matcher-plugin/1.1.0/strict-version-matcher-plugin-1.1.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-abt/17.1.1/firebase-abt-17.1.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-ads/17.2.1/firebase-ads-17.2.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-analytics/16.5.0/firebase-analytics-16.5.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-auth-interop/17.0.0/firebase-auth-interop-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-auth/17.0.0/firebase-auth-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/16.0.3/firebase-common-16.0.3
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/17.0.0/firebase-common-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/17.1.0/firebase-common-17.1.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-config/17.0.0/firebase-config-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-core/16.0.9/firebase-core-16.0.9
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-database-collection/16.0.1/firebase-database-collection-16.0.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-database/17.0.0/firebase-database-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-dynamic-links/17.0.0/firebase-dynamic-links-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-firestore/19.0.2/firebase-firestore-19.0.2
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-functions/17.0.0/firebase-functions-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid-interop/16.0.1/firebase-iid-interop-16.0.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid/17.0.3/firebase-iid-17.0.3
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid/18.0.0/firebase-iid-18.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-invites/17.0.0/firebase-invites-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-measurement-connector/17.0.1/firebase-measurement-connector-17.0.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-messaging/18.0.0/firebase-messaging-18.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-ml-common/17.0.0/firebase-ml-common-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-ml-vision-face-model/17.0.2/firebase-ml-vision-face-model-17.0.2
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-ml-vision/19.0.3/firebase-ml-vision-19.0.3
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-perf/17.0.2/firebase-perf-17.0.2
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-storage/17.0.0/firebase-storage-17.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/protolite-well-known-types/16.0.1/protolite-well-known-types-16.0.1
https://dl.google.com/dl/android/maven2/com/google/gms/google-services/4.2.0/google-services-4.2.0
https://dl.google.com/dl/android/maven2/io/fabric/sdk/android/fabric/1.4.8/fabric-1.4.8
https://jcenter.bintray.com/com/adobe/xmp/xmpcore/5.1.3/xmpcore-5.1.3
https://jcenter.bintray.com/com/afollestad/material-dialogs/commons/0.9.6.0/commons-0.9.6.0
https://jcenter.bintray.com/com/afollestad/material-dialogs/core/0.9.6.0/core-0.9.6.0
https://jcenter.bintray.com/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5
https://jcenter.bintray.com/com/android/databinding/baseLibrary/2.2.0/baseLibrary-2.2.0
https://jcenter.bintray.com/com/android/databinding/baseLibrary/2.2.3/baseLibrary-2.2.3
https://jcenter.bintray.com/com/android/databinding/compilerCommon/1.0-rc5/compilerCommon-1.0-rc5
https://jcenter.bintray.com/com/android/databinding/compilerCommon/2.2.0/compilerCommon-2.2.0
https://jcenter.bintray.com/com/android/databinding/compilerCommon/2.2.3/compilerCommon-2.2.3
https://jcenter.bintray.com/com/android/tools/analytics-library/protos/25.2.0/protos-25.2.0
https://jcenter.bintray.com/com/android/tools/analytics-library/protos/25.2.3/protos-25.2.3
https://jcenter.bintray.com/com/android/tools/analytics-library/shared/25.2.0/shared-25.2.0
https://jcenter.bintray.com/com/android/tools/analytics-library/shared/25.2.3/shared-25.2.3
https://jcenter.bintray.com/com/android/tools/analytics-library/tracker/25.2.0/tracker-25.2.0
https://jcenter.bintray.com/com/android/tools/analytics-library/tracker/25.2.3/tracker-25.2.3
https://jcenter.bintray.com/com/android/tools/annotations/24.1.3/annotations-24.1.3
https://jcenter.bintray.com/com/android/tools/annotations/24.3.0/annotations-24.3.0
https://jcenter.bintray.com/com/android/tools/annotations/24.3.1/annotations-24.3.1
https://jcenter.bintray.com/com/android/tools/annotations/24.5.0/annotations-24.5.0
https://jcenter.bintray.com/com/android/tools/annotations/25.2.0/annotations-25.2.0
https://jcenter.bintray.com/com/android/tools/annotations/25.2.3/annotations-25.2.3
https://jcenter.bintray.com/com/android/tools/build/builder-model/1.1.3/builder-model-1.1.3
https://jcenter.bintray.com/com/android/tools/build/builder-model/1.3.0/builder-model-1.3.0
https://jcenter.bintray.com/com/android/tools/build/builder-model/1.3.1/builder-model-1.3.1
https://jcenter.bintray.com/com/android/tools/build/builder-model/1.5.0/builder-model-1.5.0
https://jcenter.bintray.com/com/android/tools/build/builder-model/2.2.0/builder-model-2.2.0
https://jcenter.bintray.com/com/android/tools/build/builder-model/2.2.3/builder-model-2.2.3
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.1.3/builder-test-api-1.1.3
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.3.0/builder-test-api-1.3.0
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.3.1/builder-test-api-1.3.1
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.5.0/builder-test-api-1.5.0
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/2.2.0/builder-test-api-2.2.0
https://jcenter.bintray.com/com/android/tools/build/builder-test-api/2.2.3/builder-test-api-2.2.3
https://jcenter.bintray.com/com/android/tools/build/builder/1.1.3/builder-1.1.3
https://jcenter.bintray.com/com/android/tools/build/builder/1.3.0/builder-1.3.0
https://jcenter.bintray.com/com/android/tools/build/builder/1.3.1/builder-1.3.1
https://jcenter.bintray.com/com/android/tools/build/builder/1.5.0/builder-1.5.0
https://jcenter.bintray.com/com/android/tools/build/builder/2.2.0/builder-2.2.0
https://jcenter.bintray.com/com/android/tools/build/builder/2.2.3/builder-2.2.3
https://jcenter.bintray.com/com/android/tools/build/gradle-api/2.2.0/gradle-api-2.2.0
https://jcenter.bintray.com/com/android/tools/build/gradle-api/2.2.3/gradle-api-2.2.3
https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.1.3/gradle-core-1.1.3
https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.3.0/gradle-core-1.3.0
https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.3.1/gradle-core-1.3.1
https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.5.0/gradle-core-1.5.0
https://jcenter.bintray.com/com/android/tools/build/gradle-core/2.2.0/gradle-core-2.2.0
https://jcenter.bintray.com/com/android/tools/build/gradle-core/2.2.3/gradle-core-2.2.3
https://jcenter.bintray.com/com/android/tools/build/gradle/1.1.3/gradle-1.1.3
https://jcenter.bintray.com/com/android/tools/build/gradle/1.3.0/gradle-1.3.0
https://jcenter.bintray.com/com/android/tools/build/gradle/1.3.1/gradle-1.3.1
https://jcenter.bintray.com/com/android/tools/build/gradle/1.5.0/gradle-1.5.0
https://jcenter.bintray.com/com/android/tools/build/gradle/2.2.0/gradle-2.2.0
https://jcenter.bintray.com/com/android/tools/build/gradle/2.2.3/gradle-2.2.3
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/24.1.3/manifest-merger-24.1.3
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/24.3.0/manifest-merger-24.3.0
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/24.3.1/manifest-merger-24.3.1
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/24.5.0/manifest-merger-24.5.0
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/25.2.0/manifest-merger-25.2.0
https://jcenter.bintray.com/com/android/tools/build/manifest-merger/25.2.3/manifest-merger-25.2.3
https://jcenter.bintray.com/com/android/tools/build/transform-api/1.5.0/transform-api-1.5.0
https://jcenter.bintray.com/com/android/tools/common/24.1.3/common-24.1.3
https://jcenter.bintray.com/com/android/tools/common/24.3.0/common-24.3.0
https://jcenter.bintray.com/com/android/tools/common/24.3.1/common-24.3.1
https://jcenter.bintray.com/com/android/tools/common/24.5.0/common-24.5.0
https://jcenter.bintray.com/com/android/tools/common/25.2.0/common-25.2.0
https://jcenter.bintray.com/com/android/tools/common/25.2.3/common-25.2.3
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/24.1.3/ddmlib-24.1.3
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/24.3.0/ddmlib-24.3.0
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/24.3.1/ddmlib-24.3.1
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/24.5.0/ddmlib-24.5.0
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/25.2.0/ddmlib-25.2.0
https://jcenter.bintray.com/com/android/tools/ddms/ddmlib/25.2.3/ddmlib-25.2.3
https://jcenter.bintray.com/com/android/tools/dvlib/24.1.3/dvlib-24.1.3
https://jcenter.bintray.com/com/android/tools/dvlib/24.3.0/dvlib-24.3.0
https://jcenter.bintray.com/com/android/tools/dvlib/24.3.1/dvlib-24.3.1
https://jcenter.bintray.com/com/android/tools/dvlib/24.5.0/dvlib-24.5.0
https://jcenter.bintray.com/com/android/tools/dvlib/25.2.0/dvlib-25.2.0
https://jcenter.bintray.com/com/android/tools/dvlib/25.2.3/dvlib-25.2.3
https://jcenter.bintray.com/com/android/tools/external/com-intellij/uast/145.597.3/uast-145.597.3
https://jcenter.bintray.com/com/android/tools/external/com-intellij/uast/145.597.4/uast-145.597.4
https://jcenter.bintray.com/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3
https://jcenter.bintray.com/com/android/tools/jack/jack-api/0.11.0/jack-api-0.11.0
@ -347,39 +256,32 @@ https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/24.1.3/lay
https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/24.3.0/layoutlib-api-24.3.0
https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/24.3.1/layoutlib-api-24.3.1
https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/24.5.0/layoutlib-api-24.5.0
https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/25.2.0/layoutlib-api-25.2.0
https://jcenter.bintray.com/com/android/tools/layoutlib/layoutlib-api/25.2.3/layoutlib-api-25.2.3
https://jcenter.bintray.com/com/android/tools/lint/lint-api/24.1.3/lint-api-24.1.3
https://jcenter.bintray.com/com/android/tools/lint/lint-api/24.3.0/lint-api-24.3.0
https://jcenter.bintray.com/com/android/tools/lint/lint-api/24.3.1/lint-api-24.3.1
https://jcenter.bintray.com/com/android/tools/lint/lint-api/24.5.0/lint-api-24.5.0
https://jcenter.bintray.com/com/android/tools/lint/lint-api/25.2.0/lint-api-25.2.0
https://jcenter.bintray.com/com/android/tools/lint/lint-api/25.2.3/lint-api-25.2.3
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/24.1.3/lint-checks-24.1.3
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/24.3.0/lint-checks-24.3.0
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/24.3.1/lint-checks-24.3.1
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/24.5.0/lint-checks-24.5.0
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/25.2.0/lint-checks-25.2.0
https://jcenter.bintray.com/com/android/tools/lint/lint-checks/25.2.3/lint-checks-25.2.3
https://jcenter.bintray.com/com/android/tools/lint/lint/24.1.3/lint-24.1.3
https://jcenter.bintray.com/com/android/tools/lint/lint/24.3.0/lint-24.3.0
https://jcenter.bintray.com/com/android/tools/lint/lint/24.3.1/lint-24.3.1
https://jcenter.bintray.com/com/android/tools/lint/lint/24.5.0/lint-24.5.0
https://jcenter.bintray.com/com/android/tools/lint/lint/25.2.0/lint-25.2.0
https://jcenter.bintray.com/com/android/tools/lint/lint/25.2.3/lint-25.2.3
https://jcenter.bintray.com/com/android/tools/repository/25.2.0/repository-25.2.0
https://jcenter.bintray.com/com/android/tools/repository/25.2.3/repository-25.2.3
https://jcenter.bintray.com/com/android/tools/sdk-common/24.1.3/sdk-common-24.1.3
https://jcenter.bintray.com/com/android/tools/sdk-common/24.3.0/sdk-common-24.3.0
https://jcenter.bintray.com/com/android/tools/sdk-common/24.3.1/sdk-common-24.3.1
https://jcenter.bintray.com/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0
https://jcenter.bintray.com/com/android/tools/sdk-common/25.2.0/sdk-common-25.2.0
https://jcenter.bintray.com/com/android/tools/sdk-common/25.2.3/sdk-common-25.2.3
https://jcenter.bintray.com/com/android/tools/sdklib/24.1.3/sdklib-24.1.3
https://jcenter.bintray.com/com/android/tools/sdklib/24.3.0/sdklib-24.3.0
https://jcenter.bintray.com/com/android/tools/sdklib/24.3.1/sdklib-24.3.1
https://jcenter.bintray.com/com/android/tools/sdklib/24.5.0/sdklib-24.5.0
https://jcenter.bintray.com/com/android/tools/sdklib/25.2.0/sdklib-25.2.0
https://jcenter.bintray.com/com/android/tools/sdklib/25.2.3/sdklib-25.2.3
https://jcenter.bintray.com/com/diffplug/durian/durian-collect/1.2.0/durian-collect-1.2.0
https://jcenter.bintray.com/com/diffplug/durian/durian-core/1.2.0/durian-core-1.2.0
@ -401,34 +303,26 @@ https://jcenter.bintray.com/com/facebook/fresco/nativeimagefilters/2.0.0/nativei
https://jcenter.bintray.com/com/facebook/fresco/nativeimagetranscoder/2.0.0/nativeimagetranscoder-2.0.0
https://jcenter.bintray.com/com/facebook/infer/annotation/infer-annotation/0.11.2/infer-annotation-0.11.2
https://jcenter.bintray.com/com/facebook/soloader/soloader/0.6.0/soloader-0.6.0
https://jcenter.bintray.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4
https://jcenter.bintray.com/com/google/auto/value/auto-value-annotations/1.6.3/auto-value-annotations-1.6.3
https://jcenter.bintray.com/com/google/auto/value/auto-value/1.5.2/auto-value-1.5.2
https://jcenter.bintray.com/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9
https://jcenter.bintray.com/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2
https://jcenter.bintray.com/com/google/code/gson/gson/2.2.4/gson-2.2.4
https://jcenter.bintray.com/com/google/code/gson/gson/2.3/gson-2.3
https://jcenter.bintray.com/com/google/code/gson/gson/2.7/gson-2.7
https://jcenter.bintray.com/com/google/code/gson/gson/2.8.0/gson-2.8.0
https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18
https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2
https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3
https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0
https://jcenter.bintray.com/com/google/errorprone/error_prone_annotations/2.3.2/error_prone_annotations-2.3.2
https://jcenter.bintray.com/com/google/guava/guava/17.0/guava-17.0
https://jcenter.bintray.com/com/google/guava/guava/18.0/guava-18.0
https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0
https://jcenter.bintray.com/com/google/guava/guava/23.0/guava-23.0
https://jcenter.bintray.com/com/google/guava/guava/26.0-android/guava-26.0-android
https://jcenter.bintray.com/com/google/guava/guava/26.0-jre/guava-26.0-jre
https://jcenter.bintray.com/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava
https://jcenter.bintray.com/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1
https://jcenter.bintray.com/com/google/jimfs/jimfs/1.1/jimfs-1.1
https://jcenter.bintray.com/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0
https://jcenter.bintray.com/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0
https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.0.0/protobuf-java-3.0.0
https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0
https://jcenter.bintray.com/com/google/protobuf/protobuf-lite/3.0.1/protobuf-lite-3.0.1
https://jcenter.bintray.com/com/google/zxing/core/3.3.3/core-3.3.3
https://jcenter.bintray.com/com/googlecode/concurrent-trees/concurrent-trees/2.6.1/concurrent-trees-2.6.1
https://jcenter.bintray.com/com/googlecode/javaewah/JavaEWAH/1.1.6/JavaEWAH-1.1.6
@ -439,7 +333,6 @@ https://jcenter.bintray.com/com/jcraft/jsch/0.1.54/jsch-0.1.54
https://jcenter.bintray.com/com/parse/bolts/bolts-tasks/1.4.0/bolts-tasks-1.4.0
https://jcenter.bintray.com/com/squareup/javapoet/1.8.0/javapoet-1.8.0
https://jcenter.bintray.com/com/squareup/javawriter/2.5.0/javawriter-2.5.0
https://jcenter.bintray.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5
https://jcenter.bintray.com/com/squareup/okhttp3/okhttp-urlconnection/3.12.1/okhttp-urlconnection-3.12.1
https://jcenter.bintray.com/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1
https://jcenter.bintray.com/com/squareup/okio/okio/1.15.0/okio-1.15.0
@ -457,20 +350,10 @@ https://jcenter.bintray.com/commons-io/commons-io/2.4/commons-io-2.4
https://jcenter.bintray.com/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1
https://jcenter.bintray.com/commons-logging/commons-logging/1.2/commons-logging-1.2
https://jcenter.bintray.com/de/undercouch/gradle-download-task/3.1.2/gradle-download-task-3.1.2
https://jcenter.bintray.com/io/grpc/grpc-android/1.21.0/grpc-android-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-api/1.21.0/grpc-api-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-context/1.21.0/grpc-context-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-core/1.21.0/grpc-core-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-okhttp/1.21.0/grpc-okhttp-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-protobuf-lite/1.21.0/grpc-protobuf-lite-1.21.0
https://jcenter.bintray.com/io/grpc/grpc-stub/1.21.0/grpc-stub-1.21.0
https://jcenter.bintray.com/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0
https://jcenter.bintray.com/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0
https://jcenter.bintray.com/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0
https://jcenter.bintray.com/javax/inject/javax.inject/1/javax.inject-1
https://jcenter.bintray.com/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jaxb-api-2.2.12-b140109.1041
https://jcenter.bintray.com/junit/junit/4.12/junit-4.12
https://jcenter.bintray.com/me/leolin/ShortcutBadger/1.1.22/ShortcutBadger-1.1.22
https://jcenter.bintray.com/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2
https://jcenter.bintray.com/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9
https://jcenter.bintray.com/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0
@ -507,13 +390,11 @@ https://jcenter.bintray.com/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-
https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48
https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56
https://jcenter.bintray.com/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60
https://jcenter.bintray.com/org/checkerframework/checker-compat-qual/2.5.2/checker-compat-qual-2.5.2
https://jcenter.bintray.com/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2
https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15
https://jcenter.bintray.com/org/codehaus/groovy/groovy-xml/2.4.7/groovy-xml-2.4.7
https://jcenter.bintray.com/org/codehaus/groovy/groovy/2.4.7/groovy-2.4.7
https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14
https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17
https://jcenter.bintray.com/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2
https://jcenter.bintray.com/org/eclipse/jdt/core/compiler/ecj/4.4/ecj-4.4
https://jcenter.bintray.com/org/eclipse/jdt/core/compiler/ecj/4.5.1/ecj-4.5.1
@ -556,17 +437,13 @@ https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.31/kotli
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.31/kotlin-stdlib-jdk8-1.3.31
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/kotlin-stdlib-1.1.3-2
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin-stdlib-1.2.0
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.11/kotlin-stdlib-1.3.11
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20
https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotlin-stdlib-1.3.31
https://jcenter.bintray.com/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824
https://jcenter.bintray.com/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7
https://jcenter.bintray.com/org/nanohttpd/nanohttpd/2.3.1/nanohttpd-2.3.1
https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3
https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4
https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1
@ -594,7 +471,7 @@ https://maven.java.net/content/repositories/releases/org/glassfish/build/gfnexus
https://maven.java.net/content/repositories/releases/org/glassfish/hk2/hk2-parent/2.1.14/hk2-parent-2.1.14
https://maven.java.net/content/repositories/releases/org/glassfish/hk2/hk2-public/2.1.14/hk2-public-2.1.14
https://maven.java.net/content/repositories/releases/org/glassfish/hk2/osgiversion-maven-plugin/2.1.14/osgiversion-maven-plugin-2.1.14
https://oss.sonatype.org/content/repositories/snapshots/junit/junit/4.13-SNAPSHOT/junit-4.13-20190621.062355-185
https://oss.sonatype.org/content/repositories/snapshots/junit/junit/4.13-SNAPSHOT/junit-4.13-20191026.122450-195
https://plugins.gradle.org/m2/com/diffplug/gradle/spotless/com.diffplug.gradle.spotless.gradle.plugin/3.23.0/com.diffplug.gradle.spotless.gradle.plugin-3.23.0
https://plugins.gradle.org/m2/com/diffplug/spotless/spotless-plugin-gradle/3.23.0/spotless-plugin-gradle-3.23.0
https://repo.maven.apache.org/maven2/antlr/antlr/2.7.2/antlr-2.7.2
@ -666,17 +543,16 @@ https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.3/auto-common
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/2/auto-parent-2
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/3/auto-parent-3
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/6/auto-parent-6
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/7/auto-parent-7
https://repo.maven.apache.org/maven2/com/google/auto/service/auto-service/1.0-rc2/auto-service-1.0-rc2
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.6.2/auto-value-annotations-1.6.2
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.6.2/auto-value-parent-1.6.2
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.6.3/auto-value-parent-1.6.3
https://repo.maven.apache.org/maven2/com/google/code/findbugs/annotations/3.0.0/annotations-3.0.0
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.7/gson-parent-2.7
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.0/gson-parent-2.8.0
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7
https://repo.maven.apache.org/maven2/com/google/code/maven-replacer-plugin/replacer/1.5.3/replacer-1.5.3
https://repo.maven.apache.org/maven2/com/google/collections/google-collections/1.0-rc1/google-collections-1.0-rc1
https://repo.maven.apache.org/maven2/com/google/collections/google-collections/1.0/google-collections-1.0
@ -684,11 +560,9 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotatio
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.12/error_prone_parent-2.0.12
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.3/error_prone_parent-2.1.3
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.2/error_prone_parent-2.3.2
https://repo.maven.apache.org/maven2/com/google/google/1/google-1
https://repo.maven.apache.org/maven2/com/google/google/5/google-5
https://repo.maven.apache.org/maven2/com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0
@ -704,11 +578,9 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/21.0/guava-pa
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/guava-parent-22.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/23.0/guava-parent-23.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/25.1-android/guava-parent-25.1-android
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-jre/guava-parent-26.0-jre
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/18.0/guava-testlib-18.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/23.0/guava-testlib-23.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/26.0-android/guava-testlib-26.0-android
https://repo.maven.apache.org/maven2/com/google/guava/guava/10.0.1/guava-10.0.1
https://repo.maven.apache.org/maven2/com/google/guava/guava/14.0.1/guava-14.0.1
https://repo.maven.apache.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1
@ -750,32 +622,15 @@ https://repo.maven.apache.org/maven2/com/googlecode/jmockit/jmockit/1.6/jmockit-
https://repo.maven.apache.org/maven2/com/googlecode/maven-download-plugin/download-maven-plugin/1.2.0/download-maven-plugin-1.2.0
https://repo.maven.apache.org/maven2/com/ibm/icu/icu4j/51.2/icu4j-51.2
https://repo.maven.apache.org/maven2/com/intellij/annotations/9.0.4/annotations-9.0.4
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.connector-factory/0.0.6/jsch.agentproxy.connector-factory-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.core/0.0.6/jsch.agentproxy.core-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.jsch/0.0.6/jsch.agentproxy.jsch-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.pageant/0.0.6/jsch.agentproxy.pageant-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.sshagent/0.0.6/jsch.agentproxy.sshagent-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.usocket-jna/0.0.6/jsch.agentproxy.usocket-jna-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy.usocket-nc/0.0.6/jsch.agentproxy.usocket-nc-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch.agentproxy/0.0.6/jsch.agentproxy-0.0.6
https://repo.maven.apache.org/maven2/com/jcraft/jsch/0.1.44-1/jsch-0.1.44-1
https://repo.maven.apache.org/maven2/com/jcraft/jsch/0.1.49/jsch-0.1.49
https://repo.maven.apache.org/maven2/com/jcraft/jsch/0.1.50/jsch-0.1.50
https://repo.maven.apache.org/maven2/com/jcraft/jzlib/1.0.7/jzlib-1.0.7
https://repo.maven.apache.org/maven2/com/simpligility/maven/plugins/android-maven-plugin/4.5.0/android-maven-plugin-4.5.0
https://repo.maven.apache.org/maven2/com/simpligility/maven/progressive-organization-pom/6.0.0/progressive-organization-pom-6.0.0
https://repo.maven.apache.org/maven2/com/squareup/okhttp/okhttp/2.5.0/okhttp-2.5.0
https://repo.maven.apache.org/maven2/com/squareup/okhttp/parent/2.5.0/parent-2.5.0
https://repo.maven.apache.org/maven2/com/squareup/okhttp/parent/2.7.5/parent-2.7.5
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/mockwebserver/3.12.1/mockwebserver-3.12.1
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-testing-support/3.12.1/okhttp-testing-support-3.12.1
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-tls/3.12.1/okhttp-tls-3.12.1
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.13.0/okio-parent-1.13.0
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.6.0/okio-parent-1.6.0
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.13.0/okio-1.13.0
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.6.0/okio-1.6.0
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/2.21/istack-commons-2.21
https://repo.maven.apache.org/maven2/com/sun/jersey/contribs/jersey-apache-client4/1.12/jersey-apache-client4-1.12
@ -846,7 +701,6 @@ https://repo.maven.apache.org/maven2/commons-validator/commons-validator/1.3.1/c
https://repo.maven.apache.org/maven2/de/zeigermann/xml/xml-im-exporter/1.1/xml-im-exporter-1.1
https://repo.maven.apache.org/maven2/dom4j/dom4j/1.1/dom4j-1.1
https://repo.maven.apache.org/maven2/doxia/doxia-sink-api/1.0-alpha-4/doxia-sink-api-1.0-alpha-4
https://repo.maven.apache.org/maven2/io/grpc/grpc-context/1.19.0/grpc-context-1.19.0
https://repo.maven.apache.org/maven2/io/netty/netty-all/4.0.35.Final/netty-all-4.0.35.Final
https://repo.maven.apache.org/maven2/io/netty/netty-parent/4.0.35.Final/netty-parent-4.0.35.Final
https://repo.maven.apache.org/maven2/javax/activation/activation/1.1/activation-1.1
@ -887,8 +741,6 @@ https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.8.5/byte-
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.6.5/byte-buddy-1.6.5
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.8.10/byte-buddy-1.8.10
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.8.5/byte-buddy-1.8.5
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/3.4.0/jna-3.4.0
https://repo.maven.apache.org/maven2/net/java/dev/jna/platform/3.4.0/platform-3.4.0
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/4/jvnet-parent-4
@ -930,7 +782,6 @@ https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4
https://repo.maven.apache.org/maven2/org/apache/apache/5/apache-5
https://repo.maven.apache.org/maven2/org/apache/apache/6/apache-6
https://repo.maven.apache.org/maven2/org/apache/apache/7/apache-7
https://repo.maven.apache.org/maven2/org/apache/apache/8/apache-8
https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9
https://repo.maven.apache.org/maven2/org/apache/commons/commons-build-plugin/1.1/commons-build-plugin-1.1
https://repo.maven.apache.org/maven2/org/apache/commons/commons-build-plugin/1.10/commons-build-plugin-1.10
@ -984,16 +835,12 @@ https://repo.maven.apache.org/maven2/org/apache/felix/org.apache.felix.bundlerep
https://repo.maven.apache.org/maven2/org/apache/felix/org.apache.felix.utils/1.6.0/org.apache.felix.utils-1.6.0
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.0.2/httpclient-4.0.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.1.3/httpclient-4.1.3
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.2/httpclient-4.2.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.3.5/httpclient-4.3.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.0.2/httpcomponents-client-4.0.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.1.1/httpcomponents-client-4.1.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.1.3/httpcomponents-client-4.1.3
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.1/httpcomponents-client-4.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.2.2/httpcomponents-client-4.2.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.2.5/httpcomponents-client-4.2.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.2.6/httpcomponents-client-4.2.6
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.3.5/httpcomponents-client-4.3.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.3.6/httpcomponents-client-4.3.6
@ -1002,8 +849,6 @@ https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-cl
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.0.1/httpcomponents-core-4.0.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.1.4/httpcomponents-core-4.1.4
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.1/httpcomponents-core-4.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.2.2/httpcomponents-core-4.2.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.2.4/httpcomponents-core-4.2.4
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.2.5/httpcomponents-core-4.2.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.3.2/httpcomponents-core-4.3.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.3.3/httpcomponents-core-4.3.3
@ -1013,18 +858,14 @@ https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-co
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-parent/10/httpcomponents-parent-10
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.1.4/httpcore-4.1.4
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2.2/httpcore-4.2.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.4/httpcore-4.4.4
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.2.5/httpmime-4.2.5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/maven-notice-plugin/0.0.2/maven-notice-plugin-0.0.2
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.0/project-4.0
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1.1/project-4.1.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1/project-4.1
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/5/project-5
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/6/project-6
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/7/project-7
https://repo.maven.apache.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0
https://repo.maven.apache.org/maven2/org/apache/jackrabbit/jackrabbit-parent/2.5.2/jackrabbit-parent-2.5.2
@ -1142,7 +983,6 @@ https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/13/maven-pare
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/15/maven-parent-15
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/16/maven-parent-16
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/17/maven-parent-17
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/18/maven-parent-18
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/19/maven-parent-19
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/20/maven-parent-20
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/21/maven-parent-21
@ -1258,11 +1098,8 @@ https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plu
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.5/maven-assembly-plugin-2.5
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.1.0/maven-assembly-plugin-3.1.0
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/3.1.1/maven-assembly-plugin-3.1.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-changes-plugin/2.11/maven-changes-plugin-2.11
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.10/maven-checkstyle-plugin-2.10
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.11/maven-checkstyle-plugin-2.11
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.13/maven-checkstyle-plugin-2.13
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.16/maven-checkstyle-plugin-2.16
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.17/maven-checkstyle-plugin-2.17
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/2.9.1/maven-checkstyle-plugin-2.9.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-checkstyle-plugin/3.0.0/maven-checkstyle-plugin-3.0.0
@ -1323,7 +1160,6 @@ https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plug
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.5.2/maven-install-plugin-2.5.2
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/3.0.0-M1/maven-install-plugin-3.0.0-M1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-invoker-plugin/1.8/maven-invoker-plugin-1.8
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-invoker-plugin/3.0.1/maven-invoker-plugin-3.0.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.1/maven-jar-plugin-2.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.3.1/maven-jar-plugin-2.3.1
@ -1377,7 +1213,6 @@ https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plug
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.4.2/maven-release-plugin-2.4.2
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5.1/maven-release-plugin-2.5.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5.2/maven-release-plugin-2.5.2
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5.3/maven-release-plugin-2.5.3
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.5/maven-release-plugin-2.5
@ -1426,11 +1261,9 @@ https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plu
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.20.1/maven-surefire-plugin-2.20.1
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.20/maven-surefire-plugin-2.20
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.21.0/maven-surefire-plugin-2.21.0
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.22.0/maven-surefire-plugin-2.22.0
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.3/maven-surefire-plugin-2.3
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.3/maven-surefire-plugin-2.4.3
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.5/maven-surefire-plugin-2.5
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.7.2/maven-surefire-plugin-2.7.2
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.9/maven-surefire-plugin-2.9
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/3.0.0-M3/maven-surefire-plugin-3.0.0-M3
https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-report-plugin/2.20/maven-surefire-report-plugin-2.20
@ -1438,7 +1271,6 @@ https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/3
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.0/maven-release-2.0
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.1/maven-release-2.1
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.4.2/maven-release-2.4.2
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.5.1/maven-release-2.5.1
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.5.2/maven-release-2.5.2
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.5.3/maven-release-2.5.3
https://repo.maven.apache.org/maven2/org/apache/maven/release/maven-release/2.5/maven-release-2.5
@ -1536,11 +1368,9 @@ https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.19.1/s
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.20.1/surefire-2.20.1
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.20/surefire-2.20
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.21.0/surefire-2.21.0
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.22.0/surefire-2.22.0
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.3/surefire-2.3
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.4.3/surefire-2.4.3
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.5/surefire-2.5
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.7.2/surefire-2.7.2
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.9/surefire-2.9
https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/3.0.0-M3/surefire-3.0.0-M3
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-http-shared/2.7/wagon-http-shared-2.7
@ -1555,10 +1385,8 @@ https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/2.0/wagon-providers-2.0
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/2.7/wagon-providers-2.7
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh-common/2.0/wagon-ssh-common-2.0
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh-common/2.7/wagon-ssh-common-2.7
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh-external/1.0-alpha-5/wagon-ssh-external-1.0-alpha-5
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.0/wagon-ssh-2.0
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.7/wagon-ssh-2.7
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-webdav-jackrabbit/2.7/wagon-webdav-jackrabbit-2.7
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-webdav/1.0-beta-2/wagon-webdav-1.0-beta-2
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0-alpha-6/wagon-1.0-alpha-6
@ -1610,6 +1438,7 @@ https://repo.maven.apache.org/maven2/org/codehaus/jackson/jackson-xc/1.9.2/jacks
https://repo.maven.apache.org/maven2/org/codehaus/jsr166-mirror/jsr166y/1.7.0/jsr166y-1.7.0
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.10/animal-sniffer-annotations-1.10
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.15/animal-sniffer-annotations-1.15
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-maven-plugin/1.10/animal-sniffer-maven-plugin-1.10
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-maven-plugin/1.11/animal-sniffer-maven-plugin-1.11
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-maven-plugin/1.13/animal-sniffer-maven-plugin-1.13
@ -1647,7 +1476,6 @@ https://repo.maven.apache.org/maven2/org/codehaus/mojo/cobertura-maven-plugin/2.
https://repo.maven.apache.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/2.5.1/findbugs-maven-plugin-2.5.1
https://repo.maven.apache.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/2.5.2/findbugs-maven-plugin-2.5.2
https://repo.maven.apache.org/maven2/org/codehaus/mojo/findbugs-maven-plugin/2.5.3/findbugs-maven-plugin-2.5.3
https://repo.maven.apache.org/maven2/org/codehaus/mojo/license-maven-plugin/1.7/license-maven-plugin-1.7
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/23/mojo-parent-23
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/24/mojo-parent-24
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/28/mojo-parent-28
@ -1830,25 +1658,19 @@ https://repo.maven.apache.org/maven2/org/immutables/tools/maven-shade-plugin/4/m
https://repo.maven.apache.org/maven2/org/infinitest/continuous-testing-toolkit/1.0/continuous-testing-toolkit-1.0
https://repo.maven.apache.org/maven2/org/iq80/snappy/snappy/0.4/snappy-0.4
https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.7.2.201409121644/jacoco-maven-plugin-0.7.2.201409121644
https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.7.4.201502262128/jacoco-maven-plugin-0.7.4.201502262128
https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.7.9/jacoco-maven-plugin-0.7.9
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.2.201409121644/org.jacoco.build-0.7.2.201409121644
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.4.201502262128/org.jacoco.build-0.7.4.201502262128
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.5.201505241946/org.jacoco.build-0.7.5.201505241946
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.9/org.jacoco.build-0.7.9
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.7.9/org.jacoco.core-0.7.9
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.7.9/org.jacoco.report-0.7.9
https://repo.maven.apache.org/maven2/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA
https://repo.maven.apache.org/maven2/org/jboss/weld/weld-api-bom/1.0/weld-api-bom-1.0
https://repo.maven.apache.org/maven2/org/jboss/weld/weld-api-parent/1.0/weld-api-parent-1.0
https://repo.maven.apache.org/maven2/org/jboss/weld/weld-parent/6/weld-parent-6
https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.61/kotlin-stdlib-common-1.2.61
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.0/kotlin-stdlib-common-1.3.0
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.61/kotlin-stdlib-jdk7-1.2.61
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.61/kotlin-stdlib-jdk8-1.2.61
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/kotlin-stdlib-1.2.0
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.20/kotlin-stdlib-1.2.20
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.61/kotlin-stdlib-1.2.61
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.0/kotlin-stdlib-1.3.0
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-annotations-common/1.2.71/kotlin-test-annotations-common-1.2.71
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-annotations-common/1.3.11/kotlin-test-annotations-common-1.3.11
@ -1859,13 +1681,11 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.3
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.3.20/kotlin-test-common-1.3.20
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.3.31/kotlin-test-common-1.3.31
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.1.3-2/kotlin-test-junit-1.1.3-2
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.2.0/kotlin-test-junit-1.2.0
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.2.71/kotlin-test-junit-1.2.71
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.3.11/kotlin-test-junit-1.3.11
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.3.20/kotlin-test-junit-1.3.20
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-junit/1.3.31/kotlin-test-junit-1.3.31
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.1.3-2/kotlin-test-1.1.3-2
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.2.0/kotlin-test-1.2.0
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.2.71/kotlin-test-1.2.71
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.3.11/kotlin-test-1.3.11
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.3.20/kotlin-test-1.3.20
@ -1896,7 +1716,6 @@ https://repo.maven.apache.org/maven2/org/littleshoot/littleproxy/1.1.0-beta2/lit
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/1.10.16/mockito-core-1.10.16
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/1.10.19/mockito-core-1.10.19
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/1.8.5/mockito-core-1.8.5
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/1.9.5/mockito-core-1.9.5
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.18.3/mockito-core-2.18.3
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.19.0/mockito-core-2.19.0
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.7.1/mockito-core-2.7.1
@ -1908,7 +1727,6 @@ https://repo.maven.apache.org/maven2/org/mortbay/jetty/project/6.1.26/project-6.
https://repo.maven.apache.org/maven2/org/mortbay/jetty/servlet-api/2.5-20081211/servlet-api-2.5-20081211
https://repo.maven.apache.org/maven2/org/multiverse/multiverse-core/0.7.0/multiverse-core-0.7.0
https://repo.maven.apache.org/maven2/org/multiverse/multiverse/0.7.0/multiverse-0.7.0
https://repo.maven.apache.org/maven2/org/nanohttpd/nanohttpd-project/2.3.1/nanohttpd-project-2.3.1
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.2/objenesis-parent-1.2
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.3/objenesis-parent-1.3
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/2.1/objenesis-parent-2.1
@ -1933,14 +1751,12 @@ https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.1.0/org.osgi.core-
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.2.0/org.osgi.core-4.2.0
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.3.1/org.osgi.core-4.3.1
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/5.2/asm-debug-all-5.2
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/4.0/asm-parent-4.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.2/asm-parent-5.0.2
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.3/asm-parent-5.0.3
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.4/asm-parent-5.0.4
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-5.1
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.2/asm-parent-5.2
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/6.0/asm-parent-6.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/4.0/asm-4.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2
@ -2072,7 +1888,6 @@ https://repo.maven.apache.org/maven2/org/sonatype/spice/zapper/spice-zapper/1.1/
https://repo.maven.apache.org/maven2/org/sonatype/spice/zapper/spice-zapper/1.2/spice-zapper-1.2
https://repo.maven.apache.org/maven2/org/sonatype/spice/zapper/spice-zapper/1.3/spice-zapper-1.3
https://repo.maven.apache.org/maven2/org/testng/testng/6.8.13/testng-6.8.13
https://repo.maven.apache.org/maven2/org/tinyjee/dim/doxia-include-macro/1.1/doxia-include-macro-1.1
https://repo.maven.apache.org/maven2/org/tukaani/xz/1.2/xz-1.2
https://repo.maven.apache.org/maven2/org/tukaani/xz/1.5/xz-1.5
https://repo.maven.apache.org/maven2/org/tukaani/xz/1.8/xz-1.8

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,6 @@
(def desktop-menu (js/require "react-native-desktop-menu"))
(def desktop-config (js/require "react-native-desktop-config"))
(def desktop-shortcuts (js/require "react-native-desktop-shortcuts"))
(def react-native-firebase #js {})
(def touchid #js {})
(def camera #js {:RNCamera #js {:constants #js {:Aspect "Portrait"}}})
(def status-keycard #js {:default #js {}})

View File

@ -20,7 +20,6 @@
(def dismiss-keyboard (js/require "dismissKeyboard"))
(def image-crop-picker (js/require "react-native-image-crop-picker"))
(def image-resizer (js/require "react-native-image-resizer"))
(def react-native-firebase (js/require "react-native-firebase"))
(def snoopy (js/require "rn-snoopy"))
(def snoopy-filter (js/require "rn-snoopy/stream/filter"))
(def snoopy-bars (js/require "rn-snoopy/stream/bars"))

View File

@ -12,7 +12,6 @@
[status-im.ethereum.core :as ethereum]
[status-im.mailserver.core :as mailserver]
[status-im.native-module.core :as status]
[status-im.notifications.core :as notifications]
[status-im.transport.message.group-chat :as message.group-chat]
[status-im.transport.message.protocol :as protocol]
[status-im.transport.message.transit :as transit]
@ -352,16 +351,6 @@
:last-clock-value (:clock-value message)})
(send chat-id message wrapped-record))))
(fx/defn send-push-notification
[cofx chat-id message-id fcm-tokens status]
(log/debug "#6772 - send-push-notification" message-id fcm-tokens)
(when (and (seq fcm-tokens) (= status :sent))
(let [payload {:from (multiaccounts.model/current-public-key cofx)
:to chat-id
:id message-id}]
{:send-notification {:data-payload (notifications/encode-notification-payload payload)
:tokens fcm-tokens}})))
(fx/defn update-message-status
[{:keys [db] :as cofx} chat-id message-id status]
(fx/merge cofx
@ -443,16 +432,3 @@
:chat-received-message/add-fx
(fn [messages]
(re-frame/dispatch [:message/add messages])))
(re-frame/reg-fx
:send-notification
(fn [{:keys [data-payload tokens]}]
"Sends a notification to another device. data-payload is a Clojure map of strings to strings"
(let [data-payload-json (types/clj->json data-payload)
tokens-json (types/clj->json tokens)]
(log/debug "send-notification data-payload-json:" data-payload-json "tokens-json:" tokens-json)
;; NOTE: react-native-firebase doesn't have a good implementation of sendMessage
;; (supporting e.g. priority or content_available properties),
;; therefore we must use an implementation in status-go.
(status/send-data-notification {:data-payload data-payload-json :tokens tokens-json}
#(log/debug "send-data-notification cb result: " %)))))

View File

@ -4,7 +4,6 @@
[status-im.multiaccounts.model :as multiaccounts.model]
[status-im.transport.filters.core :as transport.filters]
[status-im.contact.db :as contact.db]
[status-im.contact.device-info :as device-info]
[status-im.ethereum.core :as ethereum]
[status-im.data-store.contacts :as contacts-store]
[status-im.mailserver.core :as mailserver]
@ -43,13 +42,10 @@
(defn- own-info
[db]
(let [{:keys [name preferred-name photo-path address]} (:multiaccount db)
fcm-token (get-in db [:notifications :fcm-token])]
(let [{:keys [name preferred-name photo-path address]} (:multiaccount db)]
{:name (or preferred-name name)
:profile-image photo-path
:address address
:device-info (device-info/all {:db db})
:fcm-token fcm-token}))
:address address}))
(fx/defn upsert-contact
[{:keys [db] :as cofx}
@ -105,7 +101,7 @@
[{{:contacts/keys [contacts] :as db} :db :as cofx}
public-key
timestamp
{:keys [name profile-image address fcm-token device-info] :as m}]
{:keys [name profile-image address] :as m}]
;; We need to convert to timestamp ms as before we were using now in ms to
;; set last updated
;; Using whisper timestamp mostly works but breaks in a few scenarios:
@ -121,7 +117,7 @@
(let [contact (get contacts public-key)
;; Backward compatibility with <= 0.9.21, as they don't send
;; fcm-token & address in contact updates
;; address in contact updates
contact-props
(cond-> {:public-key public-key
:photo-path profile-image
@ -129,14 +125,9 @@
:address (or address
(:address contact)
(ethereum/public-key->address public-key))
:device-info (device-info/merge-info
timestamp
(:device-info contact)
device-info)
:last-updated timestamp-ms
:system-tags (conj (get contact :system-tags #{})
:contact/request-received)}
fcm-token (assoc :fcm-token fcm-token))]
:contact/request-received)})]
(upsert-contact cofx contact-props)))))
(fx/defn initialize-contacts [cofx]
@ -182,4 +173,3 @@
{:events [:contacts/ens-names-verified]}
[{:keys [db]} names]
{:db (update db :contacts/contacts add-ens-names names)})

View File

@ -11,7 +11,6 @@
;;Contact
(spec/def :contact/address (spec/nilable :global/address))
(spec/def :contact/fcm-token (spec/nilable string?))
(spec/def :contact/last-online (spec/nilable int?))
(spec/def :contact/last-updated (spec/nilable int?))
(spec/def :contact/name (spec/nilable string?))
@ -31,8 +30,7 @@
(spec/def :contact/contact (spec/keys :req-un [:contact/address
:contact/public-key
:contact/system-tags]
:opt-un [:contact/fcm-token
:contact/name
:opt-un [:contact/name
:contact/photo-path
:contact/last-online
:contact/last-updated

View File

@ -1,26 +0,0 @@
(ns status-im.contact.device-info
(:require [status-im.utils.config :as config]))
(defn all [{:keys [db]}]
(filter
:fcm-token
(conj
(->> (:pairing/installations db)
(vals)
(filter :enabled?)
(filter :fcm-token)
(take config/max-installations)
(map #(hash-map :id (:installation-id %)
:fcm-token (:fcm-token %))))
{:id (get-in db [:multiaccount :installation-id])
:fcm-token (get-in db [:notifications :fcm-token])})))
(defn merge-info [timestamp previous-devices new-devices]
(reduce (fn [acc {:keys [id] :as new-device}]
(if (:fcm-token new-device)
(assoc acc
id
(assoc new-device :timestamp timestamp))
acc))
previous-devices
new-devices))

View File

@ -3,7 +3,6 @@
[status-im.utils.error-handler :as error-handler]
[status-im.utils.platform :as platform]
[status-im.ui.components.react :as react]
[status-im.notifications.background :as background-messaging]
[reagent.core :as reagent]
status-im.transport.impl.receive
status-im.transport.impl.send
@ -23,6 +22,4 @@
(utils.logs/init-logs)
(error-handler/register-exception-handler!)
(re-frame/dispatch [:init/app-started])
(.registerComponent react/app-registry "StatusIm" #(reagent/reactify-component app-root))
(when platform/android?
(.registerHeadlessTask react/app-registry "RNFirebaseBackgroundMessage" background-messaging/message-handler-fn)))
(.registerComponent react/app-registry "StatusIm" #(reagent/reactify-component app-root)))

View File

@ -6,24 +6,8 @@
[taoensso.timbre :as log]
[status-im.utils.types :as types]))
(defn deserialize-device-info [contact]
(update contact :deviceInfo (fn [device-info]
(reduce (fn [acc info]
(assoc acc
(:installationId info)
(clojure.set/rename-keys info {:fcmToken :fcm-token :installationId :id})))
{}
device-info))))
(defn serialize-device-info [contact]
(update contact :device-info (fn [device-info]
(map
#(clojure.set/rename-keys % {:fcm-token :fcmToken :id :installationId})
(vals device-info)))))
(defn <-rpc [contact]
(-> contact
deserialize-device-info
(update :tributeToTalk types/deserialize)
(update :systemTags
#(reduce (fn [acc s]
@ -31,7 +15,6 @@
#{}
%)) (clojure.set/rename-keys {:id :public-key
:photoPath :photo-path
:deviceInfo :device-info
:tributeToTalk :tribute-to-talk
:ensVerifiedAt :ens-verified-at
:ensVerified :ens-verified
@ -40,14 +23,12 @@
(defn ->rpc [contact]
(-> contact
serialize-device-info
(update :tribute-to-talk types/serialize)
(update :system-tags #(mapv str %))
(clojure.set/rename-keys {:public-key :id
:ens-verified :ensVerified
:ens-verified-at :ensVerifiedAt
:photo-path :photoPath
:device-info :deviceInfo
:tribute-to-talk :tributeToTalk
:system-tags :systemTags
:last-updated :lastUpdated})))

View File

@ -7,7 +7,6 @@
status-im.subs
[status-im.ui.screens.views :as views]
[status-im.ui.components.react :as react]
[status-im.notifications.core :as notifications]
[status-im.core :as core]
[status-im.utils.snoopy :as snoopy]
[status-im.ui.components.desktop.shortcuts :as shortcuts]

View File

@ -35,7 +35,6 @@
[status-im.mailserver.constants :as mailserver.constants]
[status-im.mailserver.topics :as mailserver.topics]
[status-im.node.core :as node]
[status-im.notifications.core :as notifications]
[status-im.pairing.core :as pairing]
[status-im.privacy-policy.core :as privacy-policy]
[status-im.protocol.core :as protocol]
@ -660,23 +659,6 @@
(log/debug :event-str event-str)
(signals/process cofx event-str)))
;; notifications module
(handlers/register-handler-fx
:notifications/notification-open-event-received
(fn [cofx [_ decoded-payload ctx]]
(notifications/handle-push-notification-open cofx decoded-payload ctx)))
(handlers/register-handler-fx
:notifications.callback/get-fcm-token-success
(fn [{:keys [db]} [_ fcm-token]]
{:db (assoc-in db [:notifications :fcm-token] fcm-token)}))
(handlers/register-handler-fx
:notifications.callback/on-message
(fn [cofx [_ decoded-payload opts]]
(notifications/handle-on-message cofx decoded-payload opts)))
;; hardwallet module
(handlers/register-handler-fx

View File

@ -3,7 +3,6 @@
[status-im.multiaccounts.login.core :as multiaccounts.login]
[status-im.native-module.core :as status]
[status-im.network.net-info :as network]
[status-im.notifications.core :as notifications]
[status-im.react-native.js-dependencies :as rn-dependencies]
[status-im.ui.screens.db :refer [app-db]]
[status-im.ui.screens.navigation :as navigation]
@ -22,34 +21,21 @@
(fx/defn initialize-app-db
"Initialize db to initial state"
[{{:keys [view-id hardwallet initial-props desktop/desktop
supported-biometric-auth push-notifications/stored network/type]} :db}]
supported-biometric-auth network/type]} :db}]
{:db (assoc app-db
:initial-props initial-props
:desktop/desktop (merge desktop (:desktop/desktop app-db))
:network/type type
:hardwallet (dissoc hardwallet :secrets)
:supported-biometric-auth supported-biometric-auth
:view-id view-id
:push-notifications/stored stored)})
:view-id view-id)})
(fx/defn initialize-views
[cofx]
(let [{{:multiaccounts/keys [multiaccounts] :as db} :db} cofx]
(if (empty? multiaccounts)
(navigation/navigate-to-cofx cofx :intro nil)
(let [multiaccount-with-notification
(when-not platform/desktop?
(notifications/lookup-contact-pubkey-from-hash
cofx
(first (keys (:push-notifications/stored db)))))
selection-fn
(if (not-empty multiaccount-with-notification)
#(filter (fn [multiaccount]
(= multiaccount-with-notification
(:public-key multiaccount)))
%)
#(sort-by :last-sign-in > %))
{:keys [address public-key photo-path name]} (first (selection-fn (vals multiaccounts)))]
(let [{:keys [address public-key photo-path name]} (first (#(sort-by :last-sign-in > %) (vals multiaccounts)))]
(multiaccounts.login/open-login cofx address photo-path name public-key)))))
(fx/defn initialize-multiaccounts
@ -74,7 +60,6 @@
::restore-native-settings nil
::open-multiaccounts #(re-frame/dispatch [::initialize-multiaccounts %])
:ui/listen-to-window-dimensions-change nil
:notifications/init nil
::network/listen-to-network-info nil
:hardwallet/register-card-events nil
:hardwallet/check-nfc-support nil
@ -94,4 +79,4 @@
(re-frame/reg-fx
::init-keystore
(fn []
(status/init-keystore)))
(status/init-keystore)))

View File

@ -24,8 +24,7 @@
:choose-key 2
:select-key-storage 3
:create-code 4
:confirm-code 5
:enable-notifications 6})
:confirm-code 5})
(defn decrement-step [step]
(let [inverted (map-invert step-kw-to-num)]
@ -84,22 +83,22 @@
{:events [:intro-wizard/navigate-back]}
[{:keys [db] :as cofx} skip-alert?]
(let [step (get-in db [:intro-wizard :step])]
;; Cannot go back after account has been created
;; and we're on "Enable notifications" step
(when-not (= :enable-notifications step)
(if (and (= step :choose-key) (not skip-alert?))
(utils/show-question
(i18n/label :t/are-you-sure-to-cancel)
(i18n/label :t/you-will-start-from-scratch)
#(re-frame/dispatch [:intro-wizard/navigate-back true]))
(fx/merge cofx
dec-step
navigation/navigate-back)))))
(if (and (= step :choose-key) (not skip-alert?))
(utils/show-question
(i18n/label :t/are-you-sure-to-cancel)
(i18n/label :t/you-will-start-from-scratch)
#(re-frame/dispatch [:intro-wizard/navigate-back true]))
(fx/merge cofx
dec-step
navigation/navigate-back))))
(fx/defn exit-wizard [{:keys [db] :as cofx}]
(fx/defn exit-wizard
[{:keys [db] :as cofx}]
(fx/merge cofx
{:db (dissoc db :intro-wizard)}
(navigation/navigate-to-cofx :home nil)))
(navigation/navigate-reset {:index 0
:key :chat-stack
:actions [{:routeName :home}]})))
(fx/defn init-key-generation
[{:keys [db] :as cofx}]
@ -131,13 +130,9 @@
(cond (confirm-failure? db)
(on-confirm-failure cofx)
(or (= step :enable-notifications)
(and (not first-time-setup?) (= step :confirm-code)
(:multiaccounts/login db)))
(fx/merge cofx
(when (and (= step :enable-notifications) (not skip?))
{:notifications/request-notifications-permissions nil})
exit-wizard)
(and (= step :confirm-code)
(:multiaccounts/login db))
(exit-wizard cofx)
(= step :generate-key)
(init-key-generation cofx)
@ -160,11 +155,7 @@
:step next-step)}
(when (= step :create-code)
store-key-code)
(when (= next-step :enable-notifications)
(navigation/navigate-reset {:index 0
:actions [{:routeName :create-multiaccount-enable-notifications}]}))
(when (not= next-step :enable-notifications)
(navigation/navigate-to-cofx (->> next-step name (str "create-multiaccount-") keyword) nil)))))))
(navigation/navigate-to-cofx (->> next-step name (str "create-multiaccount-") keyword) nil))))))
(defn prepare-accounts-data
[multiaccount]

View File

@ -11,7 +11,6 @@
[status-im.fleet.core :as fleet]
[status-im.i18n :as i18n]
[status-im.native-module.core :as status]
[status-im.notifications.core :as notifications]
[status-im.protocol.core :as protocol]
[status-im.stickers.core :as stickers]
[status-im.ui.screens.mobile-network-settings.events :as mobile-network]
@ -131,15 +130,14 @@
(fx/defn get-config-callback
{:events [::get-config-callback]}
[{:keys [db] :as cofx} config stored-pns]
[{:keys [db] :as cofx} config]
(let [[{:keys [address] :as multiaccount} current-network networks] (deserialize-config config)
network-id (str (get-in networks [current-network :config :NetworkId]))]
(fx/merge cofx
{:db (assoc db
:networks/current-network current-network
:networks/networks networks
:multiaccount multiaccount)
:notifications/request-notifications-permissions nil}
:multiaccount multiaccount)}
;; NOTE: initializing mailserver depends on user mailserver
;; preference which is why we wait for config callback
(protocol/initialize-protocol {:default-mailserver true})
@ -151,14 +149,11 @@
(mobile-network/on-network-status-change)
(chaos-mode/check-chaos-mode)
(when-not platform/desktop?
(initialize-wallet))
(when stored-pns
(notifications/process-stored-event address stored-pns)))))
(initialize-wallet)))))
(fx/defn login-only-events
[{:keys [db] :as cofx} address password save-password?]
(let [stored-pns (:push-notifications/stored db)
auth-method (:auth-method db)
(let [auth-method (:auth-method db)
new-auth-method (if save-password?
(when-not (or (= "biometric" auth-method) (= "password" auth-method))
(if (= auth-method "biometric-prepare") "biometric" "password"))
@ -178,7 +173,7 @@
:on-success #(re-frame/dispatch [::protocol/initialize-protocol {:mailservers (or % [])}])}
{:method "settings_getConfigs"
:params [["multiaccount" "current-network" "networks"]]
:on-success #(re-frame/dispatch [::get-config-callback % stored-pns])}]}
:on-success #(re-frame/dispatch [::get-config-callback %])}]}
(when save-password?
(keychain/save-user-password address password))
(when new-auth-method
@ -243,8 +238,7 @@
:multiaccount))
::json-rpc/call
[{:method "web3_clientVersion"
:on-success #(re-frame/dispatch [::initialize-web3-client-version %])}]
:notifications/get-fcm-token nil}
:on-success #(re-frame/dispatch [::initialize-web3-client-version %])}]}
;;FIXME
(when nodes
(fleet/set-nodes :eth.contract nodes))
@ -318,4 +312,4 @@
(fx/merge cofx
{:db (assoc-in db [:multiaccounts/login :save-password?] true)}
(biometric/show-message bioauth-message bioauth-code)
(open-login-callback nil)))))
(open-login-callback nil)))))

View File

@ -1,6 +1,6 @@
(ns status-im.multiaccounts.update.core
(:require [status-im.contact.db :as contact.db]
[status-im.contact.device-info :as device-info]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.transport.message.contact :as message.contact]
[status-im.transport.message.protocol :as protocol]
@ -10,9 +10,8 @@
(fx/defn multiaccount-update-message [{:keys [db] :as cofx}]
(let [multiaccount (:multiaccount db)
fcm-token (get-in db [:notifications :fcm-token])
{:keys [name preferred-name photo-path address]} multiaccount]
(message.contact/ContactUpdate. (or preferred-name name) photo-path address fcm-token (device-info/all cofx))))
(message.contact/ContactUpdate. (or preferred-name name) photo-path address nil nil)))
(fx/defn send-multiaccount-update [cofx]
(protocol/send

View File

@ -187,10 +187,6 @@
[data account hashed-password callback]
(.signTypedData (status) data account hashed-password callback))
(defn send-data-notification
[{:keys [data-payload tokens] :as m} on-result]
(.sendDataNotification (status) data-payload tokens on-result))
(defn send-logs [dbJson js-logs callback]
(.sendLogs (status) dbJson js-logs callback))
@ -271,4 +267,3 @@
"Generate a icon based on a string, synchronously"
[seed]
(.identicon (status) seed))

View File

@ -1,29 +0,0 @@
(ns status-im.notifications.background
(:require [goog.object :as object]
[re-frame.core :as re-frame]
[status-im.react-native.js-dependencies :as rn]
[status-im.notifications.core :as notifications]
[status-im.i18n :as i18n]
[cljs.core.async :as async]
[taoensso.timbre :as log]
[status-im.utils.platform :as platform]))
(when-not platform/desktop?
(def firebase (object/get rn/react-native-firebase "default")))
(defn message-handler-fn []
;; message-js is firebase.messaging.RemoteMessage: https://github.com/invertase/react-native-firebase-docs/blob/master/docs/messaging/reference/RemoteMessage.md
(fn [message-js]
(js/Promise.
(fn [on-success on-error]
(try
(when message-js
(log/debug "message-handler-fn called" (js/JSON.stringify message-js))
(let [decoded-payload (notifications/decode-notification-payload message-js)]
(when decoded-payload
(log/debug "dispatching :notifications.callback/on-message to display background message" decoded-payload)
(re-frame/dispatch [:notifications.callback/on-message decoded-payload {:force true}]))))
(on-success)
(catch :default e
(log/warn "failed to handle background message" e)
(on-error e)))))))

View File

@ -1,382 +0,0 @@
(ns status-im.notifications.core
(:require [goog.object :as object]
[re-frame.core :as re-frame]
[status-im.react-native.js-dependencies :as rn]
[taoensso.timbre :as log]
[status-im.i18n :as i18n]
[status-im.multiaccounts.core :as multiaccounts]
[status-im.multiaccounts.model :as multiaccounts.model]
[status-im.contact.db :as contact.db]
[status-im.chat.models :as chat-model]
[status-im.contact.db :as contact.db]
[status-im.ethereum.core :as ethereum]
[status-im.i18n :as i18n]
[status-im.react-native.js-dependencies :as rn]
[status-im.utils.fx :as fx]
[status-im.utils.platform :as platform]
[status-im.utils.utils :as utils]
[taoensso.timbre :as log]))
;; Work in progress namespace responsible for push notifications and interacting
;; with Firebase Cloud Messaging.
(def ^:private pn-message-id-hash-length 10)
(def ^:private pn-pubkey-hash-length 10)
(def ^:private pn-pubkey-length 132)
(def ^:private pull-recent-messages-window (* 15 60))
(when-not platform/desktop?
(def firebase (object/get rn/react-native-firebase "default")))
;; NOTE: Only need to explicitly request permissions on iOS.
(defn request-permissions []
(when-not platform/desktop?
(-> (.requestPermission (.messaging firebase))
(.then
(fn [_]
(log/debug "notifications-granted"))
(fn [_]
(log/debug "notifications-denied"))))))
(defn valid-notification-payload?
[{:keys [from to]}]
(and from to
(or
;; is it full pubkey?
(and (= (.-length from) pn-pubkey-length)
(= (.-length to) pn-pubkey-length))
;; partially deanonymized
(and (= (.-length from) pn-pubkey-hash-length)
(= (.-length to) pn-pubkey-length))
;; or is it an anonymized pubkey hash (v2 payload)?
(and (= (.-length from) pn-pubkey-hash-length)
(= (.-length to) pn-pubkey-hash-length)))))
(defn anonymize-pubkey
[pubkey]
"Anonymize a public key, if needed, by hashing it and taking the first 4 bytes"
(if (= (count pubkey) pn-pubkey-hash-length)
pubkey
(apply str (take pn-pubkey-hash-length (ethereum/sha3 pubkey)))))
(defn encode-notification-payload
[{:keys [from to id] :as payload}]
(if (valid-notification-payload? payload)
{:msg-v2 (js/JSON.stringify #js {:from (anonymize-pubkey from)
:to (anonymize-pubkey to)
:id (apply str (take pn-message-id-hash-length id))})}
(throw (str "Invalid push notification payload" payload))))
(when platform/desktop?
(defn handle-initial-push-notification [] ())) ;; no-op
(when-not platform/desktop?
(def channel-id "status-im")
(def channel-name "Status")
(def sound-name "message.wav")
(def group-id "im.status.ethereum.MESSAGE")
(def icon "ic_stat_status_notification")
(defn- hash->contact [hash-or-pubkey multiaccounts]
(let [hash (anonymize-pubkey hash-or-pubkey)]
(->> multiaccounts
(filter #(= (anonymize-pubkey (:public-key %)) hash))
first)))
(defn- hash->pubkey [hash multiaccounts]
(:public-key (hash->contact hash multiaccounts)))
(defn lookup-contact-pubkey-from-hash
[{:keys [db] :as cofx} contact-pubkey-or-hash]
"Tries to deanonymize a given contact pubkey hash by looking up the
full pubkey (if db is unlocked) in :multiaccount and, if not found,
in :contacts/contacts.
Returns original value if not a hash (e.g. already a public key)."
(if (and contact-pubkey-or-hash
(= (count contact-pubkey-or-hash) pn-pubkey-hash-length))
(if-let [multiaccount-pubkey (hash->pubkey contact-pubkey-or-hash
[(:multiaccount db)])]
multiaccount-pubkey
(if (multiaccounts.model/logged-in? cofx)
;; TODO: for simplicity we're doing a linear lookup of the contacts,
;; but we might want to build a map of hashed pubkeys to pubkeys
;; for this purpose
(hash->pubkey contact-pubkey-or-hash
(contact.db/get-active-contacts (:contacts/contacts db)))
(do
(log/warn "failed to lookup contact from hash, not logged in")
contact-pubkey-or-hash)))
contact-pubkey-or-hash))
(defn parse-notification-v1-payload [msg-json]
(let [msg (js/JSON.parse msg-json)]
{:from (object/get msg "from")
:to (object/get msg "to")}))
(defn parse-notification-v2-payload [msg-v2-json]
(let [msg (js/JSON.parse msg-v2-json)]
{:from (object/get msg "from")
:to (object/get msg "to")
:id (object/get msg "id")}))
(defn decode-notification-payload [message-js]
;; message-js.-data is Notification.data():
;; https://github.com/invertase/react-native-firebase/blob/adcbeac3d11585dd63922ef178ff6fd886d5aa9b/src/modules/notifications/Notification.js#L79
(let [data-js (.. message-js -data)
msg-v2-json (object/get data-js "msg-v2")]
(try
(let [payload (if msg-v2-json
(parse-notification-v2-payload msg-v2-json)
(parse-notification-v1-payload (object/get data-js "msg")))]
(if (valid-notification-payload? payload)
payload
(log/warn "failed to retrieve notification payload from"
(js/JSON.stringify data-js))))
(catch :default e
(log/debug "failed to parse" (js/JSON.stringify data-js)
"exception:" e)))))
(defn rehydrate-payload
[cofx {:keys [from to id] :as decoded-payload}]
"Takes a payload with hashed pubkeys and returns a payload with the real
(matched) pubkeys"
{:from (lookup-contact-pubkey-from-hash cofx from)
:to (lookup-contact-pubkey-from-hash cofx to)
;; TODO: Rehydrate message id
:id id})
(defn- get-contact-name [{:keys [db] :as cofx} from]
(if (multiaccounts.model/logged-in? cofx)
(:name (hash->contact from (-> db :contacts/contacts vals)))
(anonymize-pubkey from)))
(defn- build-notification [{:keys [title body decoded-payload]}]
(let [native-notification
(clj->js
(merge
{:title title
:body body
:data (clj->js (encode-notification-payload decoded-payload))
:sound sound-name}
(when-let [msg-id (:id decoded-payload)]
;; We must prefix the notification ID, otherwise it will
;; cause a crash in iOS
{:notificationId (str "hash:" msg-id)})))]
(firebase.notifications.Notification.
native-notification (.notifications firebase))))
(defn display-notification [{:keys [title body] :as params}]
(let [notification (build-notification params)]
(when platform/android?
(.. notification
(-android.setChannelId channel-id)
(-android.setAutoCancel true)
(-android.setPriority firebase.notifications.Android.Priority.High)
(-android.setCategory firebase.notifications.Android.Category.Message)
(-android.setGroup group-id)
(-android.setSmallIcon icon)))
(.. firebase
notifications
(displayNotification notification)
(then #(log/debug "Display Notification" title body))
(catch (fn [error]
(log/debug "Display Notification error" title body error))))))
(defn get-fcm-token []
(-> (.getToken (.messaging firebase))
(.then (fn [x]
(log/debug "get-fcm-token:" x)
(re-frame/dispatch
[:notifications.callback/get-fcm-token-success x])))))
(defn create-notification-channel []
(let [channel (firebase.notifications.Android.Channel.
channel-id
channel-name
firebase.notifications.Android.Importance.High)]
(.setSound channel sound-name)
(.setShowBadge channel true)
(.enableVibration channel true)
(.. firebase
notifications
-android
(createChannel channel)
(then #(log/debug "Notification channel created:" channel-id)
#(log/error "Notification channel creation error:" channel-id %)))))
(defn- show-notification?
"Ignore push notifications from unknown contacts or removed chats"
[{:keys [db] :as cofx} {:keys [from] :as rehydrated-payload}]
(and (valid-notification-payload? rehydrated-payload)
(multiaccounts.model/logged-in? cofx)
(some #(= (:public-key %) from)
(contact.db/get-active-contacts (:contacts/contacts db)))
(some #(= (:chat-id %) from)
(vals (:chats db)))))
(fx/defn handle-on-message
[{:keys [db now] :as cofx} decoded-payload {:keys [force]}]
(let [view-id (:view-id db)
current-chat-id (:current-chat-id db)
app-state (:app-state db)
rehydrated-payload (rehydrate-payload cofx decoded-payload)
from (:from rehydrated-payload)]
(log/debug "handle-on-message" "app-state:" app-state
"view-id:" view-id "current-chat-id:" current-chat-id
"from:" from "force:" force)
(merge
(when (and (= (count from) pn-pubkey-length)
(show-notification? cofx rehydrated-payload))
{:dispatch [:mailserver/fetch-history from (- (quot now 1000) pull-recent-messages-window)]})
(when (or force
(and
(not= app-state "active")
(show-notification? cofx rehydrated-payload)))
{:db
(assoc-in db [:push-notifications/stored (:to rehydrated-payload)]
(js/JSON.stringify (clj->js rehydrated-payload)))
:notifications/display-notification
{:title (get-contact-name cofx from)
:body (i18n/label :notifications-new-message-body)
:decoded-payload rehydrated-payload}}))))
(fx/defn handle-push-notification-open
[{:keys [db] :as cofx} decoded-payload {:keys [stored?] :as ctx}]
(let [current-public-key (multiaccounts.model/current-public-key cofx)
nav-opts (when stored? {:navigation-reset? true})
rehydrated-payload (rehydrate-payload cofx decoded-payload)
from (:from rehydrated-payload)
to (:to rehydrated-payload)]
(log/debug "handle-push-notification-open"
"current-public-key:" current-public-key
"rehydrated-payload:" rehydrated-payload "stored?:" stored?)
(if (= to current-public-key)
(fx/merge cofx
{:db (update db :push-notifications/stored dissoc to)}
(chat-model/navigate-to-chat from nav-opts))
{:db (assoc-in db [:push-notifications/stored to]
(js/JSON.stringify (clj->js rehydrated-payload)))})))
;; https://github.com/invertase/react-native-firebase/blob/adcbeac3d11585dd63922ef178ff6fd886d5aa9b/src/modules/notifications/Notification.js#L13
(defn handle-notification-open-event [event]
(log/debug "handle-notification-open-event" event)
(let [decoded-payload (decode-notification-payload (.. event -notification))]
(when decoded-payload
(re-frame/dispatch
[:notifications/notification-open-event-received decoded-payload nil]))))
(defn handle-initial-push-notification []
"This method handles pending push notifications.
It is only needed to handle PNs from legacy clients
(which use firebase.notifications API)"
(log/debug "Handle initial push notifications")
(.. firebase
notifications
getInitialNotification
(then (fn [event]
(log/debug "getInitialNotification" event)
(when event
(handle-notification-open-event event))))))
(defn setup-token-refresh-callback []
(.onTokenRefresh
(.messaging firebase)
(fn [x]
(log/debug "onTokenRefresh:" x)
(re-frame/dispatch [:notifications.callback/get-fcm-token-success x]))))
(defn setup-on-notification-callback []
"Calling onNotification is only needed so that we're able to receive PNs"
"while in foreground from older clients who are still relying"
"on the notifications API. Once that is no longer a consideration"
"we can remove this method"
(log/debug "calling onNotification")
(.onNotification
(.notifications firebase)
(fn [message-js]
(log/debug "handle-on-notification-callback called")
(let [decoded-payload (decode-notification-payload message-js)]
(log/debug "handle-on-notification-callback payload:" decoded-payload)
(when decoded-payload
(re-frame/dispatch
[:notifications.callback/on-message decoded-payload]))))))
(defn setup-on-message-callback []
(log/debug "calling onMessage")
(.onMessage
(.messaging firebase)
(fn [message-js]
(log/debug "handle-on-message-callback called")
(let [decoded-payload (decode-notification-payload message-js)]
(log/debug "handle-on-message-callback decoded-payload:"
decoded-payload)
(when decoded-payload
(re-frame/dispatch
[:notifications.callback/on-message decoded-payload]))))))
(defn setup-on-notification-opened-callback []
(log/debug "setup-on-notification-opened-callback")
(.. firebase
notifications
(onNotificationOpened handle-notification-open-event)))
(defn init []
(log/debug "Init notifications")
(setup-token-refresh-callback)
(setup-on-message-callback)
(setup-on-notification-callback)
(setup-on-notification-opened-callback)
(when platform/android?
(create-notification-channel))
(handle-initial-push-notification)))
(fx/defn process-stored-event
[{:keys [db] :as cofx} address stored-pns]
(when-not platform/desktop?
(if (multiaccounts.model/logged-in? cofx)
(let [current-multiaccount (:multiaccount db)
current-address (:address current-multiaccount)
current-multiaccount-pubkey (:public-key current-multiaccount)
stored-pn-val-json (or (get stored-pns current-multiaccount-pubkey)
(get stored-pns (anonymize-pubkey current-multiaccount-pubkey)))
stored-pn-payload (if (= (first stored-pn-val-json) \{)
(js->clj (js/JSON.parse stored-pn-val-json) :keywordize-keys true)
{:from stored-pn-val-json
:to current-multiaccount-pubkey})
from (lookup-contact-pubkey-from-hash cofx (:from stored-pn-payload))
to (lookup-contact-pubkey-from-hash cofx (:to stored-pn-payload))]
(when (and from
(not (contact.db/blocked? db from))
(= address current-address))
(log/debug "process-stored-event" "address" address "from" from "to" to)
(handle-push-notification-open cofx
stored-pn-payload
{:stored? true})))
(log/error "process-stored-event called without user being logged in!"))))
(re-frame/reg-fx
:notifications/display-notification
display-notification)
(re-frame/reg-fx
:notifications/init
(fn []
(cond
platform/android?
(init)
platform/ios?
(utils/set-timeout init 100))))
(re-frame/reg-fx
:notifications/get-fcm-token
(fn [_]
(when platform/mobile?
(get-fcm-token))))
(re-frame/reg-fx
:notifications/request-notifications-permissions
(fn [_]
(request-permissions)))

View File

@ -4,7 +4,6 @@
[status-im.chat.models :as models.chat]
[status-im.contact.core :as contact]
[status-im.contact.db :as contact.db]
[status-im.contact.device-info :as device-info]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.i18n :as i18n]
[status-im.multiaccounts.model :as multiaccounts.model]
@ -66,11 +65,10 @@
(sort (partial compare-installation our-installation-id) installations))
(defn pair-installation [cofx]
(let [fcm-token (get-in cofx [:db :notifications :fcm-token])
installation-id (get-in cofx [:db :multiaccount :installation-id])
(let [installation-id (get-in cofx [:db :multiaccount :installation-id])
installation-name (get-in cofx [:db :pairing/installations installation-id :name])
device-type utils.platform/os]
(protocol/send (transport.pairing/PairInstallation. installation-id device-type installation-name fcm-token) nil cofx)))
(protocol/send (transport.pairing/PairInstallation. installation-id device-type installation-name nil) nil cofx)))
(fx/defn confirm-message-processed
[cofx confirmation]
@ -88,11 +86,8 @@
[old-contact new-contact] (sort-by :last-updated [remote local])]
(-> local
(merge new-contact)
(assoc :device-info (device-info/merge-info (:last-updated new-contact)
(:device-info old-contact)
(vals (:device-info new-contact)))
;; we only take system tags from the newest contact version
:system-tags (:system-tags new-contact)))))
(assoc ;; we only take system tags from the newest contact version
:system-tags (:system-tags new-contact)))))
(def merge-contacts (partial merge-with merge-contact))
@ -124,11 +119,9 @@
(fx/defn set-name
"Set the name of the device"
[{:keys [db] :as cofx} installation-name]
(let [fcm-token (get-in cofx [:db :notifications :fcm-token])
our-installation-id (get-in db [:multiaccount :installation-id])]
(let [our-installation-id (get-in db [:multiaccount :installation-id])]
{:pairing/set-installation-metadata [[our-installation-id {:name installation-name
:deviceType utils.platform/os
:fcmToken fcm-token}]]}))
:deviceType utils.platform/os}]]}))
(fx/defn init [cofx]
{:pairing/get-our-installations nil})
@ -350,15 +343,12 @@
(confirm-message-processed cofx confirmation))))
(defn handle-pair-installation
[{:keys [db] :as cofx} {:keys [name
fcm-token
installation-id
[{:keys [db] :as cofx} {:keys [name installation-id
device-type]} timestamp sender]
(if (and (= sender (multiaccounts.model/current-public-key cofx))
(not= (get-in db [:multiaccount :installation-id]) installation-id))
{:pairing/set-installation-metadata [[installation-id {:name name
:deviceType device-type
:fcmToken fcm-token}]]}
:deviceType device-type}]]}
(confirm-message-processed cofx (:metadata cofx))))
(fx/defn update-installation [{:keys [db]} installation-id metadata]
@ -366,8 +356,7 @@
assoc
:installation-id installation-id
:name (:name metadata)
:device-type (:deviceType metadata)
:fcmToken (:fcmToken metadata))})
:device-type (:deviceType metadata))})
(fx/defn load-installations [{:keys [db]} installations]
{:db (assoc db :pairing/installations (reduce
@ -377,7 +366,6 @@
:name (:name metadata)
:timestamp (:timestamp metadata)
:device-type (:deviceType metadata)
:fcm-token (:fcmToken metadata)
:enabled? enabled}))
{}
installations))})

View File

@ -20,7 +20,6 @@
:opt-un [:contact/system-tags
:contact/last-updated
:contact/last-online
:contact/fcm-token
:pairing/pending?
:contact/tags]))
(spec/def :pairing/contacts (spec/nilable (spec/map-of :global/not-empty-string :pairing/contact)))
@ -77,9 +76,9 @@
:message/message-seen :message/message-seen
:message/group-membership-update :message/group-membership-update))
(spec/def :message/contact-request (spec/keys :req-un [:contact/name ::profile-image :contact/address :contact/fcm-token]))
(spec/def :message/contact-update (spec/keys :req-un [:contact/name ::profile-image :contact/address :contact/fcm-token]))
(spec/def :message/contact-request-confirmed (spec/keys :req-un [:contact/name ::profile-image :contact/address :contact/fcm-token]))
(spec/def :message/contact-request (spec/keys :req-un [:contact/name ::profile-image :contact/address]))
(spec/def :message/contact-update (spec/keys :req-un [:contact/name ::profile-image :contact/address]))
(spec/def :message/contact-request-confirmed (spec/keys :req-un [:contact/name ::profile-image :contact/address]))
(spec/def :message/new-contact-key (spec/keys :req-un [::sym-key ::topic ::message]))
(spec/def :message/message-seen (spec/keys :req-un [:message/ids]))

View File

@ -3,7 +3,6 @@
(:require [goog.object :as o]
[re-frame.core :as re-frame]
[status-im.chat.models.message :as models.message]
[status-im.contact.device-info :as device-info]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.ethereum.core :as ethereum]
[status-im.transport.message.contact :as contact]
@ -132,21 +131,7 @@
(remove-hash cofx envelope-hash))
(when-let [{:keys [from]} (get-in db [:chats chat-id :messages message-id])]
(let [{:keys [fcm-token]} (get-in db [:contacts/contacts chat-id])
;; We pick the last max-installations devices
fcm-tokens
(as-> (get-in db [:contacts/contacts chat-id :device-info]) $
(vals $)
(sort-by :timestamp $)
(reverse $)
(map :fcm-token $)
(into #{} $)
(conj $ fcm-token)
(filter identity $)
(take (inc config/max-installations) $))]
(fx/merge cofx
(check-confirmations status chat-id message-id)
(models.message/send-push-notification chat-id message-id fcm-tokens status)))))))
(check-confirmations cofx status chat-id message-id)))))
(fx/defn update-envelopes-status
[{:keys [db] :as cofx} envelope-hashes status]
@ -170,13 +155,10 @@
#(or % {:pending-confirmations messages-count})))})
(defn- own-info [db]
(let [{:keys [name photo-path address]} (:multiaccount db)
fcm-token (get-in db [:notifications :fcm-token])]
(let [{:keys [name photo-path address]} (:multiaccount db)]
{:name name
:profile-image photo-path
:address address
:device-info (device-info/all {:db db})
:fcm-token fcm-token}))
:address address}))
(fx/defn resend-contact-request [cofx own-info chat-id {:keys [sym-key topic]}]
(protocol/send (contact/map->ContactRequest own-info)

View File

@ -4,7 +4,7 @@
[taoensso.timbre :as log]))
(defrecord PairInstallation
[installation-id device-type name fcm-token]
[installation-id device-type name _]
protocol/StatusMessage
(validate [this]
(if (spec/valid? :message/pair-installation this)

View File

@ -25,20 +25,20 @@
(deftype ContactRequestHandler []
Object
(tag [this v] "c2")
(rep [this {:keys [name profile-image address fcm-token device-info]}]
#js [name profile-image address fcm-token device-info]))
(rep [this {:keys [name profile-image address]}]
#js [name profile-image address nil nil]))
(deftype ContactRequestConfirmedHandler []
Object
(tag [this v] "c3")
(rep [this {:keys [name profile-image address fcm-token device-info]}]
#js [name profile-image address fcm-token device-info]))
(rep [this {:keys [name profile-image address]}]
#js [name profile-image address nil nil]))
(deftype ContactUpdateHandler []
Object
(tag [this v] "c6")
(rep [this {:keys [name profile-image address fcm-token device-info]}]
#js [name profile-image address fcm-token device-info]))
(rep [this {:keys [name profile-image address]}]
#js [name profile-image address nil nil]))
;; It's necessary to support old clients understanding only older, verbose command content (`release/0.9.25` and older)
(defn- new->legacy-command-data [{:keys [command-path params] :as content}]
@ -86,8 +86,8 @@
(deftype PairInstallationHandler []
Object
(tag [this v] "p2")
(rep [this {:keys [name installation-id device-type fcm-token]}]
#js [installation-id device-type name fcm-token]))
(rep [this {:keys [name installation-id device-type]}]
#js [installation-id device-type name nil]))
(def writer (transit/writer :json
{:handlers
@ -132,24 +132,24 @@
;; Here we only need to call the record with the arguments parsed from the clojure datastructures
(def reader (transit/reader :json
{:handlers
{"c2" (fn [[name profile-image address fcm-token device-info]]
(contact/ContactRequest. name profile-image address fcm-token device-info))
"c3" (fn [[name profile-image address fcm-token device-info]]
(contact/ContactRequestConfirmed. name profile-image address fcm-token device-info))
{"c2" (fn [[name profile-image address _ _]]
(contact/ContactRequest. name profile-image address nil nil))
"c3" (fn [[name profile-image address _ _]]
(contact/ContactRequestConfirmed. name profile-image address nil nil))
"c4" (fn [[legacy-content content-type message-type clock-value timestamp content]]
(let [[new-content new-content-type] (legacy->new-message-data (or content legacy-content) content-type)]
(protocol/Message. new-content new-content-type message-type clock-value timestamp)))
"c7" (fn [[content content-type message-type clock-value timestamp]]
(protocol/Message. content content-type message-type clock-value timestamp))
"c5" (fn [])
"c6" (fn [[name profile-image address fcm-token device-info]]
(contact/ContactUpdate. name profile-image address fcm-token device-info))
"c6" (fn [[name profile-image address _ _]]
(contact/ContactUpdate. name profile-image address nil nil))
"g5" (fn [[chat-id membership-updates message]]
(group-chat/GroupMembershipUpdate. chat-id membership-updates message))
"p1" (fn [[contacts account chat]]
(pairing/SyncInstallation. contacts account chat))
"p2" (fn [[installation-id device-type name fcm-token]]
(pairing/PairInstallation. installation-id device-type name fcm-token))}}))
"p2" (fn [[installation-id device-type name _]]
(pairing/PairInstallation. installation-id device-type name nil))}}))
(defn serialize
"Serializes a record implementing the StatusMessage protocol using the custom writers"

View File

@ -38,7 +38,6 @@
:peers-count 0
:node-info {}
:peers-summary []
:notifications {}
:my-profile/editing? false
:transport/filters {}
:transport/message-envelopes {}
@ -53,7 +52,6 @@
:initial-props {}
:desktop/desktop {:tab-view-id :home}
:dimensions/window (dimensions/window)
:push-notifications/stored {}
:registry {}
:stickers/packs-owned #{}
:stickers/packs-pending #{}
@ -167,9 +165,6 @@
;; DIMENSIONS
(spec/def :dimensions/window map?)
;; PUSH NOTIFICATIONS
(spec/def :push-notifications/stored (spec/nilable map?))
(spec/def ::hardwallet (spec/nilable map?))
(spec/def :stickers/packs (spec/nilable map?))
@ -215,7 +210,6 @@
:networks/manage
:bootnodes/manage
:universal-links/url
:push-notifications/stored
:browser/browsers
:browser/options
:new/open-dapp
@ -318,7 +312,6 @@
:wallet/wallet
:prices/prices
:prices/prices-loading?
:notifications/notifications
::supported-biometric-auth
::collectible
::collectibles

View File

@ -244,11 +244,6 @@
(i18n/label :t/processing)]]
[password-container confirm-failure? view-width]))
(defn enable-notifications []
[vector-icons/icon :main-icons/bell {:container-style {:align-items :center
:justify-content :center}
:width 66 :height 64}])
(defn bottom-bar [{:keys [step weak-password? encrypt-with-password?
forward-action
next-button-disabled?
@ -264,11 +259,11 @@
[react/view {:min-height 46 :max-height 46 :align-self :stretch}
[react/activity-indicator {:animating true
:size :large}]]
(#{:generate-key :recovery-success :enable-notifications} step)
(#{:generate-key :recovery-success} step)
(let [label-kw (case step
:generate-key :generate-a-key
:recovery-success :re-encrypt-key
:enable-notifications :intro-wizard-title6)]
:intro-wizard-title6)]
[react/view {:min-height 46 :max-height 46}
[components.common/button {:button-style styles/bottom-button
:on-press #(re-frame/dispatch
@ -292,12 +287,6 @@
(and (= step :create-code) weak-password?)
(and (= step :enter-phrase) next-button-disabled?))
:forward? true}]]])
(when (= :enable-notifications step)
[components.common/button {:button-style (assoc styles/bottom-button :margin-top 20)
:label (i18n/label :t/maybe-later)
:accessibility-label :skip-notifications-button
:on-press #(re-frame/dispatch [forward-action {:skip? true}])
:background? false}])
(when (or (= :generate-key step) (and processing? (= :recovery-success step)))
[react/text {:style (assoc styles/wizard-text :margin-top 20)}
@ -541,20 +530,6 @@
:forward-action (:forward-action wizard-state)}
wizard-state)]]]))
(defn wizard-enable-notifications []
[react/view {:style {:flex 1}}
[toolbar/toolbar
{:style {:border-bottom-width 0
:margin-top 16}}
nil
nil]
[react/view {:style {:flex 1
:justify-content :space-between}}
[top-bar {:step :enable-notifications}]
[enable-notifications]
[bottom-bar {:step :enable-notifications
:forward-action :intro-wizard/step-forward-pressed}]]])
(defview wizard-enter-phrase []
(letsubs [wizard-state [:intro-wizard/enter-phrase]]
[react/keyboard-avoiding-view {:style {:flex 1}}
@ -588,4 +563,3 @@
[bottom-bar {:step :recovery-success
:forward-action :multiaccounts.recover/re-encrypt-pressed
:processing? processing?}]]]))

View File

@ -150,14 +150,15 @@
[(when show-backup-seed?
[components.common/counter {:size 22} 1]) :chevron]
:on-press #(re-frame/dispatch [:navigate-to :privacy-and-security])}
{:icon :main-icons/notification
:title :t/notifications
:accessibility-label :notifications-button
;; TODO commented out for now, uncomment when notifications-settings view
;; is populated. Then remove :on-press below
;; :on-press #(re-frame/dispatch [:navigate-to :notifications-settings])
:on-press #(.openURL react/linking "app-settings://notification/status-im")
:accessories [:chevron]}
;; TODO commented out for now because it will be enabled for android notifications
#_{:icon :main-icons/notification
:title :t/notifications
:accessibility-label :notifications-button
;; TODO commented out for now, uncomment when notifications-settings view
;; is populated. Then remove :on-press below
;; :on-press #(re-frame/dispatch [:navigate-to :notifications-settings])
:on-press #(.openURL react/linking "app-settings://notification/status-im")
:accessories [:chevron]}
{:icon :main-icons/mobile
:title :t/sync-settings
:accessibility-label :sync-settings-button

View File

@ -10,7 +10,6 @@
:create-multiaccount-select-key-storage
:create-multiaccount-create-code
:create-multiaccount-confirm-code
:create-multiaccount-enable-notifications
:recover-multiaccount-enter-phrase
:recover-multiaccount-select-storage
:recover-multiaccount-enter-password
@ -63,7 +62,6 @@
:create-multiaccount-select-key-storage
:create-multiaccount-create-code
:create-multiaccount-confirm-code
:create-multiaccount-enable-notifications
:recover-multiaccount-enter-phrase
:recover-multiaccount-select-storage
:recover-multiaccount-enter-password
@ -83,8 +81,8 @@
:hardwallet-setup
:hardwallet-success]))
:config (if
;; add view-id here if you'd like that view to be
;; first view when app is started
;; add view-id here if you'd like that view to be
;; first view when app is started
(#{:login :progress :multiaccounts :enter-pin-login :keycard-login-pin} view-id)
{:initialRouteName view-id}
{:initialRouteName :login})})

View File

@ -79,7 +79,6 @@
:create-multiaccount-select-key-storage intro/wizard-select-key-storage
:create-multiaccount-create-code intro/wizard-create-code
:create-multiaccount-confirm-code intro/wizard-confirm-code
:create-multiaccount-enable-notifications intro/wizard-enable-notifications
:recover-multiaccount-enter-phrase intro/wizard-enter-phrase
:recover-multiaccount-success intro/wizard-recovery-success
:recover-multiaccount-select-storage intro/wizard-select-key-storage

View File

@ -27,9 +27,6 @@
(def webview #js {:WebView #js {}})
(def status-keycard #js {:default #js {}})
(defrecord Notification [])
(def react-native-firebase #js {:default #js {:notifications #js {:Notification Notification}}})
(def desktop-linking #js {:addEventListener (fn [])})
(def desktop-shortcuts #js {:addEventListener (fn [])})

View File

@ -17,7 +17,6 @@
{:last-updated 0,
:address "eca8218b5ebeb2c47ba94c1b6e0a779d78fff7bc",
:name "User B",
:fcm-token nil,
:photo-path "photo1",
:last-online 0,
:public-key
@ -47,7 +46,6 @@
:public-key "0x048a2f8b80c60f89a91b4c1316e56f75b087f446e7b8701ceca06a40142d8efe1f5aa36bd0fee9e248060a8d5207b43ae98bef4617c18c71e66f920f324869c09f"}
{:last-updated 0
:name "User B"
:fcm-token nil
:photo-path "photo1"
:address "eca8218b5ebeb2c47ba94c1b6e0a779d78fff7bc"
:last-online 0

View File

@ -1,34 +0,0 @@
(ns status-im.test.contacts.device-info
(:require [cljs.test :refer-macros [deftest is testing]]
[status-im.contact.device-info :as device-info]))
(def device-list
{"2" {:installation-id "2"
:fcm-token "token-2"
:enabled? true}
"3" {:installation-id "3"
:fcm-token "token-3"
:enabled? false}
"4" {:installation-id "4"
:enabled? true}
"5" {:installation-id "5"
:fcm-token "token-5"
:enabled? true}})
(deftest device-info-all
(testing "no devices"
(is (= [{:id "1"
:fcm-token "token-1"}]
(device-info/all {:db {:multiaccount {:installation-id "1"}
:notifications {:fcm-token "token-1"}}})))
(testing "some devices"
(is (= [{:id "1"
:fcm-token "token-1"}
{:id "2"
:fcm-token "token-2"}
{:id "5"
:fcm-token "token-5"}]
(device-info/all {:db {:multiaccount {:installation-id "1"}
:pairing/installations device-list
:notifications {:fcm-token "token-1"}}}))))))

View File

@ -8,12 +8,6 @@
:name "name"
:photo-path "photo-path"
:tribute-to-talk "tribute-to-talk"
:device-info {"1" {:id "1"
:timestamp 1
:fcm-token "1"}
"2" {:id "2"
:timestamp 2
:fcm-token 3}}
:last-updated 1
:system-tags #{:a :b}}
expected-contact {:id "pk"
@ -21,12 +15,7 @@
:name "name"
:photoPath "photo-path"
:tributeToTalk "[\"~#'\",\"tribute-to-talk\"]"
:deviceInfo [{:installationId "1"
:timestamp 1
:fcmToken "1"}
{:installationId "2"
:timestamp 2
:fcmToken 3}]
:lastUpdated 1
:systemTags #{":a" ":b"}}]
(testing "->rpc"
@ -40,29 +29,15 @@
:address "address"
:name "name"
:photoPath "photo-path"
:tributeToTalk "[\"~#'\",\"tribute-to-talk\"]"
:deviceInfo [{:installationId "1"
:timestamp 1
:fcmToken "1"}
{:installationId "2"
:timestamp 2
:fcmToken 3}]
:lastUpdated 1
:tributeToTalk "[\"~#'\",\"tribute-to-talk\"]" :lastUpdated 1
:systemTags [":a" ":b"]}
expected-contact {:public-key "pk"
:address "address"
:name "name"
:photo-path "photo-path"
:tribute-to-talk "tribute-to-talk"
:device-info {"1" {:id "1"
:timestamp 1
:fcm-token "1"}
"2" {:id "2"
:timestamp 2
:fcm-token 3}}
:last-updated 1
:system-tags #{:a :b}}]
(testing "<-rpc"
(is (= expected-contact (c/<-rpc contact))))))

View File

@ -17,10 +17,7 @@
1
{:name "name"
:profile-image "image"
:address "address"
:device-info [{:id "1"
:fcm-token "token-1"}]
:fcm-token "token"})
:address "address"})
contact (get-in actual [:db :contacts/contacts public-key])]
(testing "it adds a new contact"
(is (= {:public-key public-key
@ -28,10 +25,6 @@
:name "name"
:last-updated 1000
:system-tags #{:contact/request-received}
:device-info {"1" {:id "1"
:timestamp 1
:fcm-token "token-1"}}
:fcm-token "token"
:address "address"}
contact)))))
(testing "the contact is already in contacts"
@ -42,42 +35,21 @@
:photo-path "old-image"
:name "old-name"
:last-updated 0
:device-info {"1" {:id "1"
:timestamp 0
:fcm-token "token-1"}
"2" {:id "2"
:timestamp 0
:fcm-token "token-2"}}
:system-tags #{:contact/added}
:fcm-token "old-token"
:address "old-address"}}}}
public-key
1
{:name "new-name"
:profile-image "new-image"
:device-info [{:id "2"
:fcm-token "token-2"}
{:id "3"
:fcm-token "token-3"}]
:address "new-address"
:fcm-token "new-token"})
:address "new-address"})
contact (get-in actual [:db :contacts/contacts public-key])]
(testing "it updates the contact and adds contact/request-received to system tags"
(is (= {:public-key public-key
:photo-path "new-image"
:name "new-name"
:last-updated 1000
:device-info {"1" {:id "1"
:fcm-token "token-1"
:timestamp 0}
"2" {:id "2"
:fcm-token "token-2"
:timestamp 1}
"3" {:id "3"
:fcm-token "token-3"
:timestamp 1}}
:system-tags #{:contact/added :contact/request-received}
:fcm-token "new-token"
:address "new-address"}
contact)))))
(testing "timestamp is equal to last-updated"
@ -88,14 +60,12 @@
:name "old-name"
:last-updated 1000
:system-tags #{:contact/added}
:fcm-token "old-token"
:address "old-address"}}}}
public-key
1
{:name "new-name"
:profile-image "new-image"
:address "new-address"
:fcm-token "new-token"})
:address "new-address"})
contact (get-in actual [:db :contacts/contacts public-key])]
(testing "it does nothing"
(is (nil? actual)))))
@ -107,14 +77,12 @@
:name "old-name"
:last-updated 1000
:system-tags #{:contact/added :contact/request-received}
:fcm-token "old-token"
:address "old-address"}}}}
public-key
0
{:name "new-name"
:profile-image "new-image"
:address "new-address"
:fcm-token "new-token"})
:address "new-address"})
contact (get-in actual [:db :contacts/contacts public-key])]
(testing "it does nothing"
(is (nil? actual))))))
@ -123,8 +91,7 @@
{:db {:contacts/contacts
{public-key {:public-key public-key
:photo-path "old-image"
:device-info {"1" {:id "1"
:fcm-token "token-1"}}
:name "old-name"
:last-updated 0
:system-tags #{:contact/added}}}}}
@ -137,8 +104,7 @@
(is (= {:public-key public-key
:photo-path "new-image"
:name "new-name"
:device-info {"1" {:id "1"
:fcm-token "token-1"}}
:last-updated 1000
:system-tags #{:contact/added :contact/request-received}
:address address} contact)))))

View File

@ -1,44 +0,0 @@
(ns status-im.test.notifications.core
(:require [cljs.test :refer-macros [deftest is testing]]
[status-im.notifications.core :as notifications]))
(deftest test-handle-push-notification-open
(testing "user's signing in having opened PN while signed out"
(is (= {:db {:multiaccount {:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}
:push-notifications/stored {}}
:dispatch [:navigate-to-chat "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de" {:navigation-reset? true}]}
(notifications/handle-push-notification-open {:db {:push-notifications/stored {}
:multiaccount {:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}}}
[:push-notification-opened {:from "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"
:to "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"
:stored? true}]))))
(testing "user's signed in"
(is (= {:db {:multiaccount {:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}
:push-notifications/stored {}}
:dispatch [:navigate-to-chat "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"]}
(notifications/handle-push-notification-open {:db {:push-notifications/stored {}
:multiaccount {:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}}}
[:push-notification-opened {:from "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"
:to "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}]))))
(testing "user's signed in into another multiaccount"
(is (= {}
(notifications/handle-push-notification-open {:db {:multiaccount {:public-key "0x04bc8bf4a91ab726bd98f2c54b3036caacaeea527867945ab839e9ad4e62696856d7f7fa485f68304de357e38a1553eac5592706a16fcf71fd821bbd6c796f9ab3"}}}
[:push-notification-opened {:from "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"
:to "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}]))))
(testing "user's not signed in"
(is (= {:db {:multiaccounts/multiaccounts {"bd36cd64e2621b054a3b7464ff1b3c4c304880e7" {:address "bd36cd64e2621b054a3b7464ff1b3c4c304880e7"
:photo-path "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX"
:name "Bob"
:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}}
:multiaccount {:public-key nil}
:push-notifications/stored {"0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"
"0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"}}
:dispatch [:ui/open-login "bd36cd64e2621b054a3b7464ff1b3c4c304880e7" "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX" "Bob"]}
(notifications/handle-push-notification-open {:db {:multiaccounts/multiaccounts {"bd36cd64e2621b054a3b7464ff1b3c4c304880e7" {:address "bd36cd64e2621b054a3b7464ff1b3c4c304880e7"
:photo-path "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX"
:name "Bob"
:public-key "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}}
:multiaccount {:public-key nil}
:push-notifications/stored {}}}
[:push-notification-opened {:from "0x045db1fdb16c4721ddf32e892c5156d9c7a7445482b84ccd41131eb7970f9d623629d86763c5c2a542ae372815125c27eb73535d583d3285bdbfa16ba37f42e2de"
:to "0x04d2e59a7501a7bc5bc8bf973a0ab95d06225e2b0f53d5f6be719d857c579bdc1b809bfbe0e8393343f9a5b63a9a90a1a58329c6d1c286d6929f01aaa5472ca9c2"}])))))

View File

@ -21,7 +21,7 @@
expected {:system-tags #{:contact/added}
:this-should-be-kept true
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
@ -35,7 +35,7 @@
:photo-path "photo-v2"}
expected {:system-tags #{:contact/added}
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
@ -47,7 +47,7 @@
:photo-path "photo-v2"}
expected {:system-tags #{:contact/added}
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
@ -62,7 +62,7 @@
:photo-path "photo-v2"}
expected {:system-tags #{}
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
@ -77,7 +77,7 @@
:photo-path "photo-v2"}
expected {:system-tags #{:contact/added}
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
@ -89,42 +89,7 @@
:photo-path "photo-v2"}
expected {:system-tags #{}
:last-updated 2
:device-info nil
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2)))))
(testing "device-info"
(let [contact-1 {:system-tags #{:contact/added}
:last-updated 1
:name "name-v1"
:device-info {"1" {:timestamp 1
:fcm-token "token-1"
:id "1"}
"2" {:timestamp 1
:fcm-token "token-2"
:id "2"}}
:photo-path "photo-v1"}
contact-2 {:system-tags #{:contact/added}
:last-updated 2
:name "name-v2"
:device-info {"2" {:timestamp 2
:fcm-token "token-2"
:id "2"}
"3" {:timestamp 2
:fcm-token "token-3"
:id "3"}}
:photo-path "photo-v2"}
expected {:system-tags #{:contact/added}
:last-updated 2
:device-info {"1" {:timestamp 1
:fcm-token "token-1"
:id "1"}
"2" {:timestamp 2
:fcm-token "token-2"
:id "2"}
"3" {:timestamp 2
:fcm-token "token-3"
:id "3"}}
:name "name-v2"
:photo-path "photo-v2"}]
(is (= expected (pairing/merge-contact contact-1 contact-2))))))
@ -179,12 +144,12 @@
"contact-2" old-contact-2
"contact-4" contact-4
"contact-5" remote-contact-5}}
expected {"contact-1" (assoc new-contact-1 :device-info nil)
"contact-2" (assoc new-contact-2 :device-info nil)
expected {"contact-1" new-contact-1
"contact-2" new-contact-2
"contact-3" contact-3
"contact-4" (assoc contact-4
:photo-path "generated")
"contact-5" (assoc local-contact-5 :device-info nil)}]
"contact-5" local-contact-5}]
(testing "not coming from us"
(is (not (:db (pairing/handle-sync-installation cofx sync-message "not-us")))))
(testing "coming from us"
@ -226,7 +191,6 @@
"2" {:has-bundle? false
:installation-id "2"}}}}
pair-message {:device-type "ios"
:fcm-token "fcm-token"
:name "name"
:installation-id "1"}]
(testing "not coming from us"
@ -234,7 +198,6 @@
(testing "coming from us"
(is (= [["1"
{:name "name"
:fcmToken "fcm-token"
:deviceType "ios"}]]
(:pairing/set-installation-metadata
(pairing/handle-pair-installation cofx pair-message 1 "us")))))))

View File

@ -13,7 +13,6 @@
[status-im.test.chat.models]
[status-im.test.chat.views.photos]
[status-im.test.transport.filters.core]
[status-im.test.contacts.device-info]
[status-im.test.data-store.chats]
[status-im.test.data-store.messages]
[status-im.test.data-store.contacts]
@ -92,7 +91,6 @@
'status-im.test.chat.views.photos
'status-im.test.transport.filters.core
'status-im.test.contacts.db
'status-im.test.contacts.device-info
'status-im.test.data-store.chats
'status-im.test.data-store.messages
'status-im.test.data-store.contacts

View File

@ -5,7 +5,6 @@
:tags #{}
:address "2f88d65f3cb52605a54a833ae118fb1363acccd2"
:name "Darkviolet Lightgreen Halcyon"
:fcm-token "cwigXoAk9R4:APA91bFZOy8vsCj9I9t6PYZXropyYEqAhKaVD2GxrURwvxe_Ay3zLrtJxeirp69se_5EOjS5i4T9xQnoPWrFTLfU9U7AUBdjxZtq5cnlP005bOY05p-psxGsQThMKQMeP5DJC9uxN0Ei"
:photo-path "data:image/png;base64iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX///+M2KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdPOdBAAABAHRSTlP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmfXxgAABnNJREFUeNoBaAaX+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5UBARL8TK8AAAAASUVORK5CYII="
:system-tags #{:contact/added}
:last-online 0
@ -13,7 +12,6 @@
{:last-updated 1547271764000
:address "b267ff8336ac10b3a1986c04a70ff91fb03d0b78"
:name "rv"
:fcm-token "dpVPtMBLuv8:APA91bEU4YuSz9yrc-vsiSl-IjdLSR5UpHm7yffaFlWQs_fvsTiK18ZcdYUbzA8iUoNuMVRNF_ngU7JdQInwNpXdGtNv_qcAFt0jhXHqf7dWY-kGJUBw9Ma8G_2fa40JLJchGVrzUIen"
:photo-path "data:image/png;base64iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAADAFBMVEX////VjNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwYzy6AAABAHRSTlP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmfXxgAABnNJREFUeNoBaAaX+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEAAAAAAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6IYA4bRtf+EAAAAASUVORK5CYII="
:system-tags #{:contact/added}
:last-online 0

View File

@ -84,13 +84,3 @@
(testing "http://get.status.im/blah"
(testing "it returns false"
(is (not (links/deep-link? "http://get.status.im/blah"))))))
(deftest process-stored-event
(testing "the url is in the database"
(testing "it returns the event"
(= "some-url"
(links/process-stored-event {:db {:universal-links/url "some-url"}}))))
(testing "the url is not in the database"
(testing "it returns nil"
(= nil
(links/process-stored-event {:db {}})))))