バグ #1698
フォローした側→cWT2XRmvYp
フォローされた側→5JmRyhYtIH
・プッシュ送信時のJSON
・Android
{"action":"jp.ihearts.coslab.followed","aps":{"alert":"赤坂優太さんにフォローされました"},"target":"cWT2XRmvYp"}
・iOS
{"target":"5JmRyhYtIH","aps":{"alert":"赤坂優太さんがフォローしました"},"action":"jp.ihearts.coslab.followed"}
Android・iOSは「target」に設定されているユーザーのプロフィールを開くように実装している。
Androidから打たれるプッシュ通知の「target」にはフォローした側のObjectIdが入っているが、
iOSから打たれるプッシュ通知の「target」にはフォローされた側のObjectIdが入っている
・Android
<pre>
public static void sendFollowRequestParsePush(Activity activity, final CustomUser targetUser){
if(ParseUser.getCurrentUser()==null){
return;
}
CustomUser user=(CustomUser)ParseUser.getCurrentUser();
JSONObject data = null;
String msg = user.getHandleName() + activity.getString(R.string.text_push_accept_follow);
try {
data = new JSONObject("{\"action\": \"jp.ihearts.coslab.followed\", \"aps\" : {\"alert\" : \"" + msg + "\"}, \"target\": \"" + user.getObjectId() + "\" }");←「target」にフォローした側のObjectIdが入っている }");
} catch (JSONException e) {
e.printStackTrace();
}
if(data!=null) {
ParseAccessor.sendClientPush(targetUser.getObjectId(), msg, data.toString(), new FunctionCallback<List<ParseObject>>() {
@Override
public void done(List<ParseObject> object, ParseException e) {
if (e != null) {
e.printStackTrace();
}
}
});
}
public static void sendClientPush(String target, String message, String data, FunctionCallback<List<ParseObject>> callback) {
HashMap<String, Object> params = new HashMap<>();
params.put("target", target);←フォローされた側のObjectIdが入っている target);
params.put("message", message);
params.put("data", data);
Log.d("send", "sendClientPush");
ParseCloud.callFunctionInBackground("sendClientPush", params, callback);
}
</pre>
・iOS
<pre>
func sendPushFollow(receiverObjId: String) {
var param = [String: String]()
param["action"] = "jp.ihearts.coslab.followed"
param["target"] = receiverObjId←フォローされた側のObjectIdが入っている receiverObjId
let pushMsg = String(format: NSLocalizedString("USERFOLLOW_FOLLOWED", comment: ""), IHUser.currentUserName())
let aDriver = IHParseDriver.instance()
aDriver.sendPushNotification(param, text: pushMsg)
}
private func sendPushNotification(_ param: [String: String], text: String, callFuncName: String = "sendClientPush") {
var param = param
var dic = [String : AnyObject]()
var dic2 = [String : String]()
dic2["alert"] = text
dic["aps"] = dic2 as AnyObject
for (key,val) in param {
dic[key ] = val as AnyObject
}
do {
// Dict -> JSON
let jsonData = try JSONSerialization.data(withJSONObject: dic, options: []) //(*)options??
param["data"] = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String
} catch {
print("Error!: \(error)")
}
PFCloud.callFunction(inBackground: callFuncName, withParameters: param as [AnyHashable: Any]) {
result, error in
if error != nil {
} else {
}
}
}
</pre>
フォローされた側→5JmRyhYtIH
・プッシュ送信時のJSON
・Android
{"action":"jp.ihearts.coslab.followed","aps":{"alert":"赤坂優太さんにフォローされました"},"target":"cWT2XRmvYp"}
・iOS
{"target":"5JmRyhYtIH","aps":{"alert":"赤坂優太さんがフォローしました"},"action":"jp.ihearts.coslab.followed"}
Android・iOSは「target」に設定されているユーザーのプロフィールを開くように実装している。
Androidから打たれるプッシュ通知の「target」にはフォローした側のObjectIdが入っているが、
iOSから打たれるプッシュ通知の「target」にはフォローされた側のObjectIdが入っている
・Android
<pre>
public static void sendFollowRequestParsePush(Activity activity, final CustomUser targetUser){
if(ParseUser.getCurrentUser()==null){
return;
}
CustomUser user=(CustomUser)ParseUser.getCurrentUser();
JSONObject data = null;
String msg = user.getHandleName() + activity.getString(R.string.text_push_accept_follow);
try {
data = new JSONObject("{\"action\": \"jp.ihearts.coslab.followed\", \"aps\" : {\"alert\" : \"" + msg + "\"}, \"target\": \"" + user.getObjectId() + "\" }");←「target」にフォローした側のObjectIdが入っている }");
} catch (JSONException e) {
e.printStackTrace();
}
if(data!=null) {
ParseAccessor.sendClientPush(targetUser.getObjectId(), msg, data.toString(), new FunctionCallback<List<ParseObject>>() {
@Override
public void done(List<ParseObject> object, ParseException e) {
if (e != null) {
e.printStackTrace();
}
}
});
}
public static void sendClientPush(String target, String message, String data, FunctionCallback<List<ParseObject>> callback) {
HashMap<String, Object> params = new HashMap<>();
params.put("target", target);←フォローされた側のObjectIdが入っている target);
params.put("message", message);
params.put("data", data);
Log.d("send", "sendClientPush");
ParseCloud.callFunctionInBackground("sendClientPush", params, callback);
}
</pre>
・iOS
<pre>
func sendPushFollow(receiverObjId: String) {
var param = [String: String]()
param["action"] = "jp.ihearts.coslab.followed"
param["target"] = receiverObjId←フォローされた側のObjectIdが入っている receiverObjId
let pushMsg = String(format: NSLocalizedString("USERFOLLOW_FOLLOWED", comment: ""), IHUser.currentUserName())
let aDriver = IHParseDriver.instance()
aDriver.sendPushNotification(param, text: pushMsg)
}
private func sendPushNotification(_ param: [String: String], text: String, callFuncName: String = "sendClientPush") {
var param = param
var dic = [String : AnyObject]()
var dic2 = [String : String]()
dic2["alert"] = text
dic["aps"] = dic2 as AnyObject
for (key,val) in param {
dic[key ] = val as AnyObject
}
do {
// Dict -> JSON
let jsonData = try JSONSerialization.data(withJSONObject: dic, options: []) //(*)options??
param["data"] = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String
} catch {
print("Error!: \(error)")
}
PFCloud.callFunction(inBackground: callFuncName, withParameters: param as [AnyHashable: Any]) {
result, error in
if error != nil {
} else {
}
}
}
</pre>