In my application i used in-app purchase.purchase and restore option doing well on my device.once in-app purchase or restore finished i set to remove lock image.but touch action not be called.in transaction callback function
if event.transaction.state == "purchased" then
db:exec("UPDATE inapproom SET product=1 WHERE id=1")
native.setActivityIndicator( false );
db:close()
store.finishTransaction( event.transaction )
sqlite3=nil;
lock1.alpha=0;
lock2.alpha=0;
lock3.alpha=0;
lock4.alpha=0;
lock5.alpha=0;
lock6.alpha=0;
but touch action not calling.when i move to other page and return back it work properly.
Related
I have implemented AppOpenAds from Admob, they work as intended...To a point.
Unfortunately, when the viewer is watching a 'rewarded' video (ie to get coins in-game) after it finishes, it then shows an AppOpenAd, as it obviously thinks the user has left the app (when they have just watched a video instead). So they are getting a double-whammy ad!
Is there any way I can stop this?
It's using this;
private void OnAppStateChanged(AppState state)
{
// Display the app open ad when the app is foregrounded.
UnityEngine.Debug.Log("App State is " + state);
if (state == AppState.Foreground)
{
AppOpenAdManager.Instance.ShowAdIfAvailable();
}
}
Edit - just to clarify - Rewarded ads work, they just then show an AppOpenAd when the rewarded ad finishes due to it thinking I was outside of the app.
I have integrated IAP functionality in my flutter app. I wants to know when user has clicked the "Cancel" button on IAP popup.
There are many solution found here but that all code is in native.
It will be very helpful If I get the trigger of cancel button click in flutter iOS.
On the cancel button click I need to do other functionalities.
I have followed the IAP integration code from this link:
https://fireship.io/lessons/flutter-inapp-purchases/
and the IAP popup is shown as default popup not a custom.
Please give some suggestion. Any help would be appreciated.
Thank you.
I created a loop to look for failed transactions and then finish them accordingly.
I am still experimenting with where to do this to try to avoid a user error. I am also going to try to do a similar process in the stream listener that processes purchases.
There are StoreKit Wrappers included with IAP plugin:
Note: I looked at SK info for XCode and it seems fine to do this with a failed transaction. They said it is a 'no no' to do it to a pending one.
Future<Null> _removeFailedPendingPurchases() async {
debugPrint(':::: SWIPE WAR ::::: _removeFailedPendingPurchases()');
final SKPaymentQueueWrapper paymentWrapper = SKPaymentQueueWrapper();
final List<SKPaymentTransactionWrapper> transactions =
await paymentWrapper.transactions();
debugPrint(
':::: SWIPE WAR ::::: transactions ${transactions.length} ${transactions.toString()}');
for (SKPaymentTransactionWrapper transaction in transactions) {
debugPrint('TRANSACTION everything : ${transaction.toString()}');
debugPrint('TRANSACTION STATE : ${transaction.transactionState}');
if (transaction.transactionState ==
SKPaymentTransactionStateWrapper.failed)
await paymentWrapper.finishTransaction(transaction);
}
return;
}
When you press cancel button the PurchaseDetails.status will be equal to PurchaseStatus.error. So you check it:
if (purchaseDetails.status == PurchaseStatus.error) {
//Change UI state to reflect this problem
}
I have a requirement where I want to perform an action inside the electron app only when it is in foreground.
It is an electron-react application. On mounting of a component, I want to schedule a periodic task which only runs when the app is in focus or is being used by the user. And pause the task when the app goes in background.
How can we detect the Electron app being in foreground?
You can use the isFocused method from BrowserWindow. To get your own BrowserWindow, you can do this :
remote.BrowserWindow.getAllWindows();
This will return all your app's windows. So to get the first / primary window, you could deconstruct the array like this :
const [yourBrowserWindow] = remote.BrowserWindow.getAllWindows();
console.log(yourBrowserWindow.isFocused());
You can use the focus / blur events on your BrowserWindow to be notified when the app is focused / unfocused.
mainWindow = new BrowserWindow({})
mainWindow.on('focus', () => {
console.log('window got focus')
})
mainWindow.on('blur', () => {
console.log('window blur')
})
You may want to update the component's state within these event handlers or use any other method to keep track of the current focus status.
This assumes that you have a single application window. If you have multiple, you'll need to extend the check to cover all of your windows.
I want to automate our iOS app using xamarin UI test. To access the app, user has to give his/her TouchID. But both Xamarin Test recorder and Repl() failed to identify the Touch ID system dialog (Please see attached screenshot).
This dialog is not developed by our developers and it is a system dialog.
How do I perform the action(s) which associated with this Touch ID?
Thanks
System dialogs is not something you can query with calabash or Xamarin.UITest, which is super annoying.
You would need to use a backdoor to simulate a success or fail state for this. You can read more about these here:
https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/
Basically you define a method in your AppDelegate:
[Export("touchIdBackdoor:")] // notice the colon at the end of the method name
public NSString TouchIdBackdoor(NSString value)
{
if (value == "true")
{
//simulate ok finger press
}
else
{
//simulate failed finger
}
}
Then in your test, when you expect the touch id to appear, you invoke the backdoor:
app.Invoke("touchIdBackdoor:", "true");
To dismiss the touch id and set whatever you need to continue.
How can I set local notifications with out forcing user to open app.
I need my app set a local notification for sunrise and sunset, but I don't want to ask people open app.
I know I can have up to 64 notifications via scheduleLocalNotification, but I need to set it for a year so I should be able to run app in background and set alarms for future sunrises and sunsets in background.
The simple answer is you can't. Your app can't run whenever it wants in the background; it can't schedule a timer to wake itself up to post more notifications when they are due.
The only way you could come close to something like this is by having a server which send a background push notification to your app as a wake-up call when a new batch of 64 notifications are coming close to needed to be posted.
However this would be relying on the fact the user doesn't terminate your app. If the user does then you'd have to send a non-background push notification to the user and hope they click on it to launch your app.
Android Awareness API has recently announced new features that provide a simple solution for your use-case (that avoids you having to explicitly manage location request or computing sunrise times). The way to achieve what you're trying to do is to create and register a TimeFence specified relative to sunrise/sunset.
For example:
// Create TimeFence
AwarenessFence sunriseFence =
TimeFence.aroundTimeInstant(TimeFence.TIME_INSTANT_SUNRISE,
0, 5 * ONE_MINUTE_MILLIS);
// Register fence with Awareness.
Awareness.FenceApi.updateFences(
mGoogleApiClient,
new FenceUpdateRequest.Builder()
.addFence("fenceKey", sunriseFence, myPendingIntent)
.build())
.setResultCallback(new ResultCallback<Status>() {
#Override
public void onResult(#NonNull Status status) {
if (status.isSuccess()) {
Log.i(TAG, "Fence was successfully registered.");
} else {
Log.e(TAG, "Fence could not be registered: " + status);
}
}
});
You will get callbacks when the fence evaluates to TRUE at sunrise, and when it evaluates back to FALSE at 5-min after sunrise.
Please check Fence API code snippets docs for how to add your custom app logic.