java - 如何使用 Branch.io 实现推荐系统

标签 java android branch branch.io referrals

我已经按照文档进行了操作,我不知道出了什么问题,我真的很感激一些见解。

list :

<uses-permission android:name="android.permission.INTERNET" />

<application
    ...
    android:name="io.branch.referral.BranchApp">
    <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_123456789asdf" />
    <activity
        ...>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:label="indexed_on_SEO">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:scheme="http"
                android:host="www.schoolminder.info"
                android:pathPrefix="/home"/>
        </intent-filter>
        <intent-filter>
            <data
                android:scheme="http"
                android:host="open" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

    <receiver
        android:name="io.branch.referral.InstallListener"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

</application>

Activity

@Override
protected void onStart() {
    super.onStart();
    Branch branch = Branch.getInstance();

    branch.initSession(new Branch.BranchReferralInitListener(){
        @Override
        public void onInitFinished(JSONObject referringParams, BranchError error) {
            if (error == null) {
                Log.i("MyApp", "deep link data: " + referringParams.toString());
            } else {
                Log.i("MyApp", error.getMessage());
            }
        }
    }, this.getIntent().getData(), this);

    String userID = new BigInteger(130, new SecureRandom()).toString(32);
    Branch.getInstance().setIdentity(userID);
}

@Override
protected void onNewIntent(Intent intent) {
    this.setIntent(intent);
}

发出邀请时的 fragment :

    BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
            .setCanonicalIdentifier("item/12345")
            .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)
            .addContentMetadata("property1", "blue")
            .addContentMetadata("property2", "red");

    LinkProperties linkProperties = new LinkProperties()
            .setChannel("facebook")
            .setFeature("sharing");

    branchUniversalObject.generateShortUrl(getActivity(), linkProperties, new Branch.BranchLinkCreateListener() {
        @Override
        public void onLinkCreate(String url, BranchError error) {
            if (error == null) {
                link = url;
            }
        }
    });

    Branch.getInstance(getActivity().getApplicationContext()).loadRewards(new                                   Branch.BranchReferralStateChangedListener() {
        @Override
        public void onStateChanged(boolean changed, BranchError error) {
            int credits = Branch.getInstance().getCredits();
            Branch.getInstance().redeemRewards(credits);
            Log.i("MyApp", credits+"");
        }
    });

我在 Branch Dashboard 设置上处理了每个平台的链接。

发生的情况是,当我将此链接发送给某人时,它会按预期打开 Play 商店,他可以下载它,但我没有获得积分,并且它没有显示任何推荐用户而不是影响者,所以我一定是做错了什么。

enter image description here

最佳答案

如果不提及是否收到错误或无法连接到 Branch(记录标签“branch”)等,很难找出问题所在。

这里有一些实现技巧。首先,您应该在 Application 类中初始化,而不是在 onStart() 中。如果您没有 Application 类,则仅在 onCreate() 中初始化

public class YourApplication extends Application {
@Override
    public void onCreate() {

        Branch.getAutoInstance(this); // instantiate branch

    }
}

根据您所使用的内容,假设您正在使用推荐代码,您需要一个我看到您设置的身份。这是通过引用 Branch 对象来完成的。

Branch branch = Branch.getInstance(context);

// set identity
branch.setIdentity("your user id");

此后,您可以开始检索信息,例如接收推荐代码

branch.getReferralCode(null, defaultRefereeReward, null, Branch.REFERRAL_BUCKET_DEFAULT,
                Branch.REFERRAL_CODE_AWARD_UNLIMITED, Branch.REFERRAL_CODE_LOCATION_BOTH,
                new Branch.BranchReferralInitListener() {

                    @Override
                    public void onInitFinished(JSONObject jsonObject, BranchError branchError) {
                        if (FrameworkUtils.checkIfNull(branchError)) {
                            try {
                                // get and set referral code for current user
                                String currentCode = jsonObject.getString("referral_code");

                                // you can store the code in a model class if want   
                                ReferralInfoModel.setCurrentReferralCode(currentCode);

                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        } else {
                            Logger.e(TAG, branchError.getMessage());
                        }
                    }
                });

您还可以使用其他方法来跟踪历史记录,例如

Branch.getCreditHistory()

我认为事情可能不适合你的最大原因是你确实需要异步发出请求。使用AsynTask。点击您拥有的分支网址。

更多示例请参阅其他帖子:How to generate referral code using Branch.io Metrics?

文档:https://github.com/BranchMetrics/Branch-Android-SDK#register-an-activity-for-direct-deep-linking-optional-but-recommended

您可以直接联系 Branch 以确认您的实现。干杯!

关于java - 如何使用 Branch.io 实现推荐系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181681/

相关文章:

c++ - git分支实验

Java 删除字符串上的标点符号(还有 ’ “” 和所有这些)保持重音字符

java - 为什么 checkNotNull() 没有注解 @Nonnull

java - JellyBean 中未调用 onNewIntent

android - 在旋转和返回时恢复 MapView 的状态

merge - 我可以在化石的树干上做一个替代分支吗

git - 显示 Git 分支结构

java - 从 ListView 拖放到按钮上

java - 奇怪的 JAVA UTF-8 编码行为,新的 String(bytes ,"UTF-8") 在大多数相似的设置上给出不同的结果

android - 从时间选择器中选择时间获取不同时区的时间