2016-12-01 13 views
1

私はAndroid開発を初めて利用しています。 私は、人々がプッシュ通知を購入できるようにするApp In Billingを持っています。共有環境設定からブール値でFirebase Messagingを無効にする方法(Android)

私はFirebase Messagingを実装しました。それはちょうど箱の中で働いた。驚くばかり!

しかし、私は今購入されていない場合、それを無効にしたい。 (共有プリファレンスにブール値を格納)

私はこれにどのようにアプローチするか分かりません。

public class MyFirebaseMessagingService extends  FirebaseMessagingService { 
private static final String TAG = "FCM Service"; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    // TODO: Handle FCM messages here. 
    // If the application is in the foreground handle both data and notification messages here. 
    // Also if you intend on generating your own notifications as a result of a received FCM 
    // message, here is where that should be initiated. 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 
} 
} 

public class FirebaseIDService extends FirebaseInstanceIdService { 
private static final String TAG = "FirebaseIDService"; 



@Override 
public void onTokenRefresh() { 
     // Get updated InstanceID token. 

     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 

     // TODO: Implement this method to send any registration to your app's servers. 
     sendRegistrationToServer(refreshedToken); 

} 

/** 
* Persist token to third-party servers. 
* 
* Modify this method to associate the user's FCM InstanceID token with any server-side account 
* maintained by your application. 
* 
* @param token The new token. 
*/ 
private void sendRegistrationToServer(String token) { 
    // Add custom implementation, as needed. 
} 
} 

マニフェスト:(アプリケーションタグの内側)

<service 
    android:name=".MyFirebaseMessagingService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 

<service 
    android:name=".FirebaseIDService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
    </intent-filter> 
</service> 

私は "通知"

と呼ばれる共有環境設定に保存されているブール値を持っている基本的に私の質問は: どこに置くか

if(boolean == true){ 
// do notification (no clue what this method would be) 
} 

ここで、何を探したり検索したりする必要がありますか? 正しい方向に私を指すしてください:)

敬具、

クリス

+0

ここで、すべての通知は、通知変数のステータスに従ってそれらを無効にすることを示しています。 私はあなたの問題をはっきりと知りませんでした! –

+0

'notification'や' data'タイプのメッセージを使用していますか? – Wilik

+0

@ nightcoder。問題は、通知の表示がどこで呼び出されているのか分かりません。 – Chrizlee

答えて

0
@Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
    // check condition pay or not 
    if(CheckCondition){ 
     // if user pay/bought product 
     sendPushNotification(remoteMessage.getNotification().getBody()); 
     } 
    else{ 
    // else user not pay/bought product 
    // do not show Push to user 
     }  
    } 

    private void sendNotification(String messageBody) 
    { 
     Intent intent = new Intent(MyFirebaseMessagingService.this, MainActivity.class); 
     intent.putExtra("msg",messageBody); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 , intent, PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("FCM Message") 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 , notificationBuilder.build()); 

    } 
+0

ありがとう、 私はそれを撃つでしょう。 sendPushNotification()メソッドはどこから提供されますか? 実際の関数呼び出しが内部になかったので、この関数は私には意味がありませんでした。 (私は彼らが単にgetBody()を記録すると思った) – Chrizlee

+0

デバイス上のプッシュ通知を表示するためにその関数を作成しなければなりません。 –

+0

** CheckCondition **についてのアイデアを得る? –

1

あなたはあなたのコード

<service 
    android:name=".MyFirebaseMessagingService" 
    android:enabled="false"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 

とユーザーの購入後を簡素化するために、全サービスを無効にすることができます - 有効にする

PackageManager pm = getApplicationContext().getPackageManager(); 
    ComponentName componentName = new ComponentName(this.getApplicationContext(), MyFirebaseMessagingService.class); 
     pm.setComponentEnabledSetting(componentName, 
     PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
     PackageManager.DONT_KILL_APP); 

この方法は、プッシュ受信時にアプリが起動されないため、バッテリの寿命を節約します。

+0

ありがとう、これを打つつもりです。安全なバッテリーにもいいよ – Chrizlee

+0

これを一度だけ有効にすることはできますか? @Dima – Chrizlee

+0

@Chrizleeはい、それはアクティブのままです –

関連する問題