appboy / appboy-segment-ios Goto Github PK
View Code? Open in Web Editor NEWBraze's side-by-side iOS SDK integration with Segment.IO
Home Page: https://www.braze.com
License: Other
Braze's side-by-side iOS SDK integration with Segment.IO
Home Page: https://www.braze.com
License: Other
For EU data centers Appboy requires to override SDK endpoint: https://www.appboy.com/documentation/FAQs/#im-using-the-eu-database-what-do-i-need-to-do-differently
The current pod version is not compatible with analytics-ios 3.2. 3.2.0 is now a month old and we're at 3.2.5 as we speak.
Related issue (segment-mixpanel): segment-integrations/analytics-ios-integration-mixpanel#11
When running our app on Xcode 9 beta 1, which includes a UI call checker on background threads in debug mode, we notice the following error:
=================================================================
Main Thread Checker: UI API called on a background thread: -[UIApplication delegate]
PID: 71346, TID: 3467076, Thread name: (none), Queue name: io.segment.analytics, QoS: 0
Backtrace:
4 Segment_Appboy 0x0000000108f3f4eb -[SEGAppboyIntegration applicationDidFinishLaunching:] + 91
5 CoreFoundation 0x000000010ce54c3c __invoking___ + 140
6 CoreFoundation 0x000000010ce54b10 -[NSInvocation invoke] + 320
7 CoreFoundation 0x000000010ce6d356 -[NSInvocation invokeWithTarget:] + 54
8 Analytics 0x000000010612b017 -[SEGIntegrationsManager invokeIntegration:key:selector:arguments:options:] + 1015
9 Analytics 0x000000010612aaef __60-[SEGIntegrationsManager forwardSelector:arguments:options:]_block_invoke + 143
10 CoreFoundation 0x000000010ce55632 -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 210
11 Analytics 0x000000010612a9a4 -[SEGIntegrationsManager forwardSelector:arguments:options:] + 356
12 Analytics 0x000000010612bb91 __78-[SEGIntegrationsManager callIntegrationsWithSelector:arguments:options:sync:]_block_invoke + 129
13 Analytics 0x00000001061212b1 __seg_dispatch_specific_block_invoke + 49
14 libdispatch.dylib 0x000000010ea4d1d9 _dispatch_call_block_and_release + 12
15 libdispatch.dylib 0x000000010ea4e1c1 _dispatch_client_callout + 8
16 libdispatch.dylib 0x000000010ea55e4a _dispatch_queue_serial_drain + 700
17 libdispatch.dylib 0x000000010ea56715 _dispatch_queue_invoke + 332
18 libdispatch.dylib 0x000000010ea58d01 _dispatch_root_queue_drain + 579
19 libdispatch.dylib 0x000000010ea58a57 _dispatch_worker_thread4 + 47
20 libsystem_pthread.dylib 0x000000010ee99315 _pt[info] <= GET https://dev1.takescoop.com/system/info [200]
hread_wqthread + 1370
21 libsystem_pthread.dylib 0x000000010ee98da9 start_wqthread + 13
2017-06-14 21:05:57.653802-0700 Scoop Internal[71346:3467118] TIC Read Status [11:0x0]: 1:57
2017-06-14 21:05:57.635840-0700 Scoop Internal[71346:3467190] Could not successfully update network info during initialization.
2017-06-14 21:05:57.669208-0700 Scoop Internal[71346:3467118] TIC Read Status [11:0x0]: 1:57
2017-06-14 21:05:57.669244-0700 Scoop Internal[71346:3467076] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication delegate]
PID: 71346, TID: 3467076, Thread name: (none), Queue name: io.segment.analytics, QoS: 0
Backtrace:
4 Segment_Appboy 0x0000000108f3f4eb -[SEGAppboyIntegration applicationDidFinishLaunching:] + 91
5 CoreFoundation 0x000000010ce54c3c __invoking___ + 140
6 CoreFoundation 0x000000010ce54b10 -[NSInvocation invoke] + 320
7 CoreFoundation 0x000000010ce6d356 -[NSInvocation invokeWithTarget:] + 54
8 Analytics 0x000000010612b017 -[SEGIntegrationsManager invokeIntegration:key:selector:arguments:options:] + 1015
9 Analytics 0x000000010612aaef __60-[SEGIntegrationsManager forwardSelector:arguments:options:]_block_invoke + 143
10 CoreFoundation 0x000000010ce55632 -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 210
11 Analytics 0x000000010612a9a4 -[SEGIntegrationsManager forwardSelector:arguments:options:] + 356
12 Analytics 0x000000010612bb91 __78-[SEGIntegrationsManager callIntegrationsWithSelector:arguments:options:sync:]_block_invoke + 129
13 Analytics 0x00000001061212b1 __seg_dispatch_specific_block_invoke + 49
14 libdispatch.dylib 0x000000010ea4d1d9 _dispatch_call_block_and_release + 12
15 libdispatch.dylib 0x000000010ea4e1c1 _dispatch_client_callout + 8
16 libdispatch.dylib 0x000000010ea55e4a _dispatch_queue_serial_drain + 700
17 libdispatch.dylib 0x000000010ea56715 _dispatch_queue_invoke + 332
18 libdispatch.dylib 0x000000010ea58d01 _dispatch_root_queue_drain + 579
19 libdispatch.dylib 0x000000010ea58a57 _dispatch_worker_thread4 + 47
20 libsystem_pthread.dylib 0x000000010ee99315 _pthread_wqthread + 1370
21 libsystem_pthread.dylib 0x000000010ee98da9 start_wqthread + 13
Which links to this line: https://github.com/Appboy/appboy-segment-ios/blob/master/Pod/Classes/SEGAppboyIntegration.m#L219
Hey,
Using the 1.0.4 version with XCode 9 on iOS 11 .
This is the backtrace I got:
Main Thread Checker: UI API called on a background thread: -[UIApplication delegate]
PID: 503, TID: 48849, Thread name: (none), Queue name: io.segment.analytics, QoS: 0
Backtrace:
4 Segment_Appboy 0x0000000103544040 -[SEGAppboyIntegration applicationDidFinishLaunching:] + 112
5 CoreFoundation 0x0000000182b876a0 <redacted> + 144
6 CoreFoundation 0x0000000182a66820 <redacted> + 292
7 CoreFoundation 0x0000000182a6b22c <redacted> + 60
8 Analytics 0x0000000101adefac -[SEGIntegrationsManager invokeIntegration:key:selector:arguments:options:] + 952
9 Analytics 0x0000000101adeab8 __60-[SEGIntegrationsManager forwardSelector:arguments:options:]_block_invoke + 144
10 CoreFoundation 0x0000000182a4e6cc <redacted> + 232
11 Analytics 0x0000000101ade95c -[SEGIntegrationsManager forwardSelector:arguments:options:] + 316
12 Analytics 0x0000000101adfa94 __78-[SEGIntegrationsManager callIntegrationsWithSelector:arguments:options:sync:]_block_invoke + 120
13 Analytics 0x0000000101ad4e3c __seg_dispatch_specific_block_invoke + 60
14 libdispatch.dylib 0x00000001042e949c _dispatch_call_block_and_release + 24
15 libdispatch.dylib 0x00000001042e945c _dispatch_client_callout + 16
16 libdispatch.dylib 0x00000001042f8110 _dispatch_queue_serial_drain + 692
17 libdispatch.dylib 0x00000001042ec9a4 _dispatch_queue_invoke + 332
18 libdispatch.dylib 0x00000001042f9104 _dispatch_root_queue_drain_deferred_wlh + 424
19 libdispatch.dylib 0x0000000104300100 _dispatch_workloop_worker_thread + 652
20 libsystem_pthread.dylib 0x00000001827aafe0 _pthread_wqthread + 932
21 libsystem_pthread.dylib 0x00000001827aac30 start_wqthread + 4
Thanks,
I want to configure this for use in a new project using Swift, but the usage instructions only include Objective C instructions.
I'm able to load Segment, but I'm not sure how to go about telling the configuration to integrate with Braze:
import Segment
let segmentConfig = AnalyticsConfiguration(writeKey:"SOME-API-KEY")
Analytics.setup(with: segmentConfig)
I can't find a reference to SEGAppboyIntegrationFactory
or any way to import it. I looked into creating bridging headers, but from what I've read it seems like this needs to be done by the package maintainers themselves.
Thank you!
I'm attempting to integrate using the new SPM integration steps but am encountering a couple build issues, even on a fresh project.
Steps to Reproduce:
I receive the following build errors:
In file included from /Users/.../SourcePackages/checkouts/appboy-segment-ios/Sources/Full-SDK/SEGAppboyHelper.m:2:
/Users/.../SourcePackages/checkouts/appboy-segment-ios/Sources/Full-SDK/SEGAppboyIntegration.h:8:44: error: no type or protocol named 'SEGIntegration'
@interface SEGAppboyIntegration : NSObject<SEGIntegration>
^
/Users/.../SourcePackages/checkouts/appboy-segment-ios/Sources/Full-SDK/SEGAppboyHelper.m:6:9: fatal error: 'Appboy-iOS-SDK/AppboyKit.h' file not found
#import "Appboy-iOS-SDK/AppboyKit.h"
Here's an fresh example project that produces the errors:
SegmentAppboySPM.zip
Just wondering if (or when?) we'll get Swift Package Manager support for this library. (Specifically Core
, not UI
.)
Hi,
When I want to send a NSArray
on an event, this NSArray
is converted to a NSMutableArray
by SEGCoerceJSONObject
(from SEGAnalyticsUtils.m
).
Yet, Appboy does not handle NSMutableArray
but NSArray
. So the Xcode debugger prints the following information :
[APPBOY] Invalid Property Value class __NSArrayM for key allergies removing.
Can you fix it ?
Thanks in advance,
Bilal
I have to integrate braze with segment, I am using Cocoapods Segment-Appboy, '3.21.3'. I am not able to import it
Hey there!
I get the following error when building with cocoapods 1.0.0.beta.6 dependencies:
"Appboy-iOS-SDK/AppboyKit.h" file not found
which refers to this line: https://github.com/Appboy/appboy-segment-ios/blob/master/Pod/Classes/SEGAppboyIntegration.m#L2
My pod version is 1.0.0 (not the latest), but those lines are unchanged in the last version so I believe it doesn't matter here.
Temporary fix (notice the underscores):
-#import "Appboy-iOS-SDK/AppboyKit.h"
-#import "Appboy-iOS-SDK/ABKUser.h"
+#import <Appboy_iOS_SDK/AppboyKit.h>
+#import <Appboy_iOS_SDK/ABKUser.h>
Example in a Podfile:
post_install do |installer|
# Workaround https://github.com/Appboy/appboy-segment-ios/issues/4
path = "./Pods/Segment-Appboy/Pod/Classes/SEGAppboyIntegration.m"
File.chmod(0644, path)
File.write(path, File.open(path, &:read)
.gsub('#import "Appboy-iOS-SDK/AppboyKit.h"', "#import <Appboy_iOS_SDK/AppboyKit.h>")
.gsub('#import "Appboy-iOS-SDK/ABKUser.h"', "#import <Appboy_iOS_SDK/ABKUser.h>")
)
end
If you run the app you'll get an error about an invalid SDK endpoint. This used to not be the case. There should be a better way to alert people who adopt Side by Side integration pod that the app will not work at compile time.
How about making instance
return an instancetype
instead of a generic id
here? https://github.com/Appboy/appboy-segment-ios/blob/master/Pod/Classes/SEGAppboyIntegrationFactory.h#L6
This way we could avoid casting to SEGAppboyIntegrationFactory
when setting up the segment configuration.
if let appboyFactory = SEGAppboyIntegrationFactory.instance() as? SEGAppboyIntegrationFactory {
segmentConfiguration.use(appboyFactory)
}
Hi,
We have found an issue with opening universal links received in remote notifications while the app is inactive (it works properly though while the app is in background or foreground). It's worth mentioning that we are using the UNUserNotificationCenter
approach instead of the old didReceiveRemoteNotification
way.
Following Braze documentation we register to the notificationCenter early in AppDelegate's didFinishLaunching:options
method as follows:
UNUserNotificationCenter.current().delegate = self
Then we implement userNotificationCenter delegate didReceive
method to forward the notification the notification to the integration factory and handle it properly:
open func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if Appboy.sharedInstance() == nil {
brazeIntegrationFactory?.appboyHelper.save(center, notificationResponse: response)
} else {
brazeIntegrationFactory?.appboyHelper.userNotificationCenter(center, receivedNotificationResponse: response)
}
}
We also use the integration initialization to setup ABKURLDelegate
and to implement handleAppboyURL
method:
func handleAppboyURL(_ url: URL?, from channel: ABKChannel, withExtras extras: [AnyHashable: Any]?) -> Bool {
...
return true
}
While debugging we have found that everything is called when we receive a notification from Braze until SEGAppboyIntegration
calls the Appboy internal method handleRemotePushNotification:withIdentifier:completionHandler:applicationState
method, which we don't have access to. After that method is called from logPushIfComesInBeforeAppboyInitializedWithIdentifier
we lose the track and handleAppboyURL
is never called.
Again, if the notification is received while we are in background or foreground; OR if we refactor the project to use the old didReceiveRemoteNotification
method instead of using UserNotificationCenter, everything works as expected so we are guessing that maybe there's some kind of internal condition inside the handleRemotePushNotification:withIdentifier:completionHandler:applicationState
that is failing somehow.
Could you give us some kind of visibility of this issue and/or check that the implementation with userNotificationCenter is still working as expected?
Import statements are breaking in this project and does not compile. see: https://github.com/segmentio/analytics-ios/releases/tag/4.1.0
I really want to use this SDK on tvOS, please :(
pod 'Appboy-iOS-SDK', '3.0.1'
pod 'Segment-Appboy', '2.0.0'
/path/to/app/Pods/Segment-Appboy/Pod/Classes/SEGAppboyIntegrationEndpointDelegate.h:2:9: 'ABKAppboyEndpointDelegate.h' file not found
I have recently downloaded Xcode 12.4 and updated all my Pods to latest. One of Pod was having entry for segment
platform :ios, '14'
pod 'Segment-Appboy', '~> 3.3'
This Pod internally has dependency with appboy-ios-sdk, so once after pod install succeeded, building through Xcode gives below compile error for build target appboy-ios-sdk:
ld: in /Pods/Appboy-iOS-SDK/AppboyKit/libAppboyKitLibrary.a(ABKInAppMessageHTMLBase.o), building for iOS Simulator, but linking in object file built for iOS, file '//AppboyKit/libAppboyKitLibrary.a' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Which Segment pod version should I connect to support iOS 14 and XCode 12 ?
These couple lines of code need to be refactored as these are deprecated.
This is causing test content cards to not show up in the feed and potential flaky behavior on push notifications tracking as Direct Opens.
Hey folks,
Noticed the last two updates to the SDK do not include Carthage support but the CHANGELOG indicates a reintroduction will happen in a future version. Is there a timeline for when this will occur?
There doesn't appear to be a documented method, using the side-by-side integration, to know when the AppBoy sharedInstance
has been configured and is ready to use. The Android version has an onSdkReady callback that can be hooked into for this purpose. It's quite important to do this so we can set some user properties immediately.
How would you advise doing this?
for (NSString *key in payload.traits.allKeys) {
if (![appboyTraits containsObject:key]) {
id traitValue = payload.traits[key];
if ([traitValue isKindOfClass:[NSString class]]) {
[[Appboy sharedInstance].user setCustomAttributeWithKey:key andStringValue:traitValue];
SEGLog(@"[[Appboy sharedInstance].user setCustomAttributeWithKey: andStringValue:]");
} else if ([traitValue isKindOfClass:[NSNumber class]]) {
if (strcmp([traitValue objCType], [@(YES) objCType]) == 0) {
[[Appboy sharedInstance].user setCustomAttributeWithKey:key andBOOLValue:[(NSNumber *)traitValue boolValue]];
SEGLog(@"[[Appboy sharedInstance].user setCustomAttributeWithKey: andBOOLValue:]");
} else if (strcmp([traitValue objCType], @encode(int)) == 0) {
[[Appboy sharedInstance].user setCustomAttributeWithKey:key andIntegerValue:[(NSNumber *)traitValue integerValue]];
SEGLog(@"[[Appboy sharedInstance].user setCustomAttributeWithKey: andIntegerValue:]");
} else if (strcmp([traitValue objCType], @encode(double)) == 0) {
[[Appboy sharedInstance].user setCustomAttributeWithKey:key andDoubleValue:[(NSNumber *)traitValue doubleValue]];
SEGLog(@"[[Appboy sharedInstance].user setCustomAttributeWithKey: andDoubleValue:]");
} else {
SEGLog(@"Could not map NSNumber value to Appboy custom attribute:%@]", traitValue);
}
}
}
}
This code will not be able to map any integer type that isn't cast to an int
type, this includes long
s and NSIntegers
, basically most of the integer types that are used in iOS programming.
I'm trying to add Segment-appboy integration, and after having issues with headers, which refused to work, now I have issue with linker:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Appboy", referenced from:
objc-class-ref in SEGAppboyIntegration.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
My headers:
#import <Analytics/SEGAnalytics.h>
#import <Segment_Appboy/SEGAppboyIntegrationFactory.h>
#import <Appboy.h>
My code:
NSString *key = [APIManager sharedInstance].developMode ? kSegmentStagingKey : kSegmentProductionKey;
SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:key];
configuration.trackApplicationLifecycleEvents = YES; // Enable this to record certain application events automatically!
[configuration use:[SEGAppboyIntegrationFactory instance]];
[SEGAnalytics setupWithConfiguration:configuration];
My podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
abstract_target 'Core' do
//omitted
pod 'Analytics', '~> 3.0'
pod 'Segment-Appboy'
target 'myTarget' do
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Configure Pod targets for Xcode 8 compatibility
config.build_settings['SWIFT_VERSION'] = '3.0'
end
end
end
My main issue is that in Segment integration guide there is no mention of what headers to include, I did the same as in example app, but they fail to compile in my project, probably due to use_frameworks!
Is there a reason why this method is not supported?
Hi, I've noticed that when we try to send a custom event through Segment SDK that has a param named "revenue", the event is not sent to Braze.
Analyzing the code, I could verify that on the line 214 in the file SEGAppboyIntegration.m exists a logic that prevent the sending of custom events in this case.
This is a problem because we need this param to other tools that we are sending events through Segment via the same method that send events to Braze.
I'm using the version 4.5.0 of the SDK, and we could confirm that this also happens in the Android sdk.
How can I ensure that custom events with "revenue" params are sent as intended?
After trying to use the new Carthage support, it wasn't until I tried to checkout and build the dependency with Carthage that I realised it doesn't support building with Carthage.
*** Skipped building appboy-ios-sdk due to the error:
Dependency "appboy-ios-sdk" has no shared framework schemes for any of the platforms: iOS
If you believe this to be an error, please file an issue with the maintainers at https://github.com/appboy/appboy-ios-sdk/issues/new
*** Skipped building appboy-segment-ios due to the error:
Dependency "appboy-segment-ios" has no shared framework schemes for any of the platforms: iOS
If you believe this to be an error, please file an issue with the maintainers at https://github.com/appboy/appboy-segment-ios/issues/new
It would be great if you could provide and manage a Binary Project Specification and consider updating the read me to mention that the dependency binary download only.
https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#binary-project-specification
Hi,
We are experiencing a weird warning :
********************************************
** !! WARNING !! **
** [Appboy sharedInstance] called **
** before Appboy was initialized, **
** returning nil. Please make **
** sure you call [Appboy startWithApiKey] **
** before accessing the sharedInstance. **
********************************************
but AppBoy is initialized before :
// Init Segment
SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"**********"];
configuration.shouldUseLocationServices = NO;
[configuration use:[SEGAppboyIntegrationFactory instance]];
[SEGAnalytics setupWithConfiguration:configuration];
[SEGAnalytics debug:NO];
[[Appboy sharedInstance] registerPushToken:****];
SDK : Segment-Appboy
SDK Version :
- Segment-Appboy (1.0.4):
- Analytics (~> 3.0)
- Appboy-iOS-SDK (= 2.28.0)
iOS : 10
https://segment.com/docs/personas/identity-resolution/identity-resolution-settings/
Following the documents braze_id in the identify payload doesnt automatically map as the user ID in braze.
Hey Braze Team,
I'm receiving in app notification messages to my test device, but whenever I open the message the in app modal I've setup via Braze isn't displaying at all. So far I've done the following:
NOTE: we're using Swift Package Manager to handle third party integrations.
Logs from Braze:
2021-08-30 10:58:39.835434-0400 MyLife[1780:485436] [APPBOY][DEBUG] -[ABKTriggerManager handleTriggerFromNotification:]_block_invoke Trigger sync in progress, adding trigger event to pending list. 2021-08-30 10:58:39.835483-0400 MyLife[1780:485436] [APPBOY][DEBUG] -[ABKTriggerManager handleTriggerFromNotification:]_block_invoke Trigger sync in progress, adding trigger event to pending list. 2021-08-30 10:58:39.835671-0400 MyLife[1780:483936] [APPBOY][DEBUG] -[ABKService request:finishedSuccessfully:] ABKDataServerRequest finished, completed successfully: 1 2021-08-30 10:58:39.835705-0400 MyLife[1780:483936] [APPBOY][DEBUG] -[ABKService dataRequest:finishedSuccessfully:] ABKDataServerRequest asked for feed: 0, triggers: 1, config: 0 2021-08-30 10:58:39.835751-0400 MyLife[1780:485437] [APPBOY][DEBUG] -[ABKTriggeredAction respondsToTriggerEvent:] Triggered action with id 612cf21ccd27882d47d2c924 matches trigger event with type test 2021-08-30 10:58:39.835789-0400 MyLife[1780:485437] [APPBOY][DEBUG] -[ABKTriggerManager processTriggerEvent:] No matching actions for trigger event test 2021-08-30 10:58:39.835822-0400 MyLife[1780:485437] [APPBOY][DEBUG] -[ABKTriggerManager processTriggerEvent:] No matching actions for trigger event push_click
I also followed this website here on troubleshooting Braze in app messages: https://www.braze.com/docs/developer_guide/platform_integration_guides/ios/in-app_messaging/troubleshooting/
So far it's not a delivery issue, but instead an issue with the in app modal message being displayed within the app. Looking forward to getting some help here and thanks!
Hello ,
We are integrating Braze through Segment in our Xamarin Forms project.
Will you provide Xamarin bindings for this repository?
If not you could you please provide instructions how can we achieve the same behavior ? Please update documentation for this feature through Xamarin as well.
The current library names are Full-SDK
and Core
, which lead to import statements such as import Full_SDK
and import Core
- these names give the reader no insight into what library is being imported.
A couple examples of library names that would clearly indicate what is being imported:
Full-SDK
-> AppboySegment
Core
-> AppboySegmentCore
Can a rename please be considered?
Recently, we have noticed that the integration does not actually propagate the "Ad" field through from Segment.
The code from
is missing it. For reference it looks as follows:- (void)track:(SEGTrackPayload *)payload
{
if ([payload.event isEqualToString:@"Install Attributed"]) {
if ([payload.properties[@"campaign"] isKindOfClass:[NSDictionary class]]) {
NSDictionary *attributionDataDictionary = (NSDictionary *)payload.properties[@"campaign"];
ABKAttributionData *attributionData = [[ABKAttributionData alloc]
initWithNetwork:attributionDataDictionary[@"source"]
campaign:attributionDataDictionary[@"name"]
adGroup:attributionDataDictionary[@"ad_group"]
creative:attributionDataDictionary[@"ad_creative"]];
[[Appboy sharedInstance].user setAttributionData:attributionData];
return;
}
}
Notice how only ad group, name, source and creative are there. This leads to broken campaign data as you can see below
Please advise, in the meantime, I can try opening a PR
Hi,
I get the following errors when building with cocoapods 1.3.1
Use of undeclared identifier 'ABKSDKFlavorKey'
Use of undeclared identifier 'SEGMENT'
Podfile :
pod 'Segment-Appboy'
Can we please add support for v 3.19.0
<- https://github.com/Appboy/appboy-ios-sdk/releases/tag/3.19.0
sorry, wrong repo
Carthage support would be helpful, even if the framework is only available as a precompiled download.
Hi,
I'm using Braze through Segment to integrate on an iOS app and recently I'm facing an issue that on NewsFeed some of the cards just disappear for some users.
On my investigation around this, I've set up the example project with my Segment write key and identify with my user id so I can have a clean environment to test it properly.
The first attempt, with the project on its defaults, I was able to see all my cards on the NewsFeed, but I notice that when I've installed the dependencies the Appboy-iOS-SDK
version was 3.11.0
, not the last one as in my own project.
With this in mind, I've compared the example PodFile
with mine and I've added the platform :ios, '9.3'
line and also changed the project iOS Deployment Target
to 9.3
. After that, the Appboy-iOS-SDK
has jumped to 3.15.0
, and I can see the same issue of the missing cards on the NewsFeed screen. Also, on this version, I can see some logs that say invalid_api_key
which might indicate that something is broken on the segment integration.
it would be nice if we could install a callback that gets triggered when segment finally initializes the AppBoy Instance with the Factory class. Because assume the following scenario
so I would like to do something like this:
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) -> Bool {
let userInfo = response.notification.request.content.userInfo
guard ABKPushUtils.isAppboyRemoteNotification(userInfo) else { return false }
let executeNotification = {
// Let the appboy->segment integration know the user interacted with the push notification.
SegmentFacade.shared.segment?.handleAction(withIdentifier: response.actionIdentifier, forRemoteNotification: userInfo)
// This will actual trigger the deeplink in case, so it will call our AppDelegeate openUrl call back, with the URL that's
// in the JSON data/payload.
Appboy.sharedInstance()?.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
}
// is appboy already setup?
guard Appboy.sharedInstance() != nil else { self.delayedExecuteNotification = executeNotification; return true }
executeNotification()
return true
}
And I setup Segment and AppBoy factory code up like this:
let config : SEGAnalyticsConfiguration
....
guard let factory = SEGAppboyIntegrationFactory.instance() else { fatalError("Couldn't intialize SEGAppboyIntegrationFactory") }
// THIS IS THE FEATURE REQUEST CODE
factory.notifiyAppBoyInitialized = { [weak self] in
guard let delayedExecuteNotification = self?.delayedExecuteNotification else { return }
self?.delayedExecuteNotification = nil
// when it gets initialized.
DispatchQueue.main.async {
delayedExecuteNotification()
}
config.use(factory)
}
Typed up above code without compiling this.... sorry for any typos:
I couldn't figure out a way to get notified when segment triggers integration.initWithSettings
(which creates the Appboy singleton).
My use case is that I want to enable NUI theming app-wide, whether I open the newsfeed explicitly or when getting an inapp notification. Usually you would put the following code in applicationDidFinishLaunching
:
NUISettings.initWithStylesheet("AppBoy")
Appboy.sharedInstance()?.useNUITheming = true
but the shared instance will most likely be nil
at this point because Segment asynchronously creates it (it has to fetch the API key first).
Is there a way to get notified of the singleton creation at the moment?
I'm trying to install Segment-Appboy with the latest 2.1.0
version.
Podfile
-
pod 'Segment-Appboy'
When I run pod install
, I see older versions of the SDKs being installed -
Installing Appboy-iOS-SDK (3.16.0)
Installing Segment-Appboy (2.0.3)
Summary:
When I install the full pod:
pod "Segment-Appboy"
It modifies a bunch of settings in the project. If I commit these changes and open Xcode, then Xcode modifies a bunch of settings back...
Critical Issue:
Our CI continuously fails b/c we try to upload a build after pod installing, but it dirties git and the upload fails.
Steps:
Context:
This does not ever happen with other pods.
This does not happen with "Segment-Appboy/Core"
Suggested fix:
Replicate the settings for the Core pod into the main SDK pod.
I have a test project zip, but cannot upload it to GitHub due to size
Hi team,
Just want to check if there are any plans to support https://github.com/segmentio/analytics-swift? This library is currently one of the very last major integrations to not have added support and it is becoming an issue in newer projects.
Hello guys
I’m trying to integrate Segment and Braze side-by-side. Documentation says that I don’t need to add Rest API key, but while trying to debug my code I noticed that this is not the case. Can you help me?
from docs:
Important:
For the side-by-side integration, inputting the “Braze REST API Key” into your Braze’s Connection Settings in the Segment Dashboard
Our project is experiencing this crash which has since been fixed in 4.1.2 of the Analytics-iOS library. When will an update to this library be available? Thank you so much! Normally I would wait and watch, but we're trying to get a release out the door and any sort of timeline will help!
Based on the following, there are numerous improvements added in the swift version of the API
I noticed that this integration is using 4.4.1
version of the Appboy-iOS-SDK
which causes conflicts with your Flutter plugin that I use: https://github.com/braze-inc/braze-flutter-sdk/blob/master/ios/braze_plugin.podspec.
The plugin uses version 4.5.1
, are there any plans for this integration to update the dependency?
It is as simple as updating dependency. I don't see any significant changes in the main framework. Just bug fixes that we need. Thanks! :)
test
Archiving an app that integrates Appboy through Segment as a pod, returns the following errors:
ld: could not reparse object file in bitcode bundle: 'Invalid bitcode version (Producer: '900.0.37.0_0' Reader: '802.0.42_0')', using libLTO version 'LLVM version 8.1.0, (clang-802.0.42)' for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
This is the only output from the logs.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.