StoreReview: Native rating modal doesn't display on all users devices - javascript

Store Review docs: https://docs.expo.dev/versions/latest/sdk/storereview/
Hello, we have a problem with the opening of the app review modal with Expo, that only a minor part of users already well selected seem to see and go through the end of rating process. Many click to see it voluntarily and only a minor part actually publish a review.
We have an application with an app review flow customized to optimize good reviews by targeting specific users already using our app regularly.
Before showing the native app rating modal, we display a previous modal asking if the user want to review us or not. And this previous modal is displayed at the end of a flow of usage of our app, so not disturbing the user up front when he just opened the app.
But actually, we go from 50 logs of clicks to open the native rating modal to 8 review added to our app store / play store in total.
Our app already only supports SDKs recent enough to support native rating modal.
Would you know what could be failing that much ?
Here is our code to launch the native rating modal via events coming from our web app in our website (using a webview as a PWA)
if (message.nativeEvent.data.startsWith('request-review')) {
StoreReview.hasAction().then((hasAction) => {
if (hasAction) {
StoreReview.requestReview().then((res) => {
console.log(res)
}).catch((error) => {
console.log(error);
});
} else {
const reviewUrl = Platform.OS === 'ios' ? Constants.manifest.extra.ios_review_url : Constants.manifest.extra.android_review_url;
Linking.openURL(reviewUrl);
}
});
}

Related

integrate skype for business with my web app

I want to integrate skype for business with my web app, just want to open the app on button click.
There is a way to open a chat window with some specific user via below line in js:
document.getElementById('skypeChat').href="im:<sip:"+textEmail+">";
but i want to only open the app and land on the home screen of the app and not to initate any chat.
I managed to get it working by setting textEmail to the user's own email address.
For example, if your application knows that the user is using SfB address john.doe#domain.com, then this should (could?) open SfB on the starting page:
const textEmail = "john.doe#domain.com";
document.getElementById('skypeChat').href="im:<sip:" + textEmail + ">";
Presumably this happens because they can't chat with themselves, and no error is shown - or at least that is what happens for me; your mileage may vary.
According to documentation you have to use skype:, not im:.
Also to simply activate Skype, you should leave empty action.
document.getElementById('skypeChat').href="skype:";

React-Firebase Authentication

I am having a react application with firebase as authentication. My authentication code is below
await firebase.auth().onAuthStateChanged((user) => {
if (user) {
props.setUser(user); //setting the user if login/register happens
history.push(`/admin/dashboard`);
console.log("user",user)
} else {
props.setUser(null); //blocks the user to get into the app if he/she is not logged in
history.push("/");
}
});
So, when user logs in..he will be navigated to /admin/dashboard. suppose when am in /admin/home and when i refresh the page, it goes again to admin/dashboard which shouldn't happen. so I tried
history.push(${props.location.pathname}); it works correctly after the refresh, it stays on the same page when the application is logged in. but when I restart the server again when I try to log in, it says no redirect url is specified. Got stuck on this for a long time.. Any help is welcome.Thanks
What your code does is check if the user is logged in and only let the user access the data if so.
You should do that in the fireabse rules (= serverside) as this is way more secure.
You didn't provide the kind of FirebaseDB you are using. So assuming you use the Realtime Database here are some according rules:
{
“rules”: {
“.read”: “auth != null”,
“.write”: “auth != null”
}
}
You should maybe check the rules before deploying your app, because now every authenticated user can change/add/delete data, but you get the point. This does exactly what you want so you won't even need to perform a check in your ReactJS App. Firebase will automatically deny unauthenticated users the access to the database.
Btw: You should try to implement security relevant things in the Firebase Rules. Ideally you want your rules to be written in a way that you don't need to perform any validation inside your ReactJS app. Firebase rules can get quite complex. I experienced that myself when writing a chat app with chatrooms and everything. But it is definitly worth the effort if your app is more secure after.

Access React app from other React app on the same page

I have a situation where I have written the front-end of my website as micro-services. Every functional section of my website is a react-habitat application bundled with css and html. I have done this so I can re-use these sections wherever I want on the site.
My problem is however in the checkout area I need to pass the customerId from the login application (on successful response) into the delivery address application so I can bring back the default address. I don't want to create a new application and duplicate the code for login and delivery address applications because I will need to use them elsewhere on the website.
So my question is. How can I pass this customerId from my login application to my delivery address application without a page reload? Is there a way to access a react application method from outside of that react application?
Login click handler:
clickHandler(e) {
e.preventDefault();
let payload = {"email":this.props.email, "password":this.props.password};
AuthenticationApp.login(payload).then((response) => {
if (this.props.referrer === "checkout") {
$("#checkout_login-register-tab").addClass("done");
$("#checkout_login-delivery-tab").removeClass("todo");
// Temporary hack to reload page until we can pass new user session into delivery/billing react app from here.
location.reload();
}
this.props.updateParentState({isLoggedIn: true});
})
.catch(function(response){
console.log("res2 - catch", response)
});
}
I have forced a page reload here so the delivery address application re-renders and picks up customerId from the service. I need a way to re-render the delivery application at this stage (from this separate application), either by accessing a function somehow or forcing the application to reset? Is this possible or is there a workaround other than a page reload?
You can do something like this:
loadDeliveryApp(data) {
ReactDOM.render(<DeliveryApp data={data} />, document.getElementById('delivery-app'))
ReactDOM.unmountComponentAtNode(document.getElementById("login-app"))
}
clickHandler(e) {
e.preventDefault()
// your login stuff
loadDeliveryApp(data)
}
Here is the working demo.
https://codepen.io/madhurgarg71/pen/dzgxMd
I'm the original creator of React Habitat.. all your applications can talk to each other via either a flux observer or something like redux.
I suggest flux for react habitat normally as the individual stores keep it light weight instead of one BIG store in redux where you might have dead code in a habitat situation.
You will need to create one common store that both your applications import so that if one changes it, the other will get the update. I can put a demo together later if that helps.

Can we make a tutorial page for app's fresh installment with ionic framework?

I've been trying to make tutorial page for my app first installment using ionic framework. Is that even possible to make the tutorial page ? Because I can manage to make the splash screen and icon already. An Example maybe ?
You can achieve that by storing something into localstorage, where on your index.html's controller, you will check for the localstorage if the user has seen the intro or not. And once the Intro page is loaded, the localstorage variable would be stored as seen by user or something.
I used Ionic's Slidebox example, I simply added these to the 2 controllers to check if Intro was seen.
YourMainController:
if (window.localStorage.getItem("didIntro") === null) {
$state.go('intro');
}
YourIntroController:
window.localStorage.setItem("didIntro", "seen");
You can checkout this Codepen that I modified for this.
PS: The intro would be shown to the user if they un-install the app or Clear Data of the app. If that bothers you, you could keep server side identification of a user and upon authentication, you could check the didIntro flag you save on your server.

Simple AIR Notification App (noob)

I would like to create a simple AIR app that show's a notification on the bottom right of the users screen. this app won't show all of the time, it will just show if I push a new notification to the users computer. I am doing this in Dreamweaver. It will open on Windows XP computers only.
So far I have found out how to show a notification window with my html file:
notification.load( new air.URLRequest( HTML_SOURCE ) );
What I am not clear on is:
how to have this happen automatically on login.
how the AIR app can check if a new msg is available.
how best to exit the app
Thanks for any help!
For starting application on login, you have to set air.NativeApplication.nativeApplication.startAtLogin = true
For details u=you can have a look at this adobe article.
You can store messages with a increasing message_id column. So when your application shows any message it can store that value as last_message_read in your data. Then you can use this value to check if new messages are available (You will have to save this variable in a file)
For exiting application you can use air.NativeApplication.nativeApplication.exit();
or just close your main application window by close(). It will automatically close your application.

Categories

Resources