BranchMetrics / cordova-ionic-phonegap-branch-deep-linking-attribution

The Branch Cordova Ionic Phonegap SDK for deep linking and attribution. Branch helps mobile apps grow with deep links / deeplinks that power paid acquisition and re-engagement campaigns, referral programs, content sharing, deep linked emails, smart banners, custom user onboarding, and more.
https://docs.branch.io/apps/cordova-phonegap-ionic/
MIT License
233 stars 144 forks source link

Ionic v4 - CDVPlugin class BranchSDK (pluginName: branchsdk) does not exist. #546

Closed eternitybro closed 5 years ago

eternitybro commented 5 years ago

I'm using ionic v4 I'm also receiving a runtime error from XCode:

CDVPlugin class BranchSDK (pluginName: BranchSDK) does not exist.
2019-02-05 14:34:49.603140-0600 Making Scents[33499:8488466] ERROR: Plugin 'BranchSDK' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2019-02-05 14:34:49.603174-0600 Making Scents[33499:8488466] FAILED pluginJSON = ["BranchSDK356496177","BranchSDK","createBranchUniversalObject",[{"contentDescription":"Checkout my creation yes on Making Scents","title":"I made scents...","canonicalIdentifier":"content\/123","canonicalUrl":"https:\/\/example.com\/content\/123","contentIndexingMode":"private","contentMetadata":{"formulaPath":"formulae\/ZLgKTone4KPkqw4nw78P\/revisions\/YcgGeEvvnr1fJTwMlQrU"}}]]

Everything compiles fine but none of the branch functions work.

I've tried adding the plugin only in config.xml (as specified in the docs).

I've also tried using

ionic cordova plugin add branch-cordova-sdk
npm install @ionic-native/branch-io@4

as specified in the Ionic docs and npm install @ionic-native/branch-io@latest and npm install @ionic-native/branch-io

Everytime I've removed and added the ios platform.

ionic cordova platform remove ios
ionic cordova platform add ios
ionic cordova platform prepare ios

I still get this runtime error.

I've tried using: import { BranchIo } from '@ionic-native/branch-io/ngx' with

public branch: BranchIo;
...
this.branch.initSession().then(data => {

vs

declare var Branch
...
Branch =  Branch || (<any>window).Branch;
Branch.initSession().then(data => {

I'm worried about manually copying files over to XCode because if I add/remove the platform in the future I'll have to keep copying over a hack.

Here's my config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.keepmakingscents" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>Making Scents</name>
    <description>Create, experience, share.</description>
    <author email="rob@robgungor.com" href="https://robgungor.com/">Rob Gungor</author>
    <content src="index.html" />
    <access origin="*" />
    <access origin="*facebook.com*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <preference name="ScrollEnabled" value="false" />
    <preference name="android-minSdkVersion" value="19" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="SplashMaintainAspectRatio" value="true" />
    <preference name="SplashShowOnlyFirstTime" value="false" />
    <preference name="AutohideSplashScreen" value="false" />
    <preference name="SplashScreenDelay" value="30000" />
    <preference name="KeyboardResize" value="true" />
    <platform name="android">
        <allow-intent href="market:*" />
        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
        <icon height="57" src="resources/ios/icon/icon.png" width="57" />
        <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
        <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
        <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
        <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
        <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
        <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
        <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
        <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
        <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
        <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
        <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
        <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
        <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
        <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
        <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
        <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
        <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
        <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
        <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
        <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
        <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
        <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
        <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
        <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
    </platform>
    <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
    <plugin name="cordova-plugin-facebook4" spec="4.1.0">
        <variable name="APP_ID" value="XXX" />
        <variable name="APP_NAME" value="makingScents" />
    </plugin>
    <branch-config>
        <branch-key value="key_live_XXX" />
        <uri-scheme value="makingscents" />
        <link-domain value="makingscents.app.link" />
        <ios-team-release value="XXX" />
    </branch-config>
    <plugin name="cordova-plugin-ionic-webview" spec="^2.3.2" />
    <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
    <plugin name="cordova-plugin-taptic-engine" spec="2.1.0" />
    <plugin name="cordova-plugin-ionic-keyboard" spec="2.1.3" />
    <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
    <preference name="SplashScreen" value="screen" />
    <plugin name="branch-cordova-sdk" spec="3.1.5" />
    <engine name="ios" spec="4.5.5" />
</widget>

Hellllllp!

sequoiaat commented 5 years ago

@robgungor Please check if these step help you resolve the problem -

Rebuild the Branch SDK. There is a chance the .h and .m files were not installed the first time /plugin/branch-crodova-sdk/src/ios ((https://stackoverflow.com/questions/16839110/error-plugin-not-found-or-is-not-a-cdvplugin-check-your-plugin-mapping-in))

There are two ways to install Branch plugin

let us know if this is resolving your issue

eternitybro commented 5 years ago

@sequoiaat no - please re-read my first entry, I mentioned that I had tried both methods with no success. I've just tried both methods again with no success. :/

sequoiaat commented 5 years ago

We were not able to reproduce similar situation, could you please specify your XCode version also.

eternitybro commented 5 years ago

It’s working now using

declare var Branch

Instead of

import {BranchIo}

Ionic should remove that documentation from their site as it’s not working.