我真的很享受Ionic 2应用程序的开发,但目前我的购买流程存在一些问题。
如何在应用启动时检查用户是否购买了有效产品? 我想实现以下行为:
用户已订阅 - >显示PAGE A
用户没有订阅: - >显示PAGE B
我是否必须在本地保存订阅信息?
**编辑**
我使用firebase后端并可以在那里存储购买。
这是我的功能:
buyCoach(productName: string): void {
console.log(productName);
InAppPurchase
.getProducts([productName])
.then((products) => {
InAppPurchase
.buy(productName)
.then((data)=> {
// {
// transactionId: ...
// receipt: ...
// signature: ...
// }
// maybe store somethign to firebase? But what?
})
.catch((err)=> {
console.log("error buy");
console.log(JSON.stringify(err));
});
})
.catch((err) => {
console.log("error getProducts");
console.log(JSON.stringify(err));
});
}
答案 0 :(得分:1)
您需要身份验证和授权解决方案。 必须以某种方式识别(认证)用户。您不需要实施自己的,而是可以使用Facebook,GooglePlus或Tweeter。您可以使用Azure移动应用程序服务,允许您的用户登录这三者中的任何一个。
完成上述操作后,您可以安全地拨打您已开发的服务,让我们说出用户个人资料服务,该服务会告诉您用户拥有的订阅。
出于性能目的,您可以使用Ionic's Secure Storage插件在本地存储此信息
要导航到其他页面,您可以使用NavController.push导航到页面。
答案 1 :(得分:0)
我不知道我的问题是否正确,但您可以执行以下操作来检查用户是否已登录(通过电子邮件,脸谱,谷歌等方式登录)并且能够购买:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<com.example.andy.test.CustomTriangleView
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@android:color/transparent"
app:shapeColor="@color/colorAccent" />
</android.support.design.widget.AppBarLayout>
如果您试图了解用户是否购买了他离开应用时尚未完成购买,您可以执行以下操作:
firebase.auth().onAuthStateChanged(function(user) { // CREATES AN OBSERVABLE TO WATCH IF THE USER CHANGES IT STATES, LIKE LOGOFF
if (user) { //
this.rootPage = Page_A; // THE USER IS LOGGED, SHOW PAGE A
} else {
this.rootPage = Page_B; // USER NOT LOGGED, PAGE B
}
});
和购物车信息,它会生成一个随机密钥可以使用.push()
抓住promisse回报。.then()
方法,用于将当前商店购物车保存在其firebase节点中(使用已保存的uid)。ionViewWillLeave()
或类似的内容在ionViewDidLoad()
&#39; s app.component
它可能会减慢你的应用程序的速度)尝试以下数据库:
deviceReady()