Popular New Releases in SMS
easy-sms
2.1.1
notifme-sdk
1.10.0
ali-oss
v6.17.0
vonage-php-sdk-core
3.0.3
gmsm
v1.4.1
Popular Libraries in SMS
by overtrue php
2683
:calling: 一款满足你的多种发送需求的短信发送组件
by typpo javascript
2331 MIT
Free API for outgoing SMS
by notifme javascript
1821 MIT
A Node.js library to send all kinds of transactional notifications.
by ali-sdk javascript
1639 MIT
Aliyun OSS(Object Storage Service) JavaScript SDK for the Browser and Node.js
by twilio python
1595 MIT
An open-source status dashboard running on App Engine
by jberkel java
1594 Apache-2.0
Backup Android SMS, MMS and call log to Gmail / Gcal / IMAP
by haxpax go
1337 GPL-2.0
:mailbox_closed: Your own local SMS gateway in Go
by bhattsameer python
1195
SMS/Email/Whatsapp/Twitter/Instagram bombers Collection :bomb::bomb::bomb: :boom: Also added collection of some Fake SMS utilities which helps in skip phone number based SMS verification by using a temporary phone number that acts like a proxy.
by SilenceIM java
1023 GPL-3.0
PROJECT MOVED: https://git.silence.dev/Silence/Silence-Android/ (GitHub is just a mirror.)
Trending New libraries in SMS
by crinny python
555 MPL-2.0
💣 Открытый СМС бомбер
by Narasimha1997 go
530 GPL-2.0
A simple command line tool using which you can skip phone number based SMS verification by using a temporary phone number that acts like a proxy.
by AzizKpln python
401 LGPL-3.0
This tool gives information about the phone number that you entered.
by mohammad-fouladgar php
238 MIT
This package provides convenient methods for making token code, sending and verifying mobile phone verification requests.
by SimpleMobileTools kotlin
217 GPL-3.0
An easy and quick way of managing SMS and MMS messages without ads.
by AvinashReddy3108 python
164 GPL-3.0
Clean, small and powerful SMS bomber script.
by dmitrijkotov634 java
154 MIT
Открытый SMS Bomber
by navin-hariharan python
127
The ultimate bomber be it mail, SMS or call. Anonymous mail and SMS sending options are also available :)
by Woqurefan html
120
接口测试平台-python3+django+requests实现 公众号:测试开发干货 testerhome社团:测试方舟号
Top Authors in SMS
1
21 Libraries
256
2
13 Libraries
1697
3
11 Libraries
376
4
10 Libraries
47
5
8 Libraries
132
6
7 Libraries
123
7
7 Libraries
133
8
6 Libraries
89
9
6 Libraries
15
10
5 Libraries
307
1
21 Libraries
256
2
13 Libraries
1697
3
11 Libraries
376
4
10 Libraries
47
5
8 Libraries
132
6
7 Libraries
123
7
7 Libraries
133
8
6 Libraries
89
9
6 Libraries
15
10
5 Libraries
307
Trending Kits in SMS
Here are the top Python SMS API libraries offering several features that make sending SMS messages easy using APIs. These libraries offer a simple and easy-to-use interface for integrating with SMS APIs. You can use the functions offered by these libraries for sending SMS messages without worrying about the complexity of the underlying APIs.
Many libraries offer features for tracking your message delivery status. You can check when your message was delivered; if you still need to, you can get the details about why it failed. Some libraries offer features to create and use message templates to allow you to create reusable templates for frequently sent messages, saving you effort and time. Python SMS API libraries offer integration with different SMS gateways that will allow you to select the best SMS gateway for your requirements. It offers support for Unicode characters that allow sending messages in non-English languages.
Here is the list of top Python SMS API libraries that are handpicked to help developers with SMS API-related requirements:
twilio-python:
- Is a Python library that offers an easy-to-use interface for the Twilio SMS API.
- Is a cloud communication platform that offers APIs for MMS, voice messaging, and SMS.
- Supports features like message media, two-factor authentication (2FA), and message templates using SMS.
plivoframework:
- Is a Python library that offers an easy-to-use interface for the Plivo SMS API.
- You can send SMS messages, receive incoming SMS messages, and track message delivery status.
- To use this, you must first sign up for a Plivo account and get your Auth ID and Token.
vonage-python-sdk:
- Is a Python library that offers an easy-to-use interface for the Vonage SMS API and is a cloud communication platform that offers APIs for voice messaging, SMS, and many more.
- With this, you can send SMS messages, receive incoming SMS messages, and track the message's delivery status.
- Supports features like message media, two-factor authentication (2FA), and message templates using SMS.
africastalking-python:
- Is a Python wrapper for Africa’s Talking API, a Pan-African communication platform that offers developers tools for building voice, payment, and SMS solutions.
- Enables Python developers to integrate Africa’s Talking API into their applications and send SMS messages using the platform.
- Need to sign up for an account and obtain an API key and username.
smsgate:
- Is a Python library developed by Pentagrid Secure, which offers a simple interface to send SMS messages using the Twilio SMS API.
- Abstracts away some of the complexity of using the Twilio API and offers a simple Python interface for sending SMS messages.
- Offers functionality to receive SMS messages and query message delivery status.
jasmin-web-panel:
- Is a Python library that offers a web-based UI to manage the Jasmin SMS gateway.
- Is built on top of the Django web framework and offers an intuitive and simple interface for managing SMS messaging operations using Jasmin.
- Use this to manage SMS messaging operations, like message templates, contact lists, and sending and receiving SMS messages.
python-rest-api:
- Is a Python library that offers a simple interface to build RESTful APIs for sending SMS messages.
- Can be used for building APIs that support SMS messaging functionality.
- Offers a straightforward way for defining API routes and associated handlers using decorators.
smsapi-python-client:
- Is a Python library developed by SMSAPI, which offers a simple interface to send SMS messages using the SMSAPI SMS gateway.
- Abstracts away some of the complexity of using the SMSAPI API and offers a simple Python interface to send SMS messages.
- Offers functionality to query the status of sent SMS messages, manage contact lists, and many more.
way2sms:
- Is a Python library that allows you to send SMS messages using the Way2SMS service in India.
- Allows you to send messages to any mobile number in India and offers functionality to check the balance on your Way2SMS account.
- Offers functionality to check the balance on your Way2SMS account and get information about the last few messages you sent.
aliyunsdkcore:
- Is a Python SDK which offers access to the Alibaba Cloud Services API.
- Is a cloud computing platform that offers numerous services like storage, network, computing, and database services.
- You can access various Alibaba Cloud services, like the Alibaba Cloud SMS service.
infobip-api-python-client:
- Is a Python library that offers an interface for the Infobip API.
- Is a cloud-based messaging platform that offers numerous services, like push notifications, SMS, email, and many more.
- You can send SMS messages to mobile numbers worldwide, track the status of your messages, and manage account settings.
Trending Discussions on SMS
Apps targeting Android 12 and higher required to specify an explicit value for `android:exported` [Cordova]
How to Ensure only one account can sign into flutter app from one phone
How do I add a dropdown menu that when you select an option and click send it shows the option in the email?
java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest;
How to auto fill OTP textfield on OTP code received from firebase in iOS, Swift? (WITHOUT TAPPING)
Why is pattern matching ok in scala but using instanceof is a sign of bad code in Java
Publishing an unofficial version of Telegram in Play Console
How do I "not" select first character in a regex pattern?
Bad request in PHP
SmsRetrieverClient Crash last update
QUESTION
Apps targeting Android 12 and higher required to specify an explicit value for `android:exported` [Cordova]
Asked 2022-Apr-01 at 20:06When I am running to make the Apk in GitHub I got the error. As I am building the Apk in GitHub. There is no way to define something inside manifest as it is building every time fresh. All I can do is inside the Config.Xml file. After Adding android:exported="false"
to it, also getting same error. Both images for this question reference attached here. GitHub Error and Config.Xml. Help will be appreciated.
1<?xml version='1.0' encoding='utf-8'?>
2<widget id="com.likehub.sweetheart" version="1.1.64" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
3 <name>sweetheart</name>
4 <description>making love bird together</description>
5 <author email="mynamey9er@gmail.com" href="">likehub</author>
6 <content src="index.html" />
7 <access origin="*" />
8 <allow-intent href="http://*/*" />
9 <allow-intent href="https://*/*" />
10 <allow-intent href="tel:*" />
11 <allow-intent href="sms:*" />
12 <allow-intent href="mailto:*" />
13 <allow-intent href="geo:*" />
14 <preference name="AndroidXEnabled" value="true" />
15 <preference name="WebViewBounce" value="false" />
16 <preference name="UIWebViewBounce" value="false" />
17 <preference name="DisallowOverscroll" value="true" />
18 <preference name="LoadUrlTimeoutValue" value="700000" />
19 <preference name="ScrollEnabled" value="false" />
20 <preference name="SplashMaintainAspectRatio" value="true" />
21 <preference name="FadeSplashScreenDuration" value="1000" />
22 <preference name="FadeSplashScreen" value="true" />
23 <preference name="SplashShowOnlyFirstTime" value="false" />
24 <preference name="SplashScreen" value="screen" />
25 <preference name="SplashScreenDelay" value="5000" />
26 <preference name="AutoHideSplashScreen" value="true" />
27 <preference name="ShowSplashScreen" value="false" />
28 <preference name="ShowSplashScreenSpinner" value="false" />
29 <preference name="android-minSdkVersion" value="22" />
30 <preference name="BackupWebStorage" value="none" />
31 <preference name="Orientation" value="portrait" />
32 <preference name="AndroidPersistentFileLocation" value="Compatibility" />
33 <preference name="GradlePluginKotlinEnabled" value="true" />
34 <preference name="GradlePluginKotlinCodeStyle" value="official" />
35 <preference name="GradlePluginKotlinVersion" value="1.3.50" />
36 <preference name="AndroidLaunchMode" value="singleTask" />
37 <feature name="StatusBar">
38 <param name="ios-package" onload="true" value="CDVStatusBar" />
39 </feature>
40 <platform name="android">
41 <preference name="android-targetSdkVersion" value="31" />
42 <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" android:exported="true" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
43 <application android:usesCleartextTraffic="true" />
44 <application android:networkSecurityConfig="@xml/network_security_config" />
45
46 <intent-filter>
47 <action android:name="MainActivity" android:exported="false"/>
48 <category android:name="android.intent.category.DEFAULT" />
49 </intent-filter>
50 </edit-config>
51 <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
52 <allow-intent href="market:*" />
53 <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
54 <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
55 <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
56 <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
57 <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
58 <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
59 <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
60 <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
61 <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
62 <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
63 <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
64 <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
65 <splash density="ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
66 <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
67 <splash density="mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
68 <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
69 <splash density="hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
70 <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
71 <splash density="xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
72 <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
73 <splash density="xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
74 <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
75 <splash density="xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
76 <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
77 </platform>
78 <platform name="ios">
79 <allow-intent href="itms:*" />
80 <allow-intent href="itms-apps:*" />
81 <icon height="57" src="resources/ios/icon/icon.png" width="57" />
82 <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
83 <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
84 <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
85 <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
86 <icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
87 <icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
88 <icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
89 <icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
90 <icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
91 <icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
92 <icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
93 <icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
94 <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
95 <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
96 <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
97 <icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
98 <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
99 <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
100 <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
101 <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
102 <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
103 <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
104 <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
105 <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
106 <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
107 <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
108 <icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
109 <icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
110 <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
111 <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
112 <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
113 <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
114 <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
115 <splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
116 <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
117 <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
118 <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
119 <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
120 <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
121 <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
122 <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
123 <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
124 <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
125 <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
126 <icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
127 <splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
128 <splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
129 <splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
130 <splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
131 </platform>
132 <plugin name="cordova-plugin-googleplus" spec="^8.4.0">
133 <variable name="WEB_APPLICATION_CLIENT_ID" value="0000000000000-wwwwwwwmkv51oxxxxxxxxxxx.apps.googleusercontent.co" />
134 </plugin>
135 <platform name="android">
136 <preference name="GoogleAndroidClientId" value="888809hhju-i9hd0hc6v51obgdubbgxwbnhiywgdiueh.apps.googleusercontent.com" />
137 </platform>
138 <plugin name="cordova-plugin-whitelist" spec="1.3.5" />
139 <plugin name="cordova-plugin-statusbar" spec="2.4.3" />
140 <plugin name="cordova-plugin-device" spec="2.0.3" />
141 <plugin name="cordova-plugin-splashscreen" spec="6.0.0" />
142 <plugin name="cordova-plugin-ionic-webview" spec="5.0.0" />
143 <plugin name="cordova-plugin-ionic-keyboard" spec="^2.2.0" />
144</widget>
Apps targeting Android 12 and higher are required to specify an explicit value for
android:exported
when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
ANSWER
Answered 2021-Nov-18 at 19:22You can try like this in config.xml
under android platform -
1<?xml version='1.0' encoding='utf-8'?>
2<widget id="com.likehub.sweetheart" version="1.1.64" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
3 <name>sweetheart</name>
4 <description>making love bird together</description>
5 <author email="mynamey9er@gmail.com" href="">likehub</author>
6 <content src="index.html" />
7 <access origin="*" />
8 <allow-intent href="http://*/*" />
9 <allow-intent href="https://*/*" />
10 <allow-intent href="tel:*" />
11 <allow-intent href="sms:*" />
12 <allow-intent href="mailto:*" />
13 <allow-intent href="geo:*" />
14 <preference name="AndroidXEnabled" value="true" />
15 <preference name="WebViewBounce" value="false" />
16 <preference name="UIWebViewBounce" value="false" />
17 <preference name="DisallowOverscroll" value="true" />
18 <preference name="LoadUrlTimeoutValue" value="700000" />
19 <preference name="ScrollEnabled" value="false" />
20 <preference name="SplashMaintainAspectRatio" value="true" />
21 <preference name="FadeSplashScreenDuration" value="1000" />
22 <preference name="FadeSplashScreen" value="true" />
23 <preference name="SplashShowOnlyFirstTime" value="false" />
24 <preference name="SplashScreen" value="screen" />
25 <preference name="SplashScreenDelay" value="5000" />
26 <preference name="AutoHideSplashScreen" value="true" />
27 <preference name="ShowSplashScreen" value="false" />
28 <preference name="ShowSplashScreenSpinner" value="false" />
29 <preference name="android-minSdkVersion" value="22" />
30 <preference name="BackupWebStorage" value="none" />
31 <preference name="Orientation" value="portrait" />
32 <preference name="AndroidPersistentFileLocation" value="Compatibility" />
33 <preference name="GradlePluginKotlinEnabled" value="true" />
34 <preference name="GradlePluginKotlinCodeStyle" value="official" />
35 <preference name="GradlePluginKotlinVersion" value="1.3.50" />
36 <preference name="AndroidLaunchMode" value="singleTask" />
37 <feature name="StatusBar">
38 <param name="ios-package" onload="true" value="CDVStatusBar" />
39 </feature>
40 <platform name="android">
41 <preference name="android-targetSdkVersion" value="31" />
42 <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" android:exported="true" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
43 <application android:usesCleartextTraffic="true" />
44 <application android:networkSecurityConfig="@xml/network_security_config" />
45
46 <intent-filter>
47 <action android:name="MainActivity" android:exported="false"/>
48 <category android:name="android.intent.category.DEFAULT" />
49 </intent-filter>
50 </edit-config>
51 <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
52 <allow-intent href="market:*" />
53 <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
54 <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
55 <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
56 <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
57 <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
58 <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
59 <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
60 <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
61 <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
62 <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
63 <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
64 <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
65 <splash density="ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
66 <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
67 <splash density="mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
68 <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
69 <splash density="hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
70 <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
71 <splash density="xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
72 <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
73 <splash density="xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
74 <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
75 <splash density="xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
76 <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
77 </platform>
78 <platform name="ios">
79 <allow-intent href="itms:*" />
80 <allow-intent href="itms-apps:*" />
81 <icon height="57" src="resources/ios/icon/icon.png" width="57" />
82 <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
83 <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
84 <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
85 <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
86 <icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
87 <icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
88 <icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
89 <icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
90 <icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
91 <icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
92 <icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
93 <icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
94 <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
95 <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
96 <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
97 <icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
98 <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
99 <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
100 <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
101 <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
102 <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
103 <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
104 <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
105 <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
106 <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
107 <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
108 <icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
109 <icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
110 <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
111 <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
112 <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
113 <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
114 <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
115 <splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
116 <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
117 <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
118 <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
119 <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
120 <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
121 <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
122 <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
123 <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
124 <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
125 <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
126 <icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
127 <splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
128 <splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
129 <splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
130 <splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
131 </platform>
132 <plugin name="cordova-plugin-googleplus" spec="^8.4.0">
133 <variable name="WEB_APPLICATION_CLIENT_ID" value="0000000000000-wwwwwwwmkv51oxxxxxxxxxxx.apps.googleusercontent.co" />
134 </plugin>
135 <platform name="android">
136 <preference name="GoogleAndroidClientId" value="888809hhju-i9hd0hc6v51obgdubbgxwbnhiywgdiueh.apps.googleusercontent.com" />
137 </platform>
138 <plugin name="cordova-plugin-whitelist" spec="1.3.5" />
139 <plugin name="cordova-plugin-statusbar" spec="2.4.3" />
140 <plugin name="cordova-plugin-device" spec="2.0.3" />
141 <plugin name="cordova-plugin-splashscreen" spec="6.0.0" />
142 <plugin name="cordova-plugin-ionic-webview" spec="5.0.0" />
143 <plugin name="cordova-plugin-ionic-keyboard" spec="^2.2.0" />
144</widget><edit-config
145 file="app/src/main/AndroidManifest.xml"
146 target="/manifest/application/activity[@android:name='MainActivity']"
147 mode="merge">
148 <activity android:exported="true"/>
149</edit-config>
150
Make sure to target the file and the activity's name properly.
Due to merge
mode, android:exported="true"
will be added to target activity element. This will replace the values if the it is already exist in the target element.
QUESTION
How to Ensure only one account can sign into flutter app from one phone
Asked 2022-Mar-30 at 11:51Good day all, I am building an app in flutter and I use firebase as the backend. I allow users register and sign into the app using their phone number (and then a password). However, I want to add an extra layer of uniqueness to the registration/login flow.
What I mean is that, I only want one a maximum of one account to be reachable from one device. If person A creates an account on phone A, they can only ever use the app from phone A. Person A should not be able to log into their account from phone B.
I do not believe an sms two factor is enough for this because person A can share the two factor code with person B. Person B would then be able to login to Person A's account on phone B because they have person A's phone number and 2 factor code.
Is there a way of implementing this for a flutter app running on firebase?
ANSWER
Answered 2022-Mar-30 at 11:51You can try saving the unique device ID of the user upon registration then you can check on login whether the user is on that specific device. For getting the unique device ID, you can check here.
QUESTION
How do I add a dropdown menu that when you select an option and click send it shows the option in the email?
Asked 2022-Mar-12 at 04:29I have a website that I am making and I am adding a email portion that emails me their email and their message. I want to add another section that is a dropdown. It will have the three different pricing options, basic, pro, and premium. Then, whichever option they selected is put into the email so I can see it at the bottom of it. here is the code I have so far:
1<form action="https://postmail.invotes.com/send"
2 method="post" id="email_form">
3
4 <input type="text" name="subject" placeholder="Email" />
5 <textarea name="text" placeholder="Message">
6
7 </textarea>
8 <input type="hidden" name="access_token" value="0i7j9jp18jinjtx8mhlqvg8k" />
9 <!-- return urls can be fully qualified -OR-
10 start with / for root relative -OR-
11 start with . for url relative -->
12 <input type="hidden" name="success_url" value=".?message=Email+Successfully+Sent%21&isError=0" />
13 <input type="hidden" name="error_url" value=".?message=Email+could+not+be+sent.&isError=1" />
14
15
16 <!-- set the reply-to address -->
17 <!-- <input type="text" name="reply_to"
18 placeholder="Your Email" /> -->
19
20 <!-- to append extra fields, use the extra_ prefix.
21 Entries will be appended to your message body. -->
22 <!-- <input type="text" name="extra_phone_number"
23 placeholder="Phone Number" /> -->
24
25 <!-- to split your message into 160 chars
26 for an sms gateway -->
27 <!-- <input type="hidden"
28 name="sms_format" value="true" /> -->
29
30 <input id="submit_form" type="submit" value="Send" />
31 <!-- not required, but we'd appreciate it if you'd link to us somewhere on your site -->
32 <p>Powered by <a href="https://postmail.invotes.com" target="_blank">PostMail</a></p>
33</form>
34
35<!-- optional, prevents the submit button from being pressed more than once -->
36<script>
37 var submitButton = document.getElementById("submit_form");
38 var form = document.getElementById("email_form");
39 form.addEventListener("submit", function (e) {
40 setTimeout(function() {
41 submitButton.value = "Sending...";
42 submitButton.disabled = true;
43 }, 1);
44 });
45</script>
46<style>/* Style inputs with type="text", select elements and textareas */
47input[type=text], select, textarea {
48 width: 100%; /* Full width */
49 padding: 12px; /* Some padding */
50 border: 1px solid #ccc; /* Gray border */
51 border-radius: 4px; /* Rounded borders */
52 box-sizing: border-box; /* Make sure that padding and width stays in place */
53 margin-top: 6px; /* Add a top margin */
54 margin-bottom: 16px; /* Bottom margin */
55 resize: vertical /* Allow the user to vertically resize the textarea (not horizontally) */
56 }
57
58 /* Style the submit button with a specific background color etc */
59input[type=submit] {
60 background-color: #04AA6D;
61 color: white;
62 padding: 12px 20px;
63 border: none;
64 border-radius: 4px;
65 cursor: pointer;
66 }
67 /* When moving the mouse over the submit button, add a darker green color */
68 input[type=submit]:hover {
69 background-color: #45a049;
70 }
71
72 /* Add a background color and some padding around the form */
73 .container {
74 border-radius: 5px;
75 background-color: #f2f2f2;
76 padding: 20px;
77 }</style>
78
ANSWER
Answered 2022-Mar-12 at 04:29You can have your dropdown inside the form, then when it's time to submit, intercept that and append the dropdown value to the user's text.
For this SOLUTION, I do the interception by not having a button that sends the form to the server directly. Instead a script is called on it's behalf to then append the dropdown value.
All other explanations are in the code comments.
1<form action="https://postmail.invotes.com/send"
2 method="post" id="email_form">
3
4 <input type="text" name="subject" placeholder="Email" />
5 <textarea name="text" placeholder="Message">
6
7 </textarea>
8 <input type="hidden" name="access_token" value="0i7j9jp18jinjtx8mhlqvg8k" />
9 <!-- return urls can be fully qualified -OR-
10 start with / for root relative -OR-
11 start with . for url relative -->
12 <input type="hidden" name="success_url" value=".?message=Email+Successfully+Sent%21&isError=0" />
13 <input type="hidden" name="error_url" value=".?message=Email+could+not+be+sent.&isError=1" />
14
15
16 <!-- set the reply-to address -->
17 <!-- <input type="text" name="reply_to"
18 placeholder="Your Email" /> -->
19
20 <!-- to append extra fields, use the extra_ prefix.
21 Entries will be appended to your message body. -->
22 <!-- <input type="text" name="extra_phone_number"
23 placeholder="Phone Number" /> -->
24
25 <!-- to split your message into 160 chars
26 for an sms gateway -->
27 <!-- <input type="hidden"
28 name="sms_format" value="true" /> -->
29
30 <input id="submit_form" type="submit" value="Send" />
31 <!-- not required, but we'd appreciate it if you'd link to us somewhere on your site -->
32 <p>Powered by <a href="https://postmail.invotes.com" target="_blank">PostMail</a></p>
33</form>
34
35<!-- optional, prevents the submit button from being pressed more than once -->
36<script>
37 var submitButton = document.getElementById("submit_form");
38 var form = document.getElementById("email_form");
39 form.addEventListener("submit", function (e) {
40 setTimeout(function() {
41 submitButton.value = "Sending...";
42 submitButton.disabled = true;
43 }, 1);
44 });
45</script>
46<style>/* Style inputs with type="text", select elements and textareas */
47input[type=text], select, textarea {
48 width: 100%; /* Full width */
49 padding: 12px; /* Some padding */
50 border: 1px solid #ccc; /* Gray border */
51 border-radius: 4px; /* Rounded borders */
52 box-sizing: border-box; /* Make sure that padding and width stays in place */
53 margin-top: 6px; /* Add a top margin */
54 margin-bottom: 16px; /* Bottom margin */
55 resize: vertical /* Allow the user to vertically resize the textarea (not horizontally) */
56 }
57
58 /* Style the submit button with a specific background color etc */
59input[type=submit] {
60 background-color: #04AA6D;
61 color: white;
62 padding: 12px 20px;
63 border: none;
64 border-radius: 4px;
65 cursor: pointer;
66 }
67 /* When moving the mouse over the submit button, add a darker green color */
68 input[type=submit]:hover {
69 background-color: #45a049;
70 }
71
72 /* Add a background color and some padding around the form */
73 .container {
74 border-radius: 5px;
75 background-color: #f2f2f2;
76 padding: 20px;
77 }</style>
78function validateThenSend() {
79 // Write a script that appends the "plan" to the message body, then sends the form to the server.
80
81 // Optional validation code
82 // ...
83
84 // If validated, then continue:
85
86 // Append the user selected Plan to the textarea.
87
88 var curText = document.getElementById("text").value;
89 curText += "\n\nPLAN: " + document.getElementById("plans").value;
90 document.getElementById("text").value = curText;
91
92 // Submit the form
93
94 // Uncomment the next line for the actual Send.
95 // I have it commented for testing here in SO.
96
97 // document.getElementById("email_form").submit();
98
99}
1<form action="https://postmail.invotes.com/send"
2 method="post" id="email_form">
3
4 <input type="text" name="subject" placeholder="Email" />
5 <textarea name="text" placeholder="Message">
6
7 </textarea>
8 <input type="hidden" name="access_token" value="0i7j9jp18jinjtx8mhlqvg8k" />
9 <!-- return urls can be fully qualified -OR-
10 start with / for root relative -OR-
11 start with . for url relative -->
12 <input type="hidden" name="success_url" value=".?message=Email+Successfully+Sent%21&isError=0" />
13 <input type="hidden" name="error_url" value=".?message=Email+could+not+be+sent.&isError=1" />
14
15
16 <!-- set the reply-to address -->
17 <!-- <input type="text" name="reply_to"
18 placeholder="Your Email" /> -->
19
20 <!-- to append extra fields, use the extra_ prefix.
21 Entries will be appended to your message body. -->
22 <!-- <input type="text" name="extra_phone_number"
23 placeholder="Phone Number" /> -->
24
25 <!-- to split your message into 160 chars
26 for an sms gateway -->
27 <!-- <input type="hidden"
28 name="sms_format" value="true" /> -->
29
30 <input id="submit_form" type="submit" value="Send" />
31 <!-- not required, but we'd appreciate it if you'd link to us somewhere on your site -->
32 <p>Powered by <a href="https://postmail.invotes.com" target="_blank">PostMail</a></p>
33</form>
34
35<!-- optional, prevents the submit button from being pressed more than once -->
36<script>
37 var submitButton = document.getElementById("submit_form");
38 var form = document.getElementById("email_form");
39 form.addEventListener("submit", function (e) {
40 setTimeout(function() {
41 submitButton.value = "Sending...";
42 submitButton.disabled = true;
43 }, 1);
44 });
45</script>
46<style>/* Style inputs with type="text", select elements and textareas */
47input[type=text], select, textarea {
48 width: 100%; /* Full width */
49 padding: 12px; /* Some padding */
50 border: 1px solid #ccc; /* Gray border */
51 border-radius: 4px; /* Rounded borders */
52 box-sizing: border-box; /* Make sure that padding and width stays in place */
53 margin-top: 6px; /* Add a top margin */
54 margin-bottom: 16px; /* Bottom margin */
55 resize: vertical /* Allow the user to vertically resize the textarea (not horizontally) */
56 }
57
58 /* Style the submit button with a specific background color etc */
59input[type=submit] {
60 background-color: #04AA6D;
61 color: white;
62 padding: 12px 20px;
63 border: none;
64 border-radius: 4px;
65 cursor: pointer;
66 }
67 /* When moving the mouse over the submit button, add a darker green color */
68 input[type=submit]:hover {
69 background-color: #45a049;
70 }
71
72 /* Add a background color and some padding around the form */
73 .container {
74 border-radius: 5px;
75 background-color: #f2f2f2;
76 padding: 20px;
77 }</style>
78function validateThenSend() {
79 // Write a script that appends the "plan" to the message body, then sends the form to the server.
80
81 // Optional validation code
82 // ...
83
84 // If validated, then continue:
85
86 // Append the user selected Plan to the textarea.
87
88 var curText = document.getElementById("text").value;
89 curText += "\n\nPLAN: " + document.getElementById("plans").value;
90 document.getElementById("text").value = curText;
91
92 // Submit the form
93
94 // Uncomment the next line for the actual Send.
95 // I have it commented for testing here in SO.
96
97 // document.getElementById("email_form").submit();
98
99}<form action="https://postmail.invotes.com/send"
100 method="post" id="email_form">
101
102 <!-- Add in your dropdown, and give it an id but it wont need a name attribute -->
103
104 <select id="plans">
105 <option value="Plan 1">Plan 1</option>
106 <option value="Plan 2">Plan 2</option>
107 <option value="Plan 3">Plan 3</option>
108 </select>
109
110 <br/>
111 <br/>
112
113 <input type="text" name="subject" placeholder="Email" />
114
115 <br/>
116 <br/>
117
118
119 <!-- Give the textarea an id -->
120 <textarea name="text" placeholder="Message" id="text" cols=30 rows=10></textarea>
121
122 <input type="hidden" name="access_token" value="0i7j9jp18jinjtx8mhlqvg8k" />
123 <!-- return urls can be fully qualified -OR-
124 start with / for root relative -OR-
125 start with . for url relative -->
126 <input type="hidden" name="success_url" value=".?message=Email+Successfully+Sent%21&isError=0" />
127 <input type="hidden" name="error_url" value=".?message=Email+could+not+be+sent.&isError=1" />
128
129
130 <!-- set the reply-to address -->
131 <!-- <input type="text" name="reply_to"
132 placeholder="Your Email" /> -->
133
134 <!-- to append extra fields, use the extra_ prefix.
135 Entries will be appended to your message body. -->
136 <!-- <input type="text" name="extra_phone_number"
137 placeholder="Phone Number" /> -->
138
139 <!-- to split your message into 160 chars
140 for an sms gateway -->
141 <!-- <input type="hidden"
142 name="sms_format" value="true" /> -->
143
144 <!-- hide your Send button or simply remove it -->
145 <input id="submit_form" type="submit" value="Send" style="display:none"/>
146
147 <!-- Make a fake Send button the user will see. -->
148 <button type="button" onclick="validateThenSend()">Send</button>
149
150 <!-- not required, but we'd appreciate it if you'd link to us somewhere on your site -->
151 <p>Powered by <a href="https://postmail.invotes.com" target="_blank">PostMail</a></p>
152</form>
QUESTION
java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest;
Asked 2022-Feb-25 at 23:22It was working fine before I have done nothing, no packages update, no gradle update no nothing just created new build and this error occurs. but for some team members the error occur after gradle sync.
The issue is that build is generating successfully without any error but when opens the app it suddenly gets crash (in both debug and release mode)
Error
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9
gradle-wrapper.properties
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14
build.gradle
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17 ext {
18 buildToolsVersion = "30.0.2"
19 minSdkVersion = 21
20 compileSdkVersion = 30
21 targetSdkVersion = 30
22 ndkVersion = "21.4.7075529"
23 }
24 repositories {
25 google()
26 mavenCentral()
27 jcenter()
28 // maven {
29 // url 'https://maven.fabric.io/public'
30 // }
31 maven { url "https://www.jitpack.io" }
32 }
33 dependencies {
34 classpath("com.android.tools.build:gradle:4.2.2")
35 classpath 'com.google.gms:google-services:4.2.0' // Google Services plugin
36 // Add the Fabric Crashlytics plugin.
37 // classpath 'io.fabric.tools:gradle:1.31.2'
38 // firebase performance sdk
39 classpath 'com.google.firebase:perf-plugin:1.4.0'
40 classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43 // NOTE: Do not place your application dependencies here; they belong
44 // in the individual module build.gradle files
45 }
46}
47
48allprojects {
49 repositories {
50 mavenCentral()
51 mavenLocal()
52 maven {
53 // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54 url("$rootDir/../node_modules/react-native/android")
55 }
56 maven {
57 // Android JSC is installed from npm
58 url("$rootDir/../node_modules/jsc-android/dist")
59 }
60
61 google()
62 jcenter()
63 maven { url 'https://www.jitpack.io' }
64 }
65}
66
67
68subprojects {
69 afterEvaluate {project ->
70 if (project.hasProperty("android")) {
71 android {
72 buildToolsVersion "28.0.3"
73 compileSdkVersion 28
74 }
75 }
76 }
77}
78
79subprojects {
80 afterEvaluate {project ->
81 if (project.hasProperty("android")) {
82 android {
83 compileSdkVersion 29
84 buildToolsVersion '29.0.3'
85 }
86 }
87 }
88}
89
packages
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17 ext {
18 buildToolsVersion = "30.0.2"
19 minSdkVersion = 21
20 compileSdkVersion = 30
21 targetSdkVersion = 30
22 ndkVersion = "21.4.7075529"
23 }
24 repositories {
25 google()
26 mavenCentral()
27 jcenter()
28 // maven {
29 // url 'https://maven.fabric.io/public'
30 // }
31 maven { url "https://www.jitpack.io" }
32 }
33 dependencies {
34 classpath("com.android.tools.build:gradle:4.2.2")
35 classpath 'com.google.gms:google-services:4.2.0' // Google Services plugin
36 // Add the Fabric Crashlytics plugin.
37 // classpath 'io.fabric.tools:gradle:1.31.2'
38 // firebase performance sdk
39 classpath 'com.google.firebase:perf-plugin:1.4.0'
40 classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43 // NOTE: Do not place your application dependencies here; they belong
44 // in the individual module build.gradle files
45 }
46}
47
48allprojects {
49 repositories {
50 mavenCentral()
51 mavenLocal()
52 maven {
53 // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54 url("$rootDir/../node_modules/react-native/android")
55 }
56 maven {
57 // Android JSC is installed from npm
58 url("$rootDir/../node_modules/jsc-android/dist")
59 }
60
61 google()
62 jcenter()
63 maven { url 'https://www.jitpack.io' }
64 }
65}
66
67
68subprojects {
69 afterEvaluate {project ->
70 if (project.hasProperty("android")) {
71 android {
72 buildToolsVersion "28.0.3"
73 compileSdkVersion 28
74 }
75 }
76 }
77}
78
79subprojects {
80 afterEvaluate {project ->
81 if (project.hasProperty("android")) {
82 android {
83 compileSdkVersion 29
84 buildToolsVersion '29.0.3'
85 }
86 }
87 }
88}
89"dependencies": {
90 "@eva-design/eva": "^2.1.0",
91 "@react-native-async-storage/async-storage": "^1.15.14",
92 "@react-native-community/blur": "^3.6.0",
93 "@react-native-community/checkbox": "^0.5.0",
94 "@react-native-community/netinfo": "^6.0.1",
95 "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96 "@react-native-firebase/analytics": "^10.3.1",
97 "@react-native-firebase/app": "^10.3.0",
98 "@react-native-firebase/auth": "^10.3.1",
99 "@react-native-firebase/crashlytics": "^10.3.1",
100 "@react-native-firebase/dynamic-links": "^10.3.1",
101 "@react-native-firebase/firestore": "^10.3.1",
102 "@react-native-firebase/iid": "^10.3.1",
103 "@react-native-firebase/in-app-messaging": "^10.3.1",
104 "@react-native-firebase/messaging": "^10.3.1",
105 "@react-native-firebase/perf": "^10.3.1",
106 "@react-native-firebase/remote-config": "^10.3.1",
107 "@react-native-firebase/storage": "^10.3.1",
108 "@react-native-picker/picker": "^2.1.0",
109 "@react-navigation/bottom-tabs": "^6.0.9",
110 "@react-navigation/native": "^6.0.6",
111 "@react-navigation/stack": "^6.0.11",
112 "@types/react-native": "^0.65.5",
113 "@ui-kitten/components": "^5.1.0",
114 "axios": "^0.19.0",
115 "i18n-js": "^3.5.1",
116 "moment": "^2.24.0",
117 "native-base": "2.13.8",
118 "react": "17.0.2",
119 "react-content-loader": "^4.3.4",
120 "react-native": "0.66.0",
121 "react-native-actions-sheet": "^0.5.6",
122 "react-native-adjust": "^4.28.0",
123 "react-native-amplitude-analytics": "^0.2.7",
124 "react-native-animatable": "^1.3.3",
125 "react-native-code-push": "^7.0.4",
126 "react-native-config": "^1.3.3",
127 "react-native-contacts": "^5.0.7",
128 "react-native-dots-pagination": "^0.2.0",
129 "react-native-fbsdk-next": "^6.2.0",
130 "react-native-fingerprint-scanner": "^6.0.0",
131 "react-native-floating-action": "^1.22.0",
132 "react-native-geocoding": "^0.4.0",
133 "react-native-geolocation-service": "^5.2.0",
134 "react-native-gesture-handler": "^1.5.2",
135 "react-native-get-random-values": "^1.4.0",
136 "react-native-html-to-pdf-lite": "^0.11.0",
137 "react-native-image-base64": "^0.1.4",
138 "react-native-image-pan-zoom": "^2.1.11",
139 "react-native-image-picker": "^4.1.2",
140 "react-native-image-resizer": "^1.2.0",
141 "react-native-in-app-review": "^2.1.7",
142 "react-native-linear-gradient": "^2.5.6",
143 "react-native-loading-spinner-overlay": "^1.1.0",
144 "react-native-material-menu": "^1.0.0",
145 "react-native-material-textfield": "^0.16.1",
146 "react-native-modal": "^13.0.0",
147 "react-native-phone-call": "^1.0.9",
148 "react-native-ratings": "^7.3.0",
149 "react-native-reanimated": "^1.13.0",
150 "react-native-safe-area-context": "^3.3.2",
151 "react-native-screens": "^3.9.0",
152 "react-native-share": "^7.2.1",
153 "react-native-smooth-pincode-input": "^1.0.9",
154 "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155 "react-native-snap-carousel": "^3.9.1",
156 "react-native-splash-screen": "^3.2.0",
157 "react-native-svg": "^12.1.1",
158 "react-native-version-check": "^3.4.2",
159 "react-native-version-number": "^0.3.6",
160 "react-native-view-shot": "^3.1.2",
161 "react-native-walkthrough-tooltip": "^1.3.0",
162 "react-redux": "^7.1.3",
163 "redux": "^4.0.4",
164 "redux-logger": "^3.0.6",
165 "redux-persist": "^6.0.0",
166 "redux-thunk": "^2.3.0",
167 "rn-fetch-blob": "^0.12.0",
168 "urbanairship-react-native": "^12.0.0",
169 "uuid": "^8.3.0"
170},
171
ANSWER
Answered 2022-Feb-25 at 23:22We have fixed the issue by replacing
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17 ext {
18 buildToolsVersion = "30.0.2"
19 minSdkVersion = 21
20 compileSdkVersion = 30
21 targetSdkVersion = 30
22 ndkVersion = "21.4.7075529"
23 }
24 repositories {
25 google()
26 mavenCentral()
27 jcenter()
28 // maven {
29 // url 'https://maven.fabric.io/public'
30 // }
31 maven { url "https://www.jitpack.io" }
32 }
33 dependencies {
34 classpath("com.android.tools.build:gradle:4.2.2")
35 classpath 'com.google.gms:google-services:4.2.0' // Google Services plugin
36 // Add the Fabric Crashlytics plugin.
37 // classpath 'io.fabric.tools:gradle:1.31.2'
38 // firebase performance sdk
39 classpath 'com.google.firebase:perf-plugin:1.4.0'
40 classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43 // NOTE: Do not place your application dependencies here; they belong
44 // in the individual module build.gradle files
45 }
46}
47
48allprojects {
49 repositories {
50 mavenCentral()
51 mavenLocal()
52 maven {
53 // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54 url("$rootDir/../node_modules/react-native/android")
55 }
56 maven {
57 // Android JSC is installed from npm
58 url("$rootDir/../node_modules/jsc-android/dist")
59 }
60
61 google()
62 jcenter()
63 maven { url 'https://www.jitpack.io' }
64 }
65}
66
67
68subprojects {
69 afterEvaluate {project ->
70 if (project.hasProperty("android")) {
71 android {
72 buildToolsVersion "28.0.3"
73 compileSdkVersion 28
74 }
75 }
76 }
77}
78
79subprojects {
80 afterEvaluate {project ->
81 if (project.hasProperty("android")) {
82 android {
83 compileSdkVersion 29
84 buildToolsVersion '29.0.3'
85 }
86 }
87 }
88}
89"dependencies": {
90 "@eva-design/eva": "^2.1.0",
91 "@react-native-async-storage/async-storage": "^1.15.14",
92 "@react-native-community/blur": "^3.6.0",
93 "@react-native-community/checkbox": "^0.5.0",
94 "@react-native-community/netinfo": "^6.0.1",
95 "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96 "@react-native-firebase/analytics": "^10.3.1",
97 "@react-native-firebase/app": "^10.3.0",
98 "@react-native-firebase/auth": "^10.3.1",
99 "@react-native-firebase/crashlytics": "^10.3.1",
100 "@react-native-firebase/dynamic-links": "^10.3.1",
101 "@react-native-firebase/firestore": "^10.3.1",
102 "@react-native-firebase/iid": "^10.3.1",
103 "@react-native-firebase/in-app-messaging": "^10.3.1",
104 "@react-native-firebase/messaging": "^10.3.1",
105 "@react-native-firebase/perf": "^10.3.1",
106 "@react-native-firebase/remote-config": "^10.3.1",
107 "@react-native-firebase/storage": "^10.3.1",
108 "@react-native-picker/picker": "^2.1.0",
109 "@react-navigation/bottom-tabs": "^6.0.9",
110 "@react-navigation/native": "^6.0.6",
111 "@react-navigation/stack": "^6.0.11",
112 "@types/react-native": "^0.65.5",
113 "@ui-kitten/components": "^5.1.0",
114 "axios": "^0.19.0",
115 "i18n-js": "^3.5.1",
116 "moment": "^2.24.0",
117 "native-base": "2.13.8",
118 "react": "17.0.2",
119 "react-content-loader": "^4.3.4",
120 "react-native": "0.66.0",
121 "react-native-actions-sheet": "^0.5.6",
122 "react-native-adjust": "^4.28.0",
123 "react-native-amplitude-analytics": "^0.2.7",
124 "react-native-animatable": "^1.3.3",
125 "react-native-code-push": "^7.0.4",
126 "react-native-config": "^1.3.3",
127 "react-native-contacts": "^5.0.7",
128 "react-native-dots-pagination": "^0.2.0",
129 "react-native-fbsdk-next": "^6.2.0",
130 "react-native-fingerprint-scanner": "^6.0.0",
131 "react-native-floating-action": "^1.22.0",
132 "react-native-geocoding": "^0.4.0",
133 "react-native-geolocation-service": "^5.2.0",
134 "react-native-gesture-handler": "^1.5.2",
135 "react-native-get-random-values": "^1.4.0",
136 "react-native-html-to-pdf-lite": "^0.11.0",
137 "react-native-image-base64": "^0.1.4",
138 "react-native-image-pan-zoom": "^2.1.11",
139 "react-native-image-picker": "^4.1.2",
140 "react-native-image-resizer": "^1.2.0",
141 "react-native-in-app-review": "^2.1.7",
142 "react-native-linear-gradient": "^2.5.6",
143 "react-native-loading-spinner-overlay": "^1.1.0",
144 "react-native-material-menu": "^1.0.0",
145 "react-native-material-textfield": "^0.16.1",
146 "react-native-modal": "^13.0.0",
147 "react-native-phone-call": "^1.0.9",
148 "react-native-ratings": "^7.3.0",
149 "react-native-reanimated": "^1.13.0",
150 "react-native-safe-area-context": "^3.3.2",
151 "react-native-screens": "^3.9.0",
152 "react-native-share": "^7.2.1",
153 "react-native-smooth-pincode-input": "^1.0.9",
154 "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155 "react-native-snap-carousel": "^3.9.1",
156 "react-native-splash-screen": "^3.2.0",
157 "react-native-svg": "^12.1.1",
158 "react-native-version-check": "^3.4.2",
159 "react-native-version-number": "^0.3.6",
160 "react-native-view-shot": "^3.1.2",
161 "react-native-walkthrough-tooltip": "^1.3.0",
162 "react-redux": "^7.1.3",
163 "redux": "^4.0.4",
164 "redux-logger": "^3.0.6",
165 "redux-persist": "^6.0.0",
166 "redux-thunk": "^2.3.0",
167 "rn-fetch-blob": "^0.12.0",
168 "urbanairship-react-native": "^12.0.0",
169 "uuid": "^8.3.0"
170},
171implementation 'com.facebook.android:facebook-marketing:[4,5)'
172
by
1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
2 java.lang.NoSuchMethodError: No virtual method setSkipClientToken(Z)V in class Lcom/facebook/GraphRequest; or its super classes (declaration of 'com.facebook.GraphRequest' appears in /data/app/~~aLf3pfLySq5u7zpIAr2Hlg==/com.package-name-99h4GcP3GNx2sMs76AXGvA==/base.apk)
3 at com.facebook.marketing.internal.RemoteConfigManager.getRemoteConfigQueryResponse(RemoteConfigManager.java:87)
4 at com.facebook.marketing.internal.RemoteConfigManager.access$000(RemoteConfigManager.java:43)
5 at com.facebook.marketing.internal.RemoteConfigManager$1.run(RemoteConfigManager.java:64)
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
8 at java.lang.Thread.run(Thread.java:923)
9distributionBase=GRADLE_USER_HOME
10distributionPath=wrapper/dists
11distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
12zipStoreBase=GRADLE_USER_HOME
13zipStorePath=wrapper/dists
14// Top-level build file where you can add configuration options common to all sub-projects/modules.
15
16buildscript {
17 ext {
18 buildToolsVersion = "30.0.2"
19 minSdkVersion = 21
20 compileSdkVersion = 30
21 targetSdkVersion = 30
22 ndkVersion = "21.4.7075529"
23 }
24 repositories {
25 google()
26 mavenCentral()
27 jcenter()
28 // maven {
29 // url 'https://maven.fabric.io/public'
30 // }
31 maven { url "https://www.jitpack.io" }
32 }
33 dependencies {
34 classpath("com.android.tools.build:gradle:4.2.2")
35 classpath 'com.google.gms:google-services:4.2.0' // Google Services plugin
36 // Add the Fabric Crashlytics plugin.
37 // classpath 'io.fabric.tools:gradle:1.31.2'
38 // firebase performance sdk
39 classpath 'com.google.firebase:perf-plugin:1.4.0'
40 classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
41
42
43 // NOTE: Do not place your application dependencies here; they belong
44 // in the individual module build.gradle files
45 }
46}
47
48allprojects {
49 repositories {
50 mavenCentral()
51 mavenLocal()
52 maven {
53 // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
54 url("$rootDir/../node_modules/react-native/android")
55 }
56 maven {
57 // Android JSC is installed from npm
58 url("$rootDir/../node_modules/jsc-android/dist")
59 }
60
61 google()
62 jcenter()
63 maven { url 'https://www.jitpack.io' }
64 }
65}
66
67
68subprojects {
69 afterEvaluate {project ->
70 if (project.hasProperty("android")) {
71 android {
72 buildToolsVersion "28.0.3"
73 compileSdkVersion 28
74 }
75 }
76 }
77}
78
79subprojects {
80 afterEvaluate {project ->
81 if (project.hasProperty("android")) {
82 android {
83 compileSdkVersion 29
84 buildToolsVersion '29.0.3'
85 }
86 }
87 }
88}
89"dependencies": {
90 "@eva-design/eva": "^2.1.0",
91 "@react-native-async-storage/async-storage": "^1.15.14",
92 "@react-native-community/blur": "^3.6.0",
93 "@react-native-community/checkbox": "^0.5.0",
94 "@react-native-community/netinfo": "^6.0.1",
95 "@react-native-community/toolbar-android": "^0.1.0-rc.2",
96 "@react-native-firebase/analytics": "^10.3.1",
97 "@react-native-firebase/app": "^10.3.0",
98 "@react-native-firebase/auth": "^10.3.1",
99 "@react-native-firebase/crashlytics": "^10.3.1",
100 "@react-native-firebase/dynamic-links": "^10.3.1",
101 "@react-native-firebase/firestore": "^10.3.1",
102 "@react-native-firebase/iid": "^10.3.1",
103 "@react-native-firebase/in-app-messaging": "^10.3.1",
104 "@react-native-firebase/messaging": "^10.3.1",
105 "@react-native-firebase/perf": "^10.3.1",
106 "@react-native-firebase/remote-config": "^10.3.1",
107 "@react-native-firebase/storage": "^10.3.1",
108 "@react-native-picker/picker": "^2.1.0",
109 "@react-navigation/bottom-tabs": "^6.0.9",
110 "@react-navigation/native": "^6.0.6",
111 "@react-navigation/stack": "^6.0.11",
112 "@types/react-native": "^0.65.5",
113 "@ui-kitten/components": "^5.1.0",
114 "axios": "^0.19.0",
115 "i18n-js": "^3.5.1",
116 "moment": "^2.24.0",
117 "native-base": "2.13.8",
118 "react": "17.0.2",
119 "react-content-loader": "^4.3.4",
120 "react-native": "0.66.0",
121 "react-native-actions-sheet": "^0.5.6",
122 "react-native-adjust": "^4.28.0",
123 "react-native-amplitude-analytics": "^0.2.7",
124 "react-native-animatable": "^1.3.3",
125 "react-native-code-push": "^7.0.4",
126 "react-native-config": "^1.3.3",
127 "react-native-contacts": "^5.0.7",
128 "react-native-dots-pagination": "^0.2.0",
129 "react-native-fbsdk-next": "^6.2.0",
130 "react-native-fingerprint-scanner": "^6.0.0",
131 "react-native-floating-action": "^1.22.0",
132 "react-native-geocoding": "^0.4.0",
133 "react-native-geolocation-service": "^5.2.0",
134 "react-native-gesture-handler": "^1.5.2",
135 "react-native-get-random-values": "^1.4.0",
136 "react-native-html-to-pdf-lite": "^0.11.0",
137 "react-native-image-base64": "^0.1.4",
138 "react-native-image-pan-zoom": "^2.1.11",
139 "react-native-image-picker": "^4.1.2",
140 "react-native-image-resizer": "^1.2.0",
141 "react-native-in-app-review": "^2.1.7",
142 "react-native-linear-gradient": "^2.5.6",
143 "react-native-loading-spinner-overlay": "^1.1.0",
144 "react-native-material-menu": "^1.0.0",
145 "react-native-material-textfield": "^0.16.1",
146 "react-native-modal": "^13.0.0",
147 "react-native-phone-call": "^1.0.9",
148 "react-native-ratings": "^7.3.0",
149 "react-native-reanimated": "^1.13.0",
150 "react-native-safe-area-context": "^3.3.2",
151 "react-native-screens": "^3.9.0",
152 "react-native-share": "^7.2.1",
153 "react-native-smooth-pincode-input": "^1.0.9",
154 "react-native-sms-retriever": "https://github.com/sarmad1995/react-native-sms-retriever.git",
155 "react-native-snap-carousel": "^3.9.1",
156 "react-native-splash-screen": "^3.2.0",
157 "react-native-svg": "^12.1.1",
158 "react-native-version-check": "^3.4.2",
159 "react-native-version-number": "^0.3.6",
160 "react-native-view-shot": "^3.1.2",
161 "react-native-walkthrough-tooltip": "^1.3.0",
162 "react-redux": "^7.1.3",
163 "redux": "^4.0.4",
164 "redux-logger": "^3.0.6",
165 "redux-persist": "^6.0.0",
166 "redux-thunk": "^2.3.0",
167 "rn-fetch-blob": "^0.12.0",
168 "urbanairship-react-native": "^12.0.0",
169 "uuid": "^8.3.0"
170},
171implementation 'com.facebook.android:facebook-marketing:[4,5)'
172implementation 'com.facebook.android:facebook-marketing:latest.release'
173
in android/app/build.gradle
file.
Posted this so someone out there facing the same problem will find the solution easily. It took me and my team around one and a half day to figure it out as there is no clear solution out there.
Solution Ref: here
QUESTION
How to auto fill OTP textfield on OTP code received from firebase in iOS, Swift? (WITHOUT TAPPING)
Asked 2022-Feb-20 at 18:21I want to know a callback function that is automatically called and fill the OTP text field (after I receive the OTP code from firebase).
I have already tried: textfield.contentType = onetimecode.
But this is not what I am looking for, this just gives the otp code fetched from sms as a autocomplete. I am actually looking for a callback function that is auto fired after I receive OTP code on my phone.
I think picture makes it clear, I want to fill the textfield without tapping (keyboard placeholder thingy) the received OTP code.
ANSWER
Answered 2022-Feb-20 at 18:21By design, iOS apps have no access to incoming SMS messages. There are many discussions out there on a similar topic.
The main reason for the restriction is privacy. There is no documented public API to receive a callback when SMS is received. If you try to hack iOS and listen for private notifications then might be your app will be rejected by the App Review team.
While doing research on this topic I found something interesting, you can create an extension that can receive incoming SMS and call events for the purpose of SPAM filtering. This type of extension is called the SMS and Call reporting extension in Apple's ecosystem. While looking at the documentation of this extension, at first glance I thought we can achieve the asked behavior if we can notify our host app about the incoming messages. But while scrolling to the end of the document I found that by design this extension has some additional restrictions:
- The extension cannot share data with the host app.
- The extension can't access the network directly.
- The extension receives the event only if the sender's number is not on the contact list
Anyways it's all about docs, I have not tried anything on the extension. What you can do is try to create an extension and see for other possible solutions.
Example:
1 bad solution in my mind is your extension call your server with the SMS content and then your server forward the SMS content in a silent push notification payload. When your app received the silent notification it serves the purpose of prefilling the field. But again this is not the intended purpose of the extension.
In my opinion, the best is what you have already achieved i.e. setting the text field's content type.
QUESTION
Why is pattern matching ok in scala but using instanceof is a sign of bad code in Java
Asked 2022-Feb-02 at 18:58There is an aspect of the pattern matching I don't understand.
In the documentation of the pattern matching they show an example such as :
1abstract class Notification
2
3case class Email(sender: String, title: String, body: String) extends Notification
4
5case class SMS(caller: String, message: String) extends Notification
6
7case class VoiceRecording(contactName: String, link: String) extends Notification
8
9def showNotification(notification: Notification): String = {
10 notification match {
11 case Email(sender, title, _) =>
12 s"You got an email from $sender with title: $title"
13 case SMS(number, message) =>
14 s"You got an SMS from $number! Message: $message"
15 case VoiceRecording(name, link) =>
16 s"You received a Voice Recording from $name! Click the link to hear it: $link"
17 }
18}
19val someSms = SMS("12345", "Are you there?")
20val someVoiceRecording = VoiceRecording("Tom", "voicerecording.org/id/123")
21
Which could be somewhat recoded in java such as :
1abstract class Notification
2
3case class Email(sender: String, title: String, body: String) extends Notification
4
5case class SMS(caller: String, message: String) extends Notification
6
7case class VoiceRecording(contactName: String, link: String) extends Notification
8
9def showNotification(notification: Notification): String = {
10 notification match {
11 case Email(sender, title, _) =>
12 s"You got an email from $sender with title: $title"
13 case SMS(number, message) =>
14 s"You got an SMS from $number! Message: $message"
15 case VoiceRecording(name, link) =>
16 s"You received a Voice Recording from $name! Click the link to hear it: $link"
17 }
18}
19val someSms = SMS("12345", "Are you there?")
20val someVoiceRecording = VoiceRecording("Tom", "voicerecording.org/id/123")
21Notification notification = /* Init a notification instance */
22
23if(notification instanceof Email) {
24 Email currentEmail = (Email) notification;
25 currentEmail.doSomething();
26} else if (notification instanceof SMS) {
27 SMS currentSMS = (SMS) notification;
28 currentSMS.doSomething();
29} else if {
30 /* ... */
31}
32
Pattern matching seems to be very positively seen but on the opposite the java equivalent is seen as a "code smell" or a bad pattern.
From my understand they are doing the same thing and maybe technically as well, it's just hidden for the scala pattern matching.
Yet such a double standard wouldn't stay unseen so I guess there is something wrong with my understanding.
ANSWER
Answered 2022-Feb-02 at 18:37Under the hood, Scala pattern matching often boils down to code that's exactly like the if (notification instanceof Email) { ... } else if (notification instanceof SMS)
Java code.
The particular example you give, of an abstract class Notification
which isn't sealed
is one where the Scala code is no better (except perhaps expressing overall intent more clearly) than the if
/instanceof
tree.
This is because the main benefit of pattern matching is the possibility of exhaustivity checking. With the if
/instanceof
approach and the example of pattern matching you present, you aren't going to be alerted that you haven't handled every case (e.g. you left off the VoiceRecording
case).
By making Notification
sealed
(e.g. sealed abstract class Notification
), the Scala compiler will ensure that no Scala code in other files (technically, compilation units, which are for all intents and purposes files) can extend Notification
; since it now knows all the possible Notification
s, it can then raise a compiler error if you miss a case. There's no reliable way to do this in the if
/instanceof
case because that's a lower level of abstraction.
QUESTION
Publishing an unofficial version of Telegram in Play Console
Asked 2022-Jan-31 at 07:07My app is an unofficial version of Telegram app that has been already published in Play Store. For first publishing and a few updates afterward, there was no problem for login from Google. But my last update was rejected as below:
Issue: Need login credentials for app review In order for us to review your app for compliance with Developer Program Policies, we will need you to provide valid login credentials for your app. If users need credentials to access your app, please provide all appropriate credentials via Play Console. If you previously supplied credentials, please ensure that they have not expired. If your app normally uses 2-Step Verification (e.g. SMS verification), biometrics (e.g. a fingerprint or face scan) or a location-dependent password (e.g. geo-gate), please provide valid demo credentials that we can use instead.
My question is how to provide an account for Play Store to review my app? or is there any demo account for Telegram to check? Thanks
ANSWER
Answered 2022-Jan-31 at 07:07I recently faced a similar problem and here is my solution.
- First of all, I found this documentation. Here you can find these test phone numbers/accounts which you can use.
- In the BuildVars file, I've set both DEBUG_VERSION and DEBUG_PRIVATE_VERSION to "true".
- Deploy an app and check how it works with Test Accounts. Don't forget: It's very necessary to tick the "Test Backend" checkbox, otherwise, Telegram Test Accounts will not work!
- I turned on a "Managed publishing" in the Google Play Console (it allows you to send a Bundle to review and manually send an app to production after it if needed).
- I described how exactly the Google Play Team should use these accounts to check my app in App Content -> App access in Google Play Console.
- After I passed the review, I built another Bundle, in which I've set both DEBUG_VERSION and DEBUG_PRIVATE_VERSION back to "false" and sent this bundle to the review again (this version will go to Production)
QUESTION
How do I "not" select first character in a regex pattern?
Asked 2021-Dec-25 at 10:38I am a RegEx beginner and trying to identify the endings of different statements in sms. See screenshot below.
How can I avoid selecting the next letter following by a full-stop that indicates ending of a statement.
Note that some statements have <.><Alphabets>
while some have <.><space><Alphabets>
Regex used: r"\. ?[\D]"
Sample SMS: - I want to select just the full-stop and space if any.
1Txn of USD 00.00 done using TC XX at POS*MERCH on 30-Feb-22. Avl bal:USD 00.00. Call xxxxxx for dispute or SMS BLOCK xxxx to xxxxxxx
2
3Acct XX debited with USD XX.00 on some date.Info: ABC*BDECS-XYZ.Avbl Bal:USD yy,xxx.95.Call xxxxxx for dispute or SMS BLOCK xx to xxxxx
4
ANSWER
Answered 2021-Dec-25 at 05:17What you're looking for is a look-ahead group. Whether you make that a positive look-ahead and use the negated character set \D
or a negative look-ahead with the character set \d
doesn't really matter- I'll outline both below:
1Txn of USD 00.00 done using TC XX at POS*MERCH on 30-Feb-22. Avl bal:USD 00.00. Call xxxxxx for dispute or SMS BLOCK xxxx to xxxxxxx
2
3Acct XX debited with USD XX.00 on some date.Info: ABC*BDECS-XYZ.Avbl Bal:USD yy,xxx.95.Call xxxxxx for dispute or SMS BLOCK xx to xxxxx
4regex = r". ?(?=\D)" # asserts that the following character matches \D
5regex = r". ?(?!\d)" # asserts the following character does NOT match \d
6
There's also look-behind variants (?<!pattern)
and (?<=pattern)
, which assert that the pattern doesn't/does match just before the current position.
None of these groups capture the matched text- they just "look ahead" or "look behind" without changing state.
QUESTION
Bad request in PHP
Asked 2021-Dec-18 at 17:43Hello guys i am trying to run an API request which uses URL based authentication. But whenever the message has some spaces in between the message text i receive the error
failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\wamp64\www\testscripts\wialon.php on line 21
When i take the same url string(with the message having spaces in between) and run it on a browser the message sending is successful bellow is my code
1<?php
2 $sendname=$_GET['name'];
3 $sendage=$_GET['age'];
4 $passdat=$_GET['password'];
5 $url = 'https://api.smsleopard.com/v1/sms/send?username=O6QDPDmFBDu6BYBTTX3q&password=.$passdat&message='.$sendage.'&destination=254700160125&source=TWIGA';
6
7 $contents = file_get_contents($url);
8
9 //If $contents is not a boolean FALSE value.
10 if($contents !== false){
11 //Print out the contents.
12 echo $contents;
13 }
14 exit();
15}
16
ANSWER
Answered 2021-Dec-18 at 16:511<?php
2 $sendname=$_GET['name'];
3 $sendage=$_GET['age'];
4 $passdat=$_GET['password'];
5 $url = 'https://api.smsleopard.com/v1/sms/send?username=O6QDPDmFBDu6BYBTTX3q&password=.$passdat&message='.$sendage.'&destination=254700160125&source=TWIGA';
6
7 $contents = file_get_contents($url);
8
9 //If $contents is not a boolean FALSE value.
10 if($contents !== false){
11 //Print out the contents.
12 echo $contents;
13 }
14 exit();
15}
16$url = 'https://api.smsleopard.com/v1/sms/send?username=O6QDPDmFBDu6BYBTTX3q&password='.$passdat.'&message='.$sendage.'&destination=254700160125&source=TWIGA';
17
you forgot ' multiple times
QUESTION
SmsRetrieverClient Crash last update
Asked 2021-Dec-18 at 17:27Google docs say :
Start listening for incoming messages Next, call the SMS User Consent API's startSmsUserConsent() method to start listening for incoming messages. If you know the phone number from which the SMS message will originate, specify it (otherwise, pass null). This way, the SMS User Consent API will only trigger on messages from this number.
But the last update include the change: Strict nullability annotations (@NonNull and @Nullable) are being used where previously @RecentlyNonNull and @RecentlyNullable were used. With this change, what once caused a nullness warning will now cause an error when building Kotlin code or using Java null checking frameworks. Similar annotation changes will be incrementally rolled out in future releases of other com.google.android.gms artifacts.
And now I am getting crash when using SmsRetriever. Since I am specifying null in startSmsUserConsent()
UPDATE: I use:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3
My code:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10
If we go inside startSmsUserConsent we can see this:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12
When i update libraries to version:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14
And now if we go inside startSmsUserConsent, we will see this:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14@NonNull
15public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
16
And now when startSmsUserConsent fires I get crash
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14@NonNull
15public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
16E/AndroidRuntime: FATAL EXCEPTION: main
17 Process: org.***.***, PID: 5183
18 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
19 at org.***.***.ui.fragment.account.Account.startSmsUserConsent$lambda-2$lambda-0(Unknown Source:2)
20 at org.***.***.ui.fragment.account.Account.$r8$lambda$IQ631PjiyctiI5X-7HCb3IAxRs0(Unknown Source:0)
21 at org.***.***.ui.fragment.account.Account$$ExternalSyntheticLambda6.onSuccess(Unknown Source:2)
22 at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)
23 at android.os.Handler.handleCallback(Handler.java:938)
24 at android.os.Handler.dispatchMessage(Handler.java:99)
25 at android.os.Looper.loop(Looper.java:223)
26 at android.app.ActivityThread.main(ActivityThread.java:7656)
27 at java.lang.reflect.Method.invoke(Native Method)
28 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
29 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
30I/Process: Sending signal. PID: 5183 SIG: 9
31
My build:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14@NonNull
15public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
16E/AndroidRuntime: FATAL EXCEPTION: main
17 Process: org.***.***, PID: 5183
18 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
19 at org.***.***.ui.fragment.account.Account.startSmsUserConsent$lambda-2$lambda-0(Unknown Source:2)
20 at org.***.***.ui.fragment.account.Account.$r8$lambda$IQ631PjiyctiI5X-7HCb3IAxRs0(Unknown Source:0)
21 at org.***.***.ui.fragment.account.Account$$ExternalSyntheticLambda6.onSuccess(Unknown Source:2)
22 at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)
23 at android.os.Handler.handleCallback(Handler.java:938)
24 at android.os.Handler.dispatchMessage(Handler.java:99)
25 at android.os.Looper.loop(Looper.java:223)
26 at android.app.ActivityThread.main(ActivityThread.java:7656)
27 at java.lang.reflect.Method.invoke(Native Method)
28 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
29 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
30I/Process: Sending signal. PID: 5183 SIG: 9
31minSdkVersion 19
32targetSdkVersion 31
33Test device api 30
34
UPDATE: Also if I update
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14@NonNull
15public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
16E/AndroidRuntime: FATAL EXCEPTION: main
17 Process: org.***.***, PID: 5183
18 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
19 at org.***.***.ui.fragment.account.Account.startSmsUserConsent$lambda-2$lambda-0(Unknown Source:2)
20 at org.***.***.ui.fragment.account.Account.$r8$lambda$IQ631PjiyctiI5X-7HCb3IAxRs0(Unknown Source:0)
21 at org.***.***.ui.fragment.account.Account$$ExternalSyntheticLambda6.onSuccess(Unknown Source:2)
22 at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)
23 at android.os.Handler.handleCallback(Handler.java:938)
24 at android.os.Handler.dispatchMessage(Handler.java:99)
25 at android.os.Looper.loop(Looper.java:223)
26 at android.app.ActivityThread.main(ActivityThread.java:7656)
27 at java.lang.reflect.Method.invoke(Native Method)
28 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
29 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
30I/Process: Sending signal. PID: 5183 SIG: 9
31minSdkVersion 19
32targetSdkVersion 31
33Test device api 30
34implementation "com.google.android.gms:play-services-maps:18.0.0"
35implementation 'com.google.firebase:firebase-bom:29.0.1'
36
Up to version:
1implementation 'com.google.android.gms:play-services-auth:19.2.0'
2implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'
3private fun startSmsUserConsent() {
4 SmsRetriever.getClient(requireContext()).also {
5 it.startSmsUserConsent(null)
6 .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
7 .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
8 }
9}
10@RecentlyNonNull
11public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
12implementation 'com.google.android.gms:play-services-auth:20.0.0'
13implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'
14@NonNull
15public abstract Task<Void> startSmsUserConsent(@Nullable String var1);
16E/AndroidRuntime: FATAL EXCEPTION: main
17 Process: org.***.***, PID: 5183
18 java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
19 at org.***.***.ui.fragment.account.Account.startSmsUserConsent$lambda-2$lambda-0(Unknown Source:2)
20 at org.***.***.ui.fragment.account.Account.$r8$lambda$IQ631PjiyctiI5X-7HCb3IAxRs0(Unknown Source:0)
21 at org.***.***.ui.fragment.account.Account$$ExternalSyntheticLambda6.onSuccess(Unknown Source:2)
22 at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)
23 at android.os.Handler.handleCallback(Handler.java:938)
24 at android.os.Handler.dispatchMessage(Handler.java:99)
25 at android.os.Looper.loop(Looper.java:223)
26 at android.app.ActivityThread.main(ActivityThread.java:7656)
27 at java.lang.reflect.Method.invoke(Native Method)
28 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
29 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
30I/Process: Sending signal. PID: 5183 SIG: 9
31minSdkVersion 19
32targetSdkVersion 31
33Test device api 30
34implementation "com.google.android.gms:play-services-maps:18.0.0"
35implementation 'com.google.firebase:firebase-bom:29.0.1'
36implementation "com.google.android.gms:play-services-maps:18.0.1"
37implementation 'com.google.firebase:firebase-bom:29.0.2'
38
I get the same crash.Probably the problem is somewhere in "com.google.android.gms"
ANSWER
Answered 2021-Dec-18 at 17:27The problem has been resolved.
[Release Notes Google Services] : https://developers.google.com/android/guides/releases
December 16, 2021 The latest updates to play-services-base and play-services-tasks resolve the issue that can lead to runtime NPEs (NullPointerException) when handling Task results in Kotlin code. If you're using any of the library versions listed in the December 09, 2021 release, you can avoid the runtime NPEs by explicitly depending on v18.0.1 of play-services-base and play-services-tasks. Add the following to the dependencies section of your build.gradle:
implementation 'com.google.android.gms:play-services-base:18.0.1' implementation 'com.google.android.gms:play-services-tasks:18.0.1' In January 2022, we plan to release new versions of the other artifacts released on December 09 with new POM dependencies on the 18.0.1 versions of play-services-base and play-services-tasks.
The latest update to Firebase includes changes to:
Firebase Android BoM (Bill of Materials) Firebase SDK for Google Analytics This Firebase release picks up the latest versions of play-services-base and play-services-tasks (v18.0.1) to fix the issue described in the December 09, 2021 release.
For more information, see the Firebase Android SDK Release Notes.
Community Discussions contain sources that include Stack Exchange Network
Tutorials and Learning Resources in SMS
Tutorials and Learning Resources are not available at this moment for SMS