-
Notifications
You must be signed in to change notification settings - Fork 24.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Most TextInput textContentTypes don't work due to mismatched string constants #22578
Comments
I'm happy to try and implement any of the 3 solutions, just looking for guidance from the RN team around which would be their preferred approach. |
I've recreated this PR with the compile fix since the original PR was reverted. |
@levibuzolic Any view on when this will make it in? Looks like the pull request is still failing. |
@timt not really, I’ve been trying to work out why the tests are failing but have t had much luck they seem unrelated to the PR. I’ll get it up to date with master again and see if that sorts things out. |
Why is this issue closed? I do experience problems with this, especially trying to implement oneTimeCode autofill from text messages. |
@albinhubsch because the first PR for it was merged, but then reverted. I can’t re-open the issue. There’s a new PR up for it, been trying to get it in for a while. #22611 |
+1 |
rn version 0.58.3 |
@luisfuertes fixed in #22611 |
@levibuzolic Thanks for answer. In what rn version is fixed? |
@luisfuertes hasn't been merged to |
Summary: This is an updated version of #22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue #22578 has more detail examples/explanation. Pull Request resolved: #22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
…ook#22611) Summary: This is an updated version of facebook#22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue facebook#22578 has more detail examples/explanation. Pull Request resolved: facebook#22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
Summary: This is an updated version of #22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue #22578 has more detail examples/explanation. Pull Request resolved: #22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
Summary: This is an updated version of #22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue #22578 has more detail examples/explanation. Pull Request resolved: #22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
@levibuzolic Is this available in the current release yet? I'm on RN 0.59.1 and I still can't seem to get |
Yeah it is, I'm reasonably sure its working in our project. Worth noting that most (maybe all) of the types don't work correctly in the simulator and will only work on a real device. What issues are you having? |
@levibuzolic Apologies for the late response. I upgraded to RN 0.59.2 a couple of days ago, hoping this would clear up the issue. Unfortunately I'm still having problems getting it to work (using a real device). I'm going to dive into it a little more. The only thing that might be causing an issue is that I'm using the |
@makozlo-airship hmm, I'm not familiar with Formik, quick glance at the code looks like it should just be passing |
@makozlo-airship @levibuzolic Hey guys, seeing the same thing where the |
Oh sorry @t2, looks like latest Expo (v32) is only on React Native 0.57, my PR went out in 0.58.6. I've built your snack locally on the latest version of React Native 0.59.5 and can confirm it's working correctly: If you need to use Expo, you can work around this issue temporarily by using the iOS literal strings from the right column of the table I posted in my PR description, these will be passed through directly and should work for now (until Expo moves to React Native 0.58.6 or higher). You can see this working in this Expo Snack. Make sure you leave a note for yourself to switch to the proper strings later! |
…ook#22611) Summary: This is an updated version of facebook#22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue facebook#22578 has more detail examples/explanation. Pull Request resolved: facebook#22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
…ook#22611) Summary: This is an updated version of facebook#22579 which uses compile conditionals to prevent `use of undeclared identifier` errors when compiling on older versions of Xcode. -------- Currently the only `textContentType` values that work are: `username`, `password`, `location`, `name` and `nickname`. This is due to the strings provided by React Native not matching up with the underlying string constants used in iOS (with the exception of the aforementioned types). Issue facebook#22578 has more detail examples/explanation. Pull Request resolved: facebook#22611 Differential Revision: D13460949 Pulled By: cpojer fbshipit-source-id: e6d1108422b850ebc3aea05693ed05118b77b5de
@levibuzolic Hi thanks for your PR. On my project oneTimeCode still is not working. I am on react native 0.59.10 and iOS version 12.3.1
|
@tsdmrfth by "not working" do you mean you're not getting the keyboard accessory item? I'd take a look at the format of your SMS as Apple has some specific requirements for
Here's a screenshot I took this morning of it in action on iOS 12.3.1 and React Native 0.59.10 |
@levibuzolic I did not know requirements above. Thanks |
@levibuzolic thanks for listing out all those requirements. For some reason even following them, the code autofill doesn't show up. I'm using <Fragment>
<StatusBar barStyle="light-content" />
<View style={styles.container}>
<TextInput
placeholder="123123"
keyboardType="numeric"
textContentType="oneTimeCode"
autoFocus
onChangeText={text => this.setState({ verificationCode: text })}
value={verificationCode}
/>
<TouchableOpacity style={styles.button} onPress={this.handleSubmit}>
<Text style={styles.buttonText}>Verify</Text>
</TouchableOpacity>
</View>
</Fragment> The text message says The only thing that comes in mind is maybe if the text message comes from a number format like Also, if I set the Any suggestions of what else could it be? 🙂 Thanks! |
Never mind, I just tried the same app on another iPhone device and it worked there. Maybe there's a setting somewhere on my iPhone which prevents the AutoFill or something like that 🤔 |
Hmm not sure. I’ve not seen any issues like that in our app using a few different number formats. Sorry I’m not of much help here. 😕 |
No worries. The fact that it works on other devices except for mine, is already a good sign 🙂 |
I just tried |
@levibuzolic Where can I read about the SMS requirements? |
@Dror-Bar I'm having a hard time digging up where I got the original list of requirements that I posted earlier in this thread, however here's a few resources I could dig up: |
Environment
Description
The strings used for
textContentType
are passed directly though to iOS, however they don't match up with the underlying string constants used in iOS.I ran the following code in a playground to source the underlying values of the TextContentType constants:
Here are the values that I got.
URL
url
addressCity
address-level2
addressCityAndState
address-level1+2
addressState
address-level1
countryName
country-name
creditCardNumber
cc-number
emailAddress
email
familyName
family-name
fullStreetAddress
street-address
givenName
given-name
jobTitle
organization-title
location
location
middleName
additional-name
name
name
namePrefix
honorifix-prefix
nameSuffix
honorifix-suffix
nickname
nickname
organizationName
organization
postalCode
postal-code
streetAddressLine1
address-line1
streetAddressLine2
address-line2
sublocality
address-level3
telephoneNumber
tel
username
username
password
password
newPassword
new-password
oneTimeCode
one-time-code
According to this table the only
textContentType
s that will work currently in React Native are:username
,password
,location
,name
andnickname
.Possible Solutions
The simplest solution would be to update
textContentType
to use the iOS strings instead of current keys.Alternatively a mapping in the native code could allow us to keep the existing strings and just silently translate them.
My preferred solution is to map each string to the named Objective-C constants which I've created a PR for #22579.
Reproducible Demo
I've created a demo snack which allows you to try each
textContentType
with both the React Native and iOS strings: https://snack.expo.io/@levibuzolic/textcontenttypeExample Screenshots
addressState
address-level1
newPassword
new-password
The text was updated successfully, but these errors were encountered: