Skip to content

Instantly share code, notes, and snippets.

View javieranton-zz's full-sized avatar

Anton javieranton-zz

View GitHub Profile
@javieranton-zz
javieranton-zz / StringThrottle.java
Last active August 6, 2022 17:19
Prevent GC crashes when processing too large strings too quickly
/**
* handles manual calls to GC + pause in case too much memory is being allocated too quickly to Strings in iOS
*/
public class StringThrottle {
private static long lastTimeSafeStringCreated = 0;
private static long accumulatedSizeInLast4Secs = 0;
private static int SafeStringDetectionPeriod = 4000;
private static int SafeStringPostGCSleep = 400;
private static int MaxSafeStringSizeB4GC = 5000000;
<service android:name="your.native.namespace.GroupsJobIntentService" android:permission="android.permission.BIND_JOB_SERVICE" />
<service android:name="your.native.namespace.FirebaseServiceExtended">
<intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<receiver android:name="your.native.namespace.GroupsReceiver"> </receiver>
if(repliedNotifAcks == nil)
repliedNotifAcks = [[NSMutableArray alloc] init];
your_namespace_MainClass_registerPushFromAfterFinishedLaunching__(CN1_THREAD_GET_STATE_PASS_SINGLE_ARG);
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {
const unsigned *tokenBytes = [deviceToken bytes];
NSString *tokenAsString = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
JAVA_OBJECT str = fromNSString(CN1_THREAD_GET_STATE_PASS_ARG tokenAsString);
your_namespace_MainClass_iosPushRegistered___java_lang_String(CN1_THREAD_GET_STATE_PASS_ARG str);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
{
"aps": {
"content-available" : 1,
"alert": {
"title": title,
"body": body
},
"badge": badgeCount,
"sound": "bingbong.aiff"
},
/*
.h file
*/
#import <Foundation/Foundation.h>
#import <UserNotifications/UserNotifications.h>
@interface your_namespace_YourInterfaceImpl : NSObject<UNUserNotificationCenterDelegate> {
}
//foreground notifications
//feel free to remove params, this is just an example that passes APN meta fields to your app
public static void iosActivePushReceived(String notifId, String senderId) {
//do stuff. don't forget to encapsulate with Display's runSerially
}
public static void registerPushFromAfterFinishedLaunching() {
//call your native's interfcae registePush() method from here
}
public static void iosPushReceived(String notifId) {
//background push tapped. You could save the notifId/flag in a static field in your app so that your app knows it has to trigger some action in start()
{
"message":{
"<deviceToken>",
"data":{
"messageType":"4",
"message":"title;body",
"notifId":"",
"senderId":"",
"hasImage":""
}
public String getPushIntent()
{
String actionId = null;
if (com.codename1.impl.android.AndroidNativeUtil.getActivity() != null){
Activity activity = com.codename1.impl.android.AndroidNativeUtil.getActivity();
android.os.Bundle extras = activity.getIntent().getExtras();
if (extras != null) {
actionId = extras.getString("pushAction");
extras.remove("pushAction");
activity.setIntent(new Intent());
import com.google.firebase.messaging.RemoteMessage;
import android.app.NotificationManager;
import android.app.Activity;
import android.content.Intent;
import android.app.PendingIntent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.app.NotificationCompat.Builder;
import android.support.v4.app.NotificationCompat;