Git Product home page Git Product logo

mysterium-vpn-mobile's Introduction

MysteriumVPN: a decentralized VPN

Mobile VPN app for Mysterium Network.

Get it on F-Droid Get it on Google Play

Getting started (development)

  1. Install Android Studio
  2. brew install --cask android-studio
  3. Download project's firebase crashlytics config - google-services.json from https://console.firebase.google.com/u/1/project/mysterium-vpn/overview and place it in android/app

Local development

  • Build Mysterium Node from source code:

    util_scripts/build-node.sh
  • Uncomment local dependency in android/app/build.gradle:

    //implementation 'network.mysterium:mobile-node:0.8.1'
    implementation files('libs/Mysterium.aar')

Building release APK

  • Install Fastlane (if don't have it yet)

    brew install fastlane
  • Make release build:

    source fastlane/.env.local && fastlane android build

APK will be available under android/app/build/outputs/apk/release/app-release.apk

You can install this APK by:

  • uploading it to phone, or
  • using adb install android/app/build/outputs/apk/release/app-release.apk

Creating releases locally

cp fastlane/.env.local.dist fastlane/.env.local
vim fastlane/.env.local
  • Setup Fastlane, more info in fastlane/README.md

Releases

Internal release

  1. Create a PR with bumped fastlane/android_version_code (Google play store requires new version code for each release).
  2. Ater merge to master create new tag in github repository. See example commit.

Public release

Public releases are promoted and managed from the Google Play Console.

Updating CI image

Repository contains Dockerfile which includes OpenJDK and Fastlane to build, test and publish Android from Docker.

TAG=1.0.0
docker build -t mysteriumnetwork/mobile-ci:$TAG .
docker push mysteriumnetwork/mobile-ci:$TAG

Contributing

Bump mobile-node version

mysterium-vpn-mobile's People

Contributors

anjmao avatar arrnas avatar artemhryhorovgeniusee avatar chompomonim avatar creotiv avatar dependabot[bot] avatar donce avatar i-kulikov-geniusee avatar ignasbernotas avatar irynatsymbaliuk avatar irynatsymbaliukgeniusee avatar ivangeniusee avatar ivanpodibka avatar licaon-kter avatar mdomasevicius avatar mipo47 avatar mysteriumteam avatar otkd avatar patricevignola avatar poussinou avatar shlavik avatar shroomist avatar soffokl avatar tadaskay avatar waldz avatar zolia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mysterium-vpn-mobile's Issues

Can not import an account created with desktop client

I have backed up my mysterium desktop client account (on macos), and I would like to import this into my android mysterium client. However, in the anrdoid app, when I click on "import account" and then navigate to the backup file, it is impossible to select the file. The file is grayed out with a filename like "0x4j4kk...".

I understand that you can not use both clients at the same time with the same account. Nevertheless, I would like to permanently move my funds from the macos client to the android client, so this is not an issue for me.

High power consumption while idle

I was connected to mysterium network dvpn at night and my battery power remaining at that time is 37%, after 7 hour my mobile's battery was 3%

Screenshot_2021-08-20-07-01-44-56

Optimization is needed for the mysterium (android) app.

Build number/Version information: 1.0.6-rc0

Mainnet mobile app doesn't tries/retries identity registration on mainnet

Mobile app (Android, 1.1.5 mainnet build) doesn't tries/retries identity registration on mainnet.

Steps to reproduce

  1. identity 0xbc141d514d4520ba0dcf8a7956777b3f845d27a4 was registered on mobile app version 1.1.3
[17:40:16] dt1:~> curl -s https://testnet3-transactor.mysterium.network/api/v1/identity/0xbc141d514d4520ba0dcf8a7956777b3f845d27a4/status | jq .
[
  {
    "identity_id": "0xbC141d514D4520bA0dcf8A7956777B3f845d27a4",
    "status": "succeed",
    "tx_hash": "0xc76a95c6d2a2a7f83a83ddc52ecffa05b2c533ab2a890f3cf345899638482557",
    "created_at": "2021-11-16T15:39:16.415Z",
    "updated_at": "2021-11-16T15:39:16.415Z",
    "bounty_amount": 1e+18,
    "chain_id": 80001
  }
]
  1. app was upgraded to 1.1.5 mainnet release
  2. account was topped up via ETH with real MYST on mainnet
  3. I tried to connect to nodes, but traffic was not coming after connection was established. Most likely because app wasn't able to sign first payment promise required right after connection start.
  4. I exported identity, imported it into node CLI and manually issued registration request. Registration result:
[17:40:19] dt1:~> curl -s https://transactor.mysterium.network/api/v1/identity/0xbc141d514d4520ba0dcf8a7956777b3f845d27a4/status | jq .
[
  {
    "identity_id": "0xbC141d514D4520bA0dcf8A7956777B3f845d27a4",
    "status": "succeed",
    "tx_hash": "0x774e0c4b58de9c62b8d8ac9f6dc0e4fde549b1be6107e0ff1ed86a7685061982",
    "created_at": "2021-11-17T15:20:53.047Z",
    "updated_at": "2021-11-17T15:20:53.047Z",
    "bounty_amount": 998575652174050000,
    "chain_id": 137
  }
]
  1. After that app started working OK on mobile.

Output (5) indicates that registration attempt I made manually is the only attempt was taken in mainnet. So app didn't even tried.

Proposed solution

It seems proper migration of registration status is required on update to mainnet app version. Registration in testnet3 doesn't mean registration in mainnet. Another way is to handle errors from API which indicate identity is not registered or check registration each time at startup.

Payments

This epic should include everything related to payments and its implementation in our desktop / mobile apps.

Occassional wallet screen (account) crash

    --------- beginning of crash
2021-06-29 10:47:50.223 14258-14258/network.mysterium.vpn E/AndroidRuntime: FATAL EXCEPTION: main
    Process: network.mysterium.vpn, PID: 14258
    java.lang.IllegalStateException: Fragment already added
        at androidx.fragment.app.Fragment.setInitialSavedState(Fragment.java:778)
        at androidx.viewpager2.adapter.FragmentStateAdapter.ensureFragment(FragmentStateAdapter.java:269)
        at androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder(FragmentStateAdapter.java:175)
        at androidx.viewpager2.adapter.FragmentStateAdapter.onBindViewHolder(FragmentStateAdapter.java:67)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChild(ViewGroup.java:6799)
        at androidx.viewpager2.widget.ViewPager2.onMeasure(ViewPager2.java:498)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24549)
        at androidx.core.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1599)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.core.widget.NestedScrollView.onMeasure(NestedScrollView.java:585)
        at android.view.View.measure(View.java:24549)
        at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:792)
        at androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:583)
        at androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer.layout(ConstraintWidgetContainer.java:682)
        at androidx.constraintlayout.solver.widgets.analyzer.BasicMeasure.solveLinearSystem(BasicMeasure.java:159)
        at androidx.constraintlayout.solver.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:290)
        at androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:119)
        at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1578)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1690)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24549)
2021-06-29 10:47:50.224 14258-14258/network.mysterium.vpn E/AndroidRuntime:     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:742)
        at android.view.View.measure(View.java:24549)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3007)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1834)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2123)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1722)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7605)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
        at android.view.Choreographer.doCallbacks(Choreographer.java:852)
        at android.view.Choreographer.doFrame(Choreographer.java:787)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1014)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7397)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

bug: Mysterium dvpn for android did not works.

Describe the bug
Mysterium dVPN does not work on Android.

Expected behavior
@EDWARDXcX (https://t.me/EDWARDXcX) from telegram reported me while opening the mysterium dVPN it just shows wifi error even while having 5Mbps download and upload speeds, he also tried with the wifi connection instead of 3G still didn't work.

Screenshots
photo_2021-12-04 20 58 43

Environment

  • OS: Android 7.0,
  • Android app version: 2.0.3,
  • Device/Handset mode: Benzo class 300s LTE,
  • Networking: 3G.

Add option to disabling filtering for supported nodes only in the Android app

By default, we are filtering unsupported nodes automatically.
But there should be an option to disable this filtering if a user wants it.
Users should be able to enable/disable in config such auto-detection.

This PR adds const to set NAT compatibility to auto #446
Passing an empty string instead of auto will disable this filter.

UX

This epic is related to user satisfaction regarding our application service quality. It be UX, openvpn/wireguard, ordering, filtering, UI lag and other bad experience.

Mysterium client on chromecast issues

Describe the bug
A clear and concise description of what the bug is.

I sideloaded an obviously older version of the Mysterium client onto Chromecast Android Tv. Because it was working I topped it up with 20 Myst. Now it is not working anymore, so how can I retrieve those 20 Myst?

Updating the app with the latest version without success.

Screenshots
I don't know how to get screenshots on Chromecast

Environment (please complete the following information):
I couldn't find neither the apps version nor the Mysterium identity of this device

Allow using WireGuard proposals

As a censored user I want to connect to WireGuard node

  • Update js-tequilapi to allow fetching wireguard proposals
  • Update node for wireguard
  • Add icons to proposal list

Do not refresh the node list on home screen access

Proposals should be fetched upon startup and then periodically (e.g. 60s) refreshed, not related to how users navigate. Also, proposals should be refreshed whenever the filters change (e.g. media presets).

Content does not fit on the screen

Device: Xiaomi Mi A3

  • Filter presets
  • Session history
  • When connecting: "Cancel and choose..." button overlaps
  • Never send ether… (doesn’t end with a dot so I assume the whole sentence does not fit)
  • Identity address padding could be reduced to show all of the chars

0364FBB8-11BF-4639-ABFA-02F1FBC75B7C
764D91BC-44B6-49BC-BF3E-CA7012CE16BF
70900400-CE68-4920-85B4-C96F5C0F6EE7
image

Can't update

In two devices, Samsung S10E and Xiaomi Pad 5, both Android 11, update of version 2.03 impossible.
App has not been installed.

Written node pricing wrong in Android app

The pricing for my node is wrong in the Android app. I changed the pricing weeks ago and it still hasn't been reflected in the written amounts in the app. However, the actual charged amount seems to be correct. I can only imagine this happens with other nodes too so that's why I write this here.

Wrong event reporting format

  • json.country and json.client.country both have to be a 2 letter country ISO code (uppercase). At the moment one of them is lowercase and the other is country name.
  • json.duration have suspiciously huge values (e.g. 36854000 which is 10 hours)

New Providers are not visible in dVPN (mobile) discovery list

After starting a node on lates build on mac (all traffic) node does not appear in a list in mobile app.

It also seemingly randomly shown or not shown in list on desktop app either. After stopping some time after the node was stopped customer app on mac os was able to see it in the list after refresh (and in between list returned no results)

@donce

you have to have GooglePlay account

Hello, I run lineageos on my google free android. I also run a mysterium node because I love the idea of community driven VPN network.

I upgraded to version 1.0.4 and even 1.0.3 and to my IMMENSE surprise they both crash as soon as started because "you have to have Google Play account"

I tried to hide magisk but there is no difference.

My questions:

  • what's the latest version I can use without the Google Play requirement?
  • are you considering to keep Google Play as a requirement for your VPN client?

Virality

This epic contains issues regarding friend invites, app ratings, sharing, airdrop, referrals, etc.

Prefix push notifications

Prefix all topics that the mobile app subscribes to with android. E.g. /topics/SG should become /topics/android/SG

x509: certificate has expired

App gets blocked at opening, before showing anything, the little circle remains rotating. Loking at the logcat I see many errors like this:

E/GoLog: app/identity/registry/registry_contract.go: failed to contact hermes to get new registration status "could not request consumer data from hermes: could not execute request: Get https://testnet3-hermes.mysterium.network/api/v2/data/consumer/0x1f2e0870fee2ed0ffbb4bbc9a31e0bfc8c7ae603: x509: certificate has expired or is not yet valid.

Node sorting and filtering in Android

Requirements:

Acceptance Criteria:

  • User can sort out proposal list by COUNTRY and QUALITY
  • User can filter out proposals based on available services (all, openvpn, wireguard)
  • User can see proposals numbers for each filter option (all, openvpn, wireguard)
  • Favorite proposals by default are pinned at the top of the list and not affected by SORTING functionality

Subtasks:

  • Filter by service type
  • Show total numbers on filter buttons
  • Sorting

Could not connect with MysteriumVPN for Android

Majority of users on mobile apps (when sessions are failed) are getting "Oops.. could not connect. Please try again later" message (I've done multiple checks and it seems not related to provider). These are mostly users from Nigeria, Benin city, UAE and other "long distance" Africa, Asia regions. I think we need a better way to address the mobile app errors with more detailed info.
Screenshot 2021-07-26 at 08 19 33
Screenshot 2021-07-23 at 12 16 02
Screenshot 2021-07-23 at 12 16 39
Screenshot 2021-07-26 at 08 20 04
Screenshot 2021-07-23 at 12 15 20
Screenshot 2021-07-26 at 08 21 34

Screen transitions don't match

  1. Go to main screen (filter presets and countries are visible)
  2. Click on menu (hamburger) icon
  3. Menu pops up
  4. Click back
  5. Screen slides to the left and the main screen is shown

Expected: Menu screen should pop out in the opposite manner that it appeared and not slide to the side (feels unnatural). Similar behaviour observed in the other screens. You can check e.g. Chrome app on android (Settings screen) regarding transitions.

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.