{"id":23677128,"url":"https://github.com/frimtec/secure-sms-proxy","last_synced_at":"2025-09-02T05:31:28.200Z","repository":{"id":36302488,"uuid":"210166176","full_name":"frimtec/secure-sms-proxy","owner":"frimtec","description":":closed_lock_with_key: Secure way to support send and receive SMS for android applications on single phone number base.","archived":false,"fork":false,"pushed_at":"2025-08-18T11:20:35.000Z","size":2144,"stargazers_count":52,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-18T13:23:32.802Z","etag":null,"topics":["android","secure-sms-proxy","sms","sms-permissions"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frimtec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-09-22T15:04:00.000Z","updated_at":"2025-08-18T11:20:28.000Z","dependencies_parsed_at":"2023-01-17T00:16:22.819Z","dependency_job_id":"55e9a313-838c-45b4-a744-0743f6a62e7d","html_url":"https://github.com/frimtec/secure-sms-proxy","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/frimtec/secure-sms-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frimtec%2Fsecure-sms-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frimtec%2Fsecure-sms-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frimtec%2Fsecure-sms-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frimtec%2Fsecure-sms-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frimtec","download_url":"https://codeload.github.com/frimtec/secure-sms-proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frimtec%2Fsecure-sms-proxy/sbom","scorecard":{"id":372802,"data":{"date":"2025-08-11","repo":{"name":"github.com/frimtec/secure-sms-proxy","commit":"adeed9f6f3226957af4c581802295c04ae50ebce"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.6,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/9 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/deploy_release.yml:11","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-drafter.yaml:13","Warn: no topLevel permission defined: .github/workflows/buid.yml:1","Warn: no topLevel permission defined: .github/workflows/deploy_release.yml:1","Warn: no topLevel permission defined: .github/workflows/pr-labeler.yml:1","Warn: no topLevel permission defined: .github/workflows/release-drafter.yaml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buid.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buid.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/buid.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buid.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buid.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/buid.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/buid.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:149: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/deploy_release.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/deploy_release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-labeler.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/pr-labeler.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-drafter.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/release-drafter.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-drafter.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/release-drafter.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-drafter.yaml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/frimtec/secure-sms-proxy/release-drafter.yaml/master?enable=pin","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  10 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 3.5.2 not signed: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/236551701","Warn: release artifact 3.5.1 not signed: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/226993524","Warn: release artifact 3.5.0 not signed: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/225332227","Warn: release artifact 3.4.8 not signed: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/217787522","Warn: release artifact 3.4.7 not signed: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/217786991","Warn: release artifact 3.5.2 does not have provenance: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/236551701","Warn: release artifact 3.5.1 does not have provenance: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/226993524","Warn: release artifact 3.5.0 does not have provenance: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/225332227","Warn: release artifact 3.4.8 does not have provenance: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/217787522","Warn: release artifact 3.4.7 does not have provenance: https://api.github.com/repos/frimtec/secure-sms-proxy/releases/217786991"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/deploy_release.yml:70"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T13:23:40.716Z","repository_id":36302488,"created_at":"2025-08-18T13:23:40.716Z","updated_at":"2025-08-18T13:23:40.716Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273234258,"owners_count":25068961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","secure-sms-proxy","sms","sms-permissions"],"created_at":"2024-12-29T14:58:37.367Z","updated_at":"2025-09-02T05:31:28.182Z","avatar_url":"https://github.com/frimtec.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Secure SMS Proxy (S2MSP)\n[![Maven Central][maven-central-shield]][maven-central]\n[![License][license-shield]][license]\n\n[![Reproducible Build][reproducible-shield]][izzy-on-droid]\n\n![Project Maintenance][maintenance-shield]\n[![Code Coverage][codecov-shield]][codecov]\n\n[![Build Status][build-status-shield]][build-status]\n[![Deploy Status][deploy-status-shield]][deploy-status]\n\n![Icon](app/src/main/res/mipmap-hdpi/ic_launcher.png)\n\u003ca href='https://apt.izzysoft.de/fdroid/index/apk/com.github.frimtec.android.securesmsproxy'\u003e\u003cimg alt='Get it on IzzyOnDroid' width='180' src='https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png'/\u003e\u003c/a\u003e\n---\n\n\u003ca href='https://lokalise.com'\u003e\u003cimg alt='lokalise logo' width='180' src='images/lokalise_logo.png'/\u003e\u003c/a\u003e\n\nApp language translations maintained with the great localization platform [Lokalise][lokalise].\n\n---\n\nAs Google strongly restricts the use of SMS permissions for applications in the Play-Store, S2MSP provides an API for third party applications\nto send and receive SMS to specific phone numbers via a secure SMS proxy.\n\nS2MSP acts like a local firewall for SMS communication.\n\nEach application that wants to send/receive SMS to a phone number can register itself on S2MSP.\nS2MSP asks the user for permission, whether the requesting application is allowed to send/receive SMS from and to the requested phone numbers or not.\n\n![Permission request dialog](fastlane/metadata/android/en-US/images/phoneScreenshots/S2MSP-01.png)\n\nIn the main view of S2MSP all applications with their allowed phone numbers are listed.\n\n![Main view](fastlane/metadata/android/en-US/images/phoneScreenshots/S2MSP-02.png)\n\nWith the trash icon, the allowed permission for an application can be revoked again.\n\nAll SMS exchanged with third party applications are strongly encrypted.\n\nS2SMP itself requires SMS permissions (SEND_SMS and RECEIVE_SMS) from the Android system and will request these permissions upon startup.\nS2MSP does not need any other permissions. This ensures the integrity and security of S2MSP.\n\nDue to new sideloading restrictions on Android 15 and above, \"Allow restricted settings\" must be enabled in the S2MSP \"App info\" dialog before the SMS permission can be granted!\n![Main view](images/restricted-settings.png)\n\nS2MSP supports the exchange of SMS for the following type of phone numbers:\n\n| Type                     | Supported operation |\n|--------------------------|---------------------|\n| Numeric national         | SEND, RECEIVE       |\n| Numeric international    | SEND, RECEIVE       |\n| Numeric short codes      | SEND, RECEIVE       |\n| Alphanumeric short codes | RECEIVE only        |\n\nNumeric short codes are currently only supported for the following countries:\n* Australia (AU) - as of release 3.5.2\n* Belgium (BE)\n* Botswana (BW)\n* Brazil (BR)\n* Canada (CA)\n* Chile (CL)\n* Denmark (DK)\n* Dominican Republic (DO)\n* Finland (FI)\n* France (FR)\n* Germany (DE)\n* Greece (GR)\n* Hungary (HU)\n* India (IN)\n* Indonesia (ID)\n* Ireland (IE)\n* Italy (IT)\n* Morocco (MA)\n* Nepal (NP)\n* Netherlands (NL)\n* New Zealand (NZ)\n* Nigeria (NG)\n* Norway (NO)\n* Panama (PA)\n* Singapore (SG)\n* Spain (ES)\n* Sweden (SE)\n* Switzerland (CH)\n* Turkey (TR)\n* USA (US)\n* United Kingdom (GB)\n\n## Installation\nS2MSP cannot be offered on Google-Play as Google does only allow applications using SMS permissions in very rare cases\n(see [Use of SMS or Call Log permission groups][use-sms-call-log-permission-groups]).\n\n### Install from IzzyOnDroid\nThe easiest way to install S2MSP and keep it up-to-date is to install it from [IzzyOnDroid][izzy-on-droid].  \n\u003ca href='https://apt.izzysoft.de/fdroid/index/apk/com.github.frimtec.android.securesmsproxy'\u003e\u003cimg alt='Get it on IzzyOnDroid' width='180' src='https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png'/\u003e\u003c/a\u003e\n\n### Install pre build APK\nYou can download the APK file from the [GitHub release page][releases].\nTo install the APK you need to allow installation from unknown source.\n\n### Self build\nBuild S2MSP on your own and then install the APK via ADB to your android phone.\n\n## Integrating applications with S2MSP\nS2MSP provides an easy API to integrate applications. The API supports the registration process, sending and receiving SMS,\nas well as querying if specific phone numbers are already granted for the application.\n\n### Adding the library to your project\nThe API is provided as an AAR (Android Archive) file and is available on [Maven Central][maven-central].\nYou can add the following dependency to your application project:\n```\ndependencies {\n    implementation 'com.github.frimtec:secure-sms-proxy-api:3.5.2@aar'\n    implementation 'com.vdurmont:semver4j:3.1.0'\n}\n```\n\n### Define required permissions\nIn your applications Android-Manifest add the following queries:\n```\n\u003cmanifest package=\"your.application.package\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\u003e\n    \n    ...\n\n    \u003cqueries\u003e\n        \u003cpackage android:name=\"com.github.frimtec.android.securesmsproxy\" /\u003e\n    \u003c/queries\u003e\n    \n   ...\n```\n\n### Register your application with S2MSP to communicate via SMS for some defined phone numbers\nIn you activity do the following:\n\n```\npackage your.application.package;\n  ...\npublic class YourActivity extends AppCompatActivity {\n  ...\n\n  private static final int YOUR_REQUEST_CODE = ...;\n  private SecureSmsProxyFacade s2msp;\n \n  @Override\n  public void onCreate(@Nullable Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    s2msp = SecureSmsProxyFacade.instance(this.getContext());\n    ...\n  }\n\n  anyMethod() {\n    Set\u003cString\u003e phoneNumbers = ...;\n    s2msp.register(this, YOUR_REQUEST_CODE, phoneNumbers, YourSmsListener.class);\n  }\n  \n  @Override\n  public void onActivityResult(int requestCode, int resultCode, Intent data) {\n    super.onActivityResult(requestCode, resultCode, data);\n    if (requestCode == YOUR_REQUEST_CODE) {\n      RegistrationResult result = s2msp.getRegistrationResult(resultCode, data);\n      result.getSecret().ifPresent(secret -\u003e {/* store the secret permanently for later SMS communication */});\n      if (result.getReturnCode().isSuccess()) {\n        Toast.makeText(this, \"Registration OK.\", Toast.LENGTH_LONG).show();\n        ...\n      } else {\n        Toast.makeText(this, \"Registration FAILED: \" + result.getReturnCode().name(), Toast.LENGTH_LONG).show();\n        ...\n      }\n    }\n    ...\n  }\n  \n  ...\n```\n\n### Receiving SMS in your registered SMS listener\nThe SMS listener registered in the previous step should look like this:\n```\npackage your.application.package;\n\npublic class YourSmsListener extends BroadcastReceiver {\n\n  @Override\n  public void onReceive(Context context, Intent intent) {\n    if (\"your.application.package.SMS_RECEIVED\".equals(intent.getAction())) {\n      List\u003cSms\u003e receivedSms = getSmsFromIntent(context, intent);\n      for (Sms sms : receivedSms) {\n         ...\n      }\n    }\n  }\n\n  private static List\u003cSms\u003e getSmsFromIntent(Context context, Intent intent) {\n    SecureSmsProxyFacade s2msp = SecureSmsProxyFacade.instance(context);\n    String secret = ...; // secret from your registration\n    return s2msp.extractReceivedSms(intent, secret);\n  }\n  \n  ...\n```\n\n### Sending an SMS\nA SMS can be send with the following code:\n```\n  void sendSms(Context context, String phoneNumber, String smsText) {\n    SecureSmsProxyFacade s2msp = SecureSmsProxyFacade.instance(context);\n    String secret = ...; // secret from your registration\n    s2msp.sendSms(new Sms(phoneNumber, smsText), secret);\n  }\n\n```\n\n### Check if you application is allowed to send/receive SMS with specific phone numbers\nYou can check if you application is allowed to communicate to a given set of phone numbers:\n```\n    SecureSmsProxyFacade s2msp = SecureSmsProxyFacade.instance(context);\n    Set\u003cString\u003e phoneNumbers = ...; // phone numbers to check\n    boolean allowed = s2msp.isAllowed(phoneNumbers);\n```\n\n## Supported languages\nCurrently the following languages are supported in S2MSP:\n* English\n* German\n* French\n* Italian\n\nTranslation support for any additional language is warmly welcome - just get in contact with me.\nS2MSP is using [Lokalise][lokalise] to maintain language translations.\n\n## Open-Source and free\nS2MSP is Open-Source and available under Apache-2.0 licence.\nIf you find S2MSP useful and use it on a regular basis for your on-call duties, a voluntary donation is warmly welcome.\n\n## Disclaimer\nThe use of S2MSP is at your own risk. The author assumes no liability for malfunctions of the application.\nAny warranty claims are excluded.\n\n## Development\nS2MSP is developed with [Android-Studio][android-studio] with Java 17.\nThe current Android target SDK is 36 (Android 16-Baklava) and the minimal SDK is 24 (Android 7.0-Nougat).\n\n## Used libraries\n* [libphonenumber][libphonenumber]\n* [semver4j][semver4j]\n\n## Feedback\nFeedback, bug reports or feature requests are very welcome.\nYou can send an email to [frimtec@gmx.ch](mailto:frimtec@gmx.ch) or [open an issue on GitHub][issues].\n\n## Credits\n* [Lokalise][lokalise]: For supporting Open-Source projects.\n* [bakito][github-bakito]: For implementing dual SIM support.\n* [IzzySoft][github-izzysoft]: For offering S2MSP on IzzyOnDroid F-Droid repository.\n\n\n[maven-central-shield]: https://img.shields.io/maven-central/v/com.github.frimtec/secure-sms-proxy-api\n[maven-central]: https://central.sonatype.com/artifact/com.github.frimtec/secure-sms-proxy-api\n[maintenance-shield]: https://img.shields.io/maintenance/yes/2025.svg\n[license-shield]: https://img.shields.io/github/license/frimtec/secure-sms-proxy.svg\n[license]: https://opensource.org/licenses/Apache-2.0\n[codecov-shield]: https://codecov.io/gh/frimtec/secure-sms-proxy/branch/master/graph/badge.svg?token=3GBTDIFRC7\n[codecov]: https://codecov.io/gh/frimtec/secure-sms-proxy\n[build-status-shield]: https://github.com/frimtec/secure-sms-proxy/workflows/Build/badge.svg\n[build-status]: https://github.com/frimtec/secure-sms-proxy/actions?query=workflow%3ABuild\n[deploy-status-shield]: https://github.com/frimtec/secure-sms-proxy/workflows/Deploy%20release/badge.svg\n[deploy-status]: https://github.com/frimtec/secure-sms-proxy/actions?query=workflow%3A%22Deploy+release%22\n[issues]: https://github.com/frimtec/secure-sms-proxy/issues\n[releases]: https://github.com/frimtec/secure-sms-proxy/releases\n[github-bakito]: https://github.com/bakito\n[github-izzysoft]: https://github.com/IzzySoft\n[android-studio]: https://developer.android.com/studio\n[izzy-on-droid]: https://apt.izzysoft.de/fdroid/index/apk/com.github.frimtec.android.securesmsproxy\n[maven-central]: https://maven-badges.herokuapp.com/maven-central/com.github.frimtec/secure-sms-proxy-api\n[use-sms-call-log-permission-groups]: https://support.google.com/googleplay/android-developer/answer/9047303?hl=en\n[lokalise]: https://lokalise.com/\n[libphonenumber]: https://github.com/google/libphonenumber\n[semver4j]: https://github.com/vdurmont/semver4j\n[reproducible-shield]: https://shields.rbtlog.dev/simple/com.github.frimtec.android.securesmsproxy\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrimtec%2Fsecure-sms-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrimtec%2Fsecure-sms-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrimtec%2Fsecure-sms-proxy/lists"}